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.
5 #include "net/proxy/network_delegate_error_observer.h"
8 #include "base/bind_helpers.h"
9 #include "base/message_loop/message_loop_proxy.h"
10 #include "base/threading/thread.h"
11 #include "net/base/net_errors.h"
12 #include "net/base/network_delegate_impl.h"
13 #include "testing/gtest/include/gtest/gtest.h"
19 class TestNetworkDelegate
: public net::NetworkDelegateImpl
{
21 TestNetworkDelegate() : got_pac_error_(false) {}
22 ~TestNetworkDelegate() override
{}
24 bool got_pac_error() const { return got_pac_error_
; }
27 // net::NetworkDelegate implementation.
28 int OnBeforeURLRequest(URLRequest
* request
,
29 const CompletionCallback
& callback
,
30 GURL
* new_url
) override
{
33 int OnBeforeSendHeaders(URLRequest
* request
,
34 const CompletionCallback
& callback
,
35 HttpRequestHeaders
* headers
) override
{
38 void OnSendHeaders(URLRequest
* request
,
39 const HttpRequestHeaders
& headers
) override
{}
40 int OnHeadersReceived(
42 const CompletionCallback
& callback
,
43 const HttpResponseHeaders
* original_response_headers
,
44 scoped_refptr
<HttpResponseHeaders
>* override_response_headers
,
45 GURL
* allowed_unsafe_redirect_url
) override
{
48 void OnBeforeRedirect(URLRequest
* request
,
49 const GURL
& new_location
) override
{}
50 void OnResponseStarted(URLRequest
* request
) override
{}
51 void OnRawBytesRead(const URLRequest
& request
, int bytes_read
) override
{}
52 void OnCompleted(URLRequest
* request
, bool started
) override
{}
53 void OnURLRequestDestroyed(URLRequest
* request
) override
{}
55 void OnPACScriptError(int line_number
, const base::string16
& error
) override
{
56 got_pac_error_
= true;
58 AuthRequiredResponse
OnAuthRequired(URLRequest
* request
,
59 const AuthChallengeInfo
& auth_info
,
60 const AuthCallback
& callback
,
61 AuthCredentials
* credentials
) override
{
62 return AUTH_REQUIRED_RESPONSE_NO_ACTION
;
64 bool OnCanGetCookies(const URLRequest
& request
,
65 const CookieList
& cookie_list
) override
{
68 bool OnCanSetCookie(const URLRequest
& request
,
69 const std::string
& cookie_line
,
70 CookieOptions
* options
) override
{
73 bool OnCanAccessFile(const net::URLRequest
& request
,
74 const base::FilePath
& path
) const override
{
77 bool OnCanThrottleRequest(const URLRequest
& request
) const override
{
86 // Check that the OnPACScriptError method can be called from an arbitrary
88 TEST(NetworkDelegateErrorObserverTest
, CallOnThread
) {
89 base::Thread
thread("test_thread");
91 TestNetworkDelegate network_delegate
;
92 NetworkDelegateErrorObserver
observer(
93 &network_delegate
, base::MessageLoopProxy::current().get());
96 base::Bind(&NetworkDelegateErrorObserver::OnPACScriptError
,
97 base::Unretained(&observer
),
101 base::MessageLoop::current()->RunUntilIdle();
102 ASSERT_TRUE(network_delegate
.got_pac_error());
105 // Check that passing a NULL network delegate works.
106 TEST(NetworkDelegateErrorObserverTest
, NoDelegate
) {
107 base::Thread
thread("test_thread");
109 NetworkDelegateErrorObserver
observer(
110 NULL
, base::MessageLoopProxy::current().get());
111 thread
.message_loop()
112 ->PostTask(FROM_HERE
,
113 base::Bind(&NetworkDelegateErrorObserver::OnPACScriptError
,
114 base::Unretained(&observer
),
118 base::MessageLoop::current()->RunUntilIdle();
119 // Shouldn't have crashed until here...