| // Copyright 2014 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. | 
 |  | 
 | #ifndef NET_BASE_LAYERED_NETWORK_DELEGATE_H_ | 
 | #define NET_BASE_LAYERED_NETWORK_DELEGATE_H_ | 
 |  | 
 | #include "base/memory/scoped_ptr.h" | 
 | #include "base/strings/string16.h" | 
 | #include "net/base/completion_callback.h" | 
 | #include "net/base/network_delegate.h" | 
 | #include "net/cookies/canonical_cookie.h" | 
 |  | 
 | class GURL; | 
 |  | 
 | namespace base { | 
 | class FilePath; | 
 | } | 
 |  | 
 | namespace net { | 
 |  | 
 | class CookieOptions; | 
 | class HttpRequestHeaders; | 
 | class HttpResponseHeaders; | 
 | class ProxyInfo; | 
 | class ProxyServer; | 
 | class ProxyService; | 
 | class URLRequest; | 
 |  | 
 | // WrappingNetworkDelegate takes a |network_delegate| and extends it. When | 
 | // On*() is called, the On*Internal() method of this is first called and then | 
 | // the On*() of |network_delegate| is called. On*Internal() methods have no | 
 | // return values, and cannot prevent calling into the nested network delegate. | 
 | class NET_EXPORT LayeredNetworkDelegate : public NetworkDelegate { | 
 |  public: | 
 |   explicit LayeredNetworkDelegate( | 
 |       scoped_ptr<NetworkDelegate> nested_network_delegate); | 
 |   ~LayeredNetworkDelegate() override; | 
 |  | 
 |   // NetworkDelegate implementation: | 
 |   int OnBeforeURLRequest(URLRequest* request, | 
 |                          const CompletionCallback& callback, | 
 |                          GURL* new_url) final; | 
 |   void OnResolveProxy(const GURL& url, | 
 |                       int load_flags, | 
 |                       const ProxyService& proxy_service, | 
 |                       ProxyInfo* result) final; | 
 |   void OnProxyFallback(const ProxyServer& bad_proxy, int net_error) final; | 
 |   int OnBeforeSendHeaders(URLRequest* request, | 
 |                           const CompletionCallback& callback, | 
 |                           HttpRequestHeaders* headers) final; | 
 |   void OnBeforeSendProxyHeaders(URLRequest* request, | 
 |                                 const ProxyInfo& proxy_info, | 
 |                                 HttpRequestHeaders* headers) final; | 
 |   void OnSendHeaders(URLRequest* request, | 
 |                      const HttpRequestHeaders& headers) final; | 
 |   int OnHeadersReceived( | 
 |       URLRequest* request, | 
 |       const CompletionCallback& callback, | 
 |       const HttpResponseHeaders* original_response_headers, | 
 |       scoped_refptr<HttpResponseHeaders>* override_response_headers, | 
 |       GURL* allowed_unsafe_redirect_url) final; | 
 |   void OnBeforeRedirect(URLRequest* request, const GURL& new_location) final; | 
 |   void OnResponseStarted(URLRequest* request) final; | 
 |   void OnRawBytesRead(const URLRequest& request, int bytes_read) final; | 
 |   void OnCompleted(URLRequest* request, bool started) final; | 
 |   void OnURLRequestDestroyed(URLRequest* request) final; | 
 |   void OnPACScriptError(int line_number, const base::string16& error) final; | 
 |   AuthRequiredResponse OnAuthRequired(URLRequest* request, | 
 |                                       const AuthChallengeInfo& auth_info, | 
 |                                       const AuthCallback& callback, | 
 |                                       AuthCredentials* credentials) final; | 
 |   bool OnCanGetCookies(const URLRequest& request, | 
 |                        const CookieList& cookie_list) final; | 
 |   bool OnCanSetCookie(const URLRequest& request, | 
 |                       const std::string& cookie_line, | 
 |                       CookieOptions* options) final; | 
 |   bool OnCanAccessFile(const URLRequest& request, | 
 |                        const base::FilePath& path) const final; | 
 |   bool OnCanThrottleRequest(const URLRequest& request) const final; | 
 |   bool OnCanEnablePrivacyMode(const GURL& url, | 
 |                               const GURL& first_party_for_cookies) const final; | 
 |   bool OnFirstPartyOnlyCookieExperimentEnabled() const final; | 
 |   bool OnCancelURLRequestWithPolicyViolatingReferrerHeader( | 
 |       const URLRequest& request, | 
 |       const GURL& target_url, | 
 |       const GURL& referrer_url) const final; | 
 |  | 
 |  protected: | 
 |   virtual void OnBeforeURLRequestInternal(URLRequest* request, | 
 |                                           const CompletionCallback& callback, | 
 |                                           GURL* new_url); | 
 |  | 
 |   virtual void OnResolveProxyInternal(const GURL& url, | 
 |                                       int load_flags, | 
 |                                       const ProxyService& proxy_service, | 
 |                                       ProxyInfo* result); | 
 |  | 
 |   virtual void OnProxyFallbackInternal(const ProxyServer& bad_proxy, | 
 |                                        int net_error); | 
 |  | 
 |   virtual void OnBeforeSendHeadersInternal(URLRequest* request, | 
 |                                            const CompletionCallback& callback, | 
 |                                            HttpRequestHeaders* headers); | 
 |  | 
 |   virtual void OnBeforeSendProxyHeadersInternal(URLRequest* request, | 
 |                                                 const ProxyInfo& proxy_info, | 
 |                                                 HttpRequestHeaders* headers); | 
 |  | 
 |   virtual void OnSendHeadersInternal(URLRequest* request, | 
 |                                      const HttpRequestHeaders& headers); | 
 |  | 
 |   virtual void OnHeadersReceivedInternal( | 
 |       URLRequest* request, | 
 |       const CompletionCallback& callback, | 
 |       const HttpResponseHeaders* original_response_headers, | 
 |       scoped_refptr<HttpResponseHeaders>* override_response_headers, | 
 |       GURL* allowed_unsafe_redirect_url); | 
 |  | 
 |   virtual void OnBeforeRedirectInternal(URLRequest* request, | 
 |                                         const GURL& new_location); | 
 |  | 
 |   virtual void OnResponseStartedInternal(URLRequest* request); | 
 |  | 
 |   virtual void OnRawBytesReadInternal(const URLRequest& request, | 
 |                                       int bytes_read); | 
 |  | 
 |   virtual void OnCompletedInternal(URLRequest* request, bool started); | 
 |  | 
 |   virtual void OnURLRequestDestroyedInternal(URLRequest* request); | 
 |  | 
 |   virtual void OnPACScriptErrorInternal(int line_number, | 
 |                                         const base::string16& error); | 
 |  | 
 |   virtual void OnCanGetCookiesInternal(const URLRequest& request, | 
 |                                        const CookieList& cookie_list); | 
 |  | 
 |   virtual void OnCanSetCookieInternal(const URLRequest& request, | 
 |                                       const std::string& cookie_line, | 
 |                                       CookieOptions* options); | 
 |  | 
 |   virtual void OnAuthRequiredInternal(URLRequest* request, | 
 |                                       const AuthChallengeInfo& auth_info, | 
 |                                       const AuthCallback& callback, | 
 |                                       AuthCredentials* credentials); | 
 |  | 
 |   virtual void OnCanAccessFileInternal(const URLRequest& request, | 
 |                                        const base::FilePath& path) const; | 
 |  | 
 |   virtual void OnCanThrottleRequestInternal(const URLRequest& request) const; | 
 |  | 
 |   virtual void OnCanEnablePrivacyModeInternal( | 
 |       const GURL& url, | 
 |       const GURL& first_party_for_cookies) const; | 
 |  | 
 |   virtual void OnFirstPartyOnlyCookieExperimentEnabledInternal() const; | 
 |  | 
 |   virtual void OnCancelURLRequestWithPolicyViolatingReferrerHeaderInternal( | 
 |       const URLRequest& request, | 
 |       const GURL& target_url, | 
 |       const GURL& referrer_url) const; | 
 |  | 
 |  private: | 
 |   scoped_ptr<NetworkDelegate> nested_network_delegate_; | 
 | }; | 
 |  | 
 | }  // namespace net | 
 |  | 
 | #endif  // NET_BASE_LAYERED_NETWORK_DELEGATE_H_ |