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