1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "net/proxy/mock_proxy_script_fetcher.h" 6 7 #include "base/logging.h" 8 #include "base/message_loop/message_loop.h" 9 #include "base/strings/string16.h" 10 #include "base/strings/utf_string_conversions.h" 11 #include "net/base/net_errors.h" 12 13 namespace net { 14 15 MockProxyScriptFetcher::MockProxyScriptFetcher() 16 : pending_request_text_(NULL), 17 waiting_for_fetch_(false) { 18 } 19 20 MockProxyScriptFetcher::~MockProxyScriptFetcher() {} 21 22 // ProxyScriptFetcher implementation. 23 int MockProxyScriptFetcher::Fetch(const GURL& url, base::string16* text, 24 const CompletionCallback& callback) { 25 DCHECK(!has_pending_request()); 26 27 // Save the caller's information, and have them wait. 28 pending_request_url_ = url; 29 pending_request_callback_ = callback; 30 pending_request_text_ = text; 31 32 if (waiting_for_fetch_) 33 base::MessageLoop::current()->Quit(); 34 35 return ERR_IO_PENDING; 36 } 37 38 void MockProxyScriptFetcher::NotifyFetchCompletion( 39 int result, const std::string& ascii_text) { 40 DCHECK(has_pending_request()); 41 *pending_request_text_ = ASCIIToUTF16(ascii_text); 42 CompletionCallback callback = pending_request_callback_; 43 pending_request_callback_.Reset(); 44 callback.Run(result); 45 } 46 47 void MockProxyScriptFetcher::Cancel() { 48 } 49 50 URLRequestContext* MockProxyScriptFetcher::GetRequestContext() const { 51 return NULL; 52 } 53 54 const GURL& MockProxyScriptFetcher::pending_request_url() const { 55 return pending_request_url_; 56 } 57 58 bool MockProxyScriptFetcher::has_pending_request() const { 59 return !pending_request_callback_.is_null(); 60 } 61 62 void MockProxyScriptFetcher::WaitUntilFetch() { 63 DCHECK(!has_pending_request()); 64 waiting_for_fetch_ = true; 65 base::MessageLoop::current()->Run(); 66 waiting_for_fetch_ = false; 67 } 68 69 } // namespace net 70