Chromium Code Reviews| Index: net/base/wrapping_network_delegate.h |
| diff --git a/net/base/network_delegate.h b/net/base/wrapping_network_delegate.h |
| similarity index 64% |
| copy from net/base/network_delegate.h |
| copy to net/base/wrapping_network_delegate.h |
| index 03dee0b5f99040977bd73c4a52ed3b3aa920f19c..a51787e7690b65e5b6157a0acdb030a46a338cda 100644 |
| --- a/net/base/network_delegate.h |
| +++ b/net/base/wrapping_network_delegate.h |
| @@ -1,17 +1,12 @@ |
| -// Copyright (c) 2012 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. |
| +// TODO: Insert description here. (generated by megjablon) |
| -#ifndef NET_BASE_NETWORK_DELEGATE_H_ |
| -#define NET_BASE_NETWORK_DELEGATE_H_ |
| +#ifndef NET_BASE_WRAPPING_NETWORK_DELEGATE_H_ |
| +#define NET_BASE_WRAPPING_NETWORK_DELEGATE_H_ |
| -#include <string> |
| - |
| -#include "base/callback.h" |
| +#include "base/memory/scoped_ptr.h" |
| #include "base/strings/string16.h" |
| -#include "base/threading/non_thread_safe.h" |
| -#include "net/base/auth.h" |
| #include "net/base/completion_callback.h" |
| +#include "net/base/network_delegate.h" |
| #include "net/cookies/canonical_cookie.h" |
| class GURL; |
| @@ -22,90 +17,83 @@ class FilePath; |
| namespace net { |
| -// NOTE: Layering violations! |
| -// We decided to accept these violations (depending |
| -// on other net/ submodules from net/base/), because otherwise NetworkDelegate |
| -// would have to be broken up into too many smaller interfaces targeted to each |
| -// submodule. Also, since the lower levels in net/ may callback into higher |
| -// levels, we may encounter dangerous casting issues. |
| -// |
| -// NOTE: It is not okay to add any compile-time dependencies on symbols outside |
| -// of net/base here, because we have a net_base library. Forward declarations |
| -// are ok. |
| class CookieOptions; |
| class HttpRequestHeaders; |
| class HttpResponseHeaders; |
| class ProxyInfo; |
| class ProxyServer; |
| class ProxyService; |
| -class SocketStream; |
| class URLRequest; |
| -class NET_EXPORT NetworkDelegate : public base::NonThreadSafe { |
| +class NET_EXPORT WrappingNetworkDelegate : public NetworkDelegate { |
|
bengr
2014/11/18 19:30:56
Should this subclass NetworkDelegateImpl?
megjablon
2014/11/19 19:23:41
Acknowledged.
|
| public: |
| - // AuthRequiredResponse indicates how a NetworkDelegate handles an |
| - // OnAuthRequired call. It's placed in this file to prevent url_request.h |
| - // from having to include network_delegate.h. |
| - enum AuthRequiredResponse { |
| - AUTH_REQUIRED_RESPONSE_NO_ACTION, |
| - AUTH_REQUIRED_RESPONSE_SET_AUTH, |
| - AUTH_REQUIRED_RESPONSE_CANCEL_AUTH, |
| - AUTH_REQUIRED_RESPONSE_IO_PENDING, |
| - }; |
| - typedef base::Callback<void(AuthRequiredResponse)> AuthCallback; |
| - |
| - virtual ~NetworkDelegate() {} |
| - |
| - // Notification interface called by the network stack. Note that these |
| - // functions mostly forward to the private virtuals. They also add some sanity |
| - // checking on parameters. See the corresponding virtuals for explanations of |
| - // the methods and their arguments. |
| - int NotifyBeforeURLRequest(URLRequest* request, |
| - const CompletionCallback& callback, |
| - GURL* new_url); |
| - void NotifyResolveProxy(const GURL& url, |
| - int load_flags, |
| - const ProxyService& proxy_service, |
| - ProxyInfo* result); |
| - void NotifyProxyFallback(const ProxyServer& bad_proxy, |
| - int net_error); |
| - int NotifyBeforeSendHeaders(URLRequest* request, |
| - const CompletionCallback& callback, |
| - HttpRequestHeaders* headers); |
| - void NotifyBeforeSendProxyHeaders(URLRequest* request, |
| - const ProxyInfo& proxy_info, |
| - HttpRequestHeaders* headers); |
| - void NotifySendHeaders(URLRequest* request, |
| - const HttpRequestHeaders& headers); |
| - int NotifyHeadersReceived( |
| + WrappingNetworkDelegate(scoped_ptr<NetworkDelegate> network_delegate); |
| + virtual ~WrappingNetworkDelegate(); |
| + |
| + 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 OnSendHeadersInternal(URLRequest* request, |
| + const HttpRequestHeaders& headers); |
| + |
| + virtual void OnBeforeSendProxyHeadersInternal(URLRequest* request, |
| + const ProxyInfo& proxy_info, |
| + 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); |
| - void NotifyBeforeRedirect(URLRequest* request, |
| - const GURL& new_location); |
| - void NotifyResponseStarted(URLRequest* request); |
| - void NotifyRawBytesRead(const URLRequest& request, int bytes_read); |
| - void NotifyCompleted(URLRequest* request, bool started); |
| - void NotifyURLRequestDestroyed(URLRequest* request); |
| - void NotifyPACScriptError(int line_number, const base::string16& error); |
| - AuthRequiredResponse NotifyAuthRequired(URLRequest* request, |
| - const AuthChallengeInfo& auth_info, |
| - const AuthCallback& callback, |
| - AuthCredentials* credentials); |
| - bool CanGetCookies(const URLRequest& request, |
| - const CookieList& cookie_list); |
| - bool CanSetCookie(const URLRequest& request, |
| - const std::string& cookie_line, |
| - CookieOptions* options); |
| - bool CanAccessFile(const URLRequest& request, |
| - const base::FilePath& path) const; |
| - bool CanThrottleRequest(const URLRequest& request) const; |
| - bool CanEnablePrivacyMode(const GURL& url, |
| - const GURL& first_party_for_cookies) const; |
| - |
| - bool CancelURLRequestWithPolicyViolatingReferrerHeader( |
| + |
| + 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 OnAuthRequiredInternal( |
| + URLRequest* request, |
| + const AuthChallengeInfo& auth_info, |
| + const AuthCallback& callback, |
| + AuthCredentials* credentials); |
| + |
| + virtual void OnCanGetCookiesInternal(const URLRequest& request, |
| + const CookieList& cookie_list) final; |
| + |
| + 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 OnBeforeSocketStreamConnectInternal( |
| + SocketStream* socket, const CompletionCallback& callback); |
| + |
| + virtual void OnCancelURLRequestWithPolicyViolatingReferrerHeaderInternal( |
| const URLRequest& request, |
| const GURL& target_url, |
| const GURL& referrer_url) const; |
| @@ -129,7 +117,7 @@ class NET_EXPORT NetworkDelegate : public base::NonThreadSafe { |
| // The default implementation returns OK (continue with request). |
| virtual int OnBeforeURLRequest(URLRequest* request, |
| const CompletionCallback& callback, |
| - GURL* new_url); |
| + GURL* new_url) final; |
| // Called as the proxy is being resolved for |url|. Allows the delegate to |
| // override the proxy resolution decision made by ProxyService. The delegate |
| @@ -137,14 +125,14 @@ class NET_EXPORT NetworkDelegate : public base::NonThreadSafe { |
| virtual void OnResolveProxy(const GURL& url, |
| int load_flags, |
| const ProxyService& proxy_service, |
| - ProxyInfo* result); |
| + ProxyInfo* result) final; |
| // Called when use of |bad_proxy| fails due to |net_error|. |net_error| is |
| // the network error encountered, if any, and OK if the fallback was |
| // for a reason other than a network error (e.g. the proxy service was |
| // explicitly directed to skip a proxy). |
| virtual void OnProxyFallback(const ProxyServer& bad_proxy, |
| - int net_error); |
| + int net_error) final; |
| // Called right before the HTTP headers are sent. Allows the delegate to |
| // read/write |headers| before they get sent out. |callback| and |headers| are |
| @@ -153,20 +141,20 @@ class NET_EXPORT NetworkDelegate : public base::NonThreadSafe { |
| // See OnBeforeURLRequest for return value description. Returns OK by default. |
| virtual int OnBeforeSendHeaders(URLRequest* request, |
| const CompletionCallback& callback, |
| - HttpRequestHeaders* headers); |
| + HttpRequestHeaders* headers) final; |
| // Called after a proxy connection. Allows the delegate to read/write |
| // |headers| before they get sent out. |headers| is valid only until |
| // OnCompleted or OnURLRequestDestroyed is called for this request. |
| virtual void OnBeforeSendProxyHeaders(URLRequest* request, |
| const ProxyInfo& proxy_info, |
| - HttpRequestHeaders* headers); |
| + HttpRequestHeaders* headers) final; |
| // Called right before the HTTP request(s) are being sent to the network. |
| // |headers| is only valid until OnCompleted or OnURLRequestDestroyed is |
| // called for this request. |
| virtual void OnSendHeaders(URLRequest* request, |
| - const HttpRequestHeaders& headers); |
| + const HttpRequestHeaders& headers) final; |
| // Called for HTTP requests when the headers have been received. |
| // |original_response_headers| contains the headers as received over the |
| @@ -186,33 +174,35 @@ class NET_EXPORT NetworkDelegate : public base::NonThreadSafe { |
| const CompletionCallback& callback, |
| const HttpResponseHeaders* original_response_headers, |
| scoped_refptr<HttpResponseHeaders>* override_response_headers, |
| - GURL* allowed_unsafe_redirect_url); |
| + GURL* allowed_unsafe_redirect_url) final; |
| // Called right after a redirect response code was received. |
| // |new_location| is only valid until OnURLRequestDestroyed is called for this |
| // request. |
| virtual void OnBeforeRedirect(URLRequest* request, |
| - const GURL& new_location); |
| + const GURL& new_location) final; |
| // This corresponds to URLRequestDelegate::OnResponseStarted. |
| - virtual void OnResponseStarted(URLRequest* request); |
| + virtual void OnResponseStarted(URLRequest* request) final; |
| // Called every time we read raw bytes. |
| - virtual void OnRawBytesRead(const URLRequest& request, int bytes_read); |
| + virtual void OnRawBytesRead(const URLRequest& request, int bytes_read) final; |
| // Indicates that the URL request has been completed or failed. |
| // |started| indicates whether the request has been started. If false, |
| // some information like the socket address is not available. |
| - virtual void OnCompleted(URLRequest* request, bool started); |
| + virtual void OnCompleted(URLRequest* request, bool started) final; |
| // Called when an URLRequest is being destroyed. Note that the request is |
| // being deleted, so it's not safe to call any methods that may result in |
| // a virtual method call. |
| - virtual void OnURLRequestDestroyed(URLRequest* request); |
| + virtual void OnURLRequestDestroyed(URLRequest* request) final; |
| // Corresponds to ProxyResolverJSBindings::OnError. |
| virtual void OnPACScriptError(int line_number, |
| - const base::string16& error); |
| + const base::string16& error) final; |
| + virtual void OnPACScriptErrorInternal(int line_number, |
| + const base::string16& error); |
| // Called when a request receives an authentication challenge |
| // specified by |auth_info|, and is unable to respond using cached |
| @@ -235,43 +225,47 @@ class NET_EXPORT NetworkDelegate : public base::NonThreadSafe { |
| URLRequest* request, |
| const AuthChallengeInfo& auth_info, |
| const AuthCallback& callback, |
| - AuthCredentials* credentials); |
| + AuthCredentials* credentials) final; |
| // Called when reading cookies to allow the network delegate to block access |
| // to the cookie. This method will never be invoked when |
| // LOAD_DO_NOT_SEND_COOKIES is specified. |
| virtual bool OnCanGetCookies(const URLRequest& request, |
| - const CookieList& cookie_list); |
| + const CookieList& cookie_list) final; |
| // Called when a cookie is set to allow the network delegate to block access |
| // to the cookie. This method will never be invoked when |
| // LOAD_DO_NOT_SAVE_COOKIES is specified. |
| virtual bool OnCanSetCookie(const URLRequest& request, |
| const std::string& cookie_line, |
| - CookieOptions* options); |
| + CookieOptions* options) final; |
| + |
| + virtual void OnCanSetCookieInternal(const URLRequest& request, |
| + const std::string& cookie_line, |
| + CookieOptions* options); |
| // Called when a file access is attempted to allow the network delegate to |
| // allow or block access to the given file path. Returns true if access is |
| // allowed. |
| virtual bool OnCanAccessFile(const URLRequest& request, |
| - const base::FilePath& path) const; |
| + const base::FilePath& path) const final; |
| // Returns true if the given request may be rejected when the |
| // URLRequestThrottlerManager believes the server servicing the |
| // request is overloaded or down. |
| - virtual bool OnCanThrottleRequest(const URLRequest& request) const; |
| + virtual bool OnCanThrottleRequest(const URLRequest& request) const final; |
| // Returns true if the given |url| has to be requested over connection that |
| // is not tracked by the server. Usually is false, unless user privacy |
| // settings block cookies from being get or set. |
| virtual bool OnCanEnablePrivacyMode( |
| const GURL& url, |
| - const GURL& first_party_for_cookies) const; |
| + const GURL& first_party_for_cookies) const final; |
| // Called before a SocketStream tries to connect. |
| // See OnBeforeURLRequest for return value description. Returns OK by default. |
| virtual int OnBeforeSocketStreamConnect( |
| - SocketStream* socket, const CompletionCallback& callback); |
| + SocketStream* socket, const CompletionCallback& callback) final; |
| // Called when the |referrer_url| for requesting |target_url| during handling |
| // of the |request| is does not comply with the referrer policy (e.g. a |
| @@ -281,9 +275,11 @@ class NET_EXPORT NetworkDelegate : public base::NonThreadSafe { |
| virtual bool OnCancelURLRequestWithPolicyViolatingReferrerHeader( |
| const URLRequest& request, |
| const GURL& target_url, |
| - const GURL& referrer_url) const; |
| + const GURL& referrer_url) const final; |
| + |
| + // WrappingNetworkDelegate takes ownership of this. |
| + scoped_ptr<NetworkDelegate> wrapped_network_delegate_; |
| }; |
| } // namespace net |
| - |
| -#endif // NET_BASE_NETWORK_DELEGATE_H_ |
| +#endif // NET_BASE_WRAPPING_NETWORK_DELEGATE_H_ |