普通文本  |  70行  |  1.89 KB

// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "net/proxy/mock_proxy_script_fetcher.h"

#include "base/logging.h"
#include "base/message_loop/message_loop.h"
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "net/base/net_errors.h"

namespace net {

MockProxyScriptFetcher::MockProxyScriptFetcher()
    : pending_request_text_(NULL),
      waiting_for_fetch_(false) {
}

MockProxyScriptFetcher::~MockProxyScriptFetcher() {}

// ProxyScriptFetcher implementation.
int MockProxyScriptFetcher::Fetch(const GURL& url, base::string16* text,
                                  const CompletionCallback& callback) {
  DCHECK(!has_pending_request());

  // Save the caller's information, and have them wait.
  pending_request_url_ = url;
  pending_request_callback_ = callback;
  pending_request_text_ = text;

  if (waiting_for_fetch_)
    base::MessageLoop::current()->Quit();

  return ERR_IO_PENDING;
}

void MockProxyScriptFetcher::NotifyFetchCompletion(
    int result, const std::string& ascii_text) {
  DCHECK(has_pending_request());
  *pending_request_text_ = base::ASCIIToUTF16(ascii_text);
  CompletionCallback callback = pending_request_callback_;
  pending_request_callback_.Reset();
  callback.Run(result);
}

void MockProxyScriptFetcher::Cancel() {
}

URLRequestContext* MockProxyScriptFetcher::GetRequestContext() const {
  return NULL;
}

const GURL& MockProxyScriptFetcher::pending_request_url() const {
  return pending_request_url_;
}

bool MockProxyScriptFetcher::has_pending_request() const {
  return !pending_request_callback_.is_null();
}

void MockProxyScriptFetcher::WaitUntilFetch() {
  DCHECK(!has_pending_request());
  waiting_for_fetch_ = true;
  base::MessageLoop::current()->Run();
  waiting_for_fetch_ = false;
}

}  // namespace net