network_delegate_error_observer_unittest.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// found in the LICENSE file. 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "net/proxy/network_delegate_error_observer.h" 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "base/bind.h" 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "base/bind_helpers.h" 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "base/message_loop_proxy.h" 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "base/threading/thread.h" 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "net/base/net_errors.h" 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "net/base/network_delegate.h" 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "testing/gtest/include/gtest/gtest.h" 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectnamespace net { 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectnamespace { 185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectclass TestNetworkDelegate : public net::NetworkDelegate { 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project public: 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project TestNetworkDelegate() : got_pac_error_(false) {} 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual ~TestNetworkDelegate() {} 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bool got_pac_error() const { return got_pac_error_; } 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project private: 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project // net::NetworkDelegate implementation. 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual int OnBeforeURLRequest(URLRequest* request, 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const CompletionCallback& callback, 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project GURL* new_url) OVERRIDE { 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return OK; 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual int OnBeforeSendHeaders(URLRequest* request, 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const CompletionCallback& callback, 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project HttpRequestHeaders* headers) OVERRIDE { 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return OK; 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual void OnSendHeaders(URLRequest* request, 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const HttpRequestHeaders& headers) OVERRIDE {} 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual int OnHeadersReceived( 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project URLRequest* request, 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const CompletionCallback& callback, 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const HttpResponseHeaders* original_response_headers, 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project scoped_refptr<HttpResponseHeaders>* override_response_headers) OVERRIDE { 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return net::OK; 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual void OnBeforeRedirect(URLRequest* request, 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const GURL& new_location) OVERRIDE {} 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual void OnResponseStarted(URLRequest* request) OVERRIDE {} 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual void OnRawBytesRead(const URLRequest& request, 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int bytes_read) OVERRIDE {} 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual void OnCompleted(URLRequest* request, bool started) OVERRIDE {} 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual void OnURLRequestDestroyed(URLRequest* request) OVERRIDE {} 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual void OnPACScriptError(int line_number, 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const string16& error) OVERRIDE { 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project got_pac_error_ = true; 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual AuthRequiredResponse OnAuthRequired( 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project URLRequest* request, 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const AuthChallengeInfo& auth_info, 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const AuthCallback& callback, 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project AuthCredentials* credentials) OVERRIDE { 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return AUTH_REQUIRED_RESPONSE_NO_ACTION; 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual bool OnCanGetCookies(const URLRequest& request, 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const CookieList& cookie_list) OVERRIDE { 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return true; 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual bool OnCanSetCookie(const URLRequest& request, 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const std::string& cookie_line, 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project CookieOptions* options) OVERRIDE { 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return true; 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual bool OnCanAccessFile(const net::URLRequest& request, 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const FilePath& path) const OVERRIDE { 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return true; 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual bool OnCanThrottleRequest(const URLRequest& request) const OVERRIDE { 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return false; 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual int OnBeforeSocketStreamConnect( 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project SocketStream* stream, 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const CompletionCallback& callback) OVERRIDE { 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return OK; 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project virtual void OnRequestWaitStateChange(const net::URLRequest& request, 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project RequestWaitState state) OVERRIDE { 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bool got_pac_error_; 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} // namespace 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// Check that the OnPACScriptError method can be called from an arbitrary 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// thread. 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTEST(NetworkDelegateErrorObserverTest, CallOnThread) { 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project base::Thread thread("test_thread"); 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project thread.Start(); 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project TestNetworkDelegate network_delegate; 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NetworkDelegateErrorObserver 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project observer(&network_delegate, 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project base::MessageLoopProxy::current()); 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project thread.message_loop()->PostTask( 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project FROM_HERE, 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project base::Bind(&NetworkDelegateErrorObserver::OnPACScriptError, 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project base::Unretained(&observer), 42, string16())); 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project thread.Stop(); 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project MessageLoop::current()->RunAllPending(); 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ASSERT_TRUE(network_delegate.got_pac_error()); 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// Check that passing a NULL network delegate works. 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectTEST(NetworkDelegateErrorObserverTest, NoDelegate) { 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project base::Thread thread("test_thread"); 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project thread.Start(); 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project NetworkDelegateErrorObserver 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project observer(NULL, base::MessageLoopProxy::current()); 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project thread.message_loop()->PostTask( 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project FROM_HERE, 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project base::Bind(&NetworkDelegateErrorObserver::OnPACScriptError, 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project base::Unretained(&observer), 42, string16())); 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project thread.Stop(); 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project MessageLoop::current()->RunAllPending(); 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project // Shouldn't have crashed until here... 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} // namespace net 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project