[email protected] | 9045b882 | 2012-01-13 20:35:35 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "net/base/network_delegate.h" |
| 6 | |
| 7 | #include "base/logging.h" |
vadimt | 844c1557 | 2014-11-04 22:55:57 | [diff] [blame] | 8 | #include "base/profiler/scoped_tracker.h" |
ssid | 6d6b4010 | 2016-04-05 18:59:56 | [diff] [blame] | 9 | #include "base/trace_event/trace_event.h" |
[email protected] | 9c8ae8c | 2012-03-09 13:13:35 | [diff] [blame] | 10 | #include "net/base/load_flags.h" |
[email protected] | c6c6e565 | 2013-10-29 02:40:30 | [diff] [blame] | 11 | #include "net/base/net_errors.h" |
[email protected] | 597a1ab | 2014-06-26 08:12:27 | [diff] [blame] | 12 | #include "net/proxy/proxy_info.h" |
[email protected] | 9c8ae8c | 2012-03-09 13:13:35 | [diff] [blame] | 13 | #include "net/url_request/url_request.h" |
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 14 | |
| 15 | namespace net { |
| 16 | |
[email protected] | 084262c | 2011-12-01 21:12:47 | [diff] [blame] | 17 | int NetworkDelegate::NotifyBeforeURLRequest( |
| 18 | URLRequest* request, const CompletionCallback& callback, |
| 19 | GURL* new_url) { |
ssid | 6d6b4010 | 2016-04-05 18:59:56 | [diff] [blame] | 20 | TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), |
| 21 | "NetworkDelegate::NotifyBeforeURLRequest"); |
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 22 | DCHECK(CalledOnValidThread()); |
| 23 | DCHECK(request); |
[email protected] | 084262c | 2011-12-01 21:12:47 | [diff] [blame] | 24 | DCHECK(!callback.is_null()); |
pkasting | 941842c | 2015-04-11 01:51:30 | [diff] [blame] | 25 | // TODO(cbentzel): Remove ScopedTracker below once crbug.com/475753 is fixed. |
vadimt | 844c1557 | 2014-11-04 22:55:57 | [diff] [blame] | 26 | tracked_objects::ScopedTracker tracking_profile( |
| 27 | FROM_HERE_WITH_EXPLICIT_FUNCTION( |
pkasting | 941842c | 2015-04-11 01:51:30 | [diff] [blame] | 28 | "475753 NetworkDelegate::OnBeforeURLRequest")); |
[email protected] | 4c76d7c | 2011-04-15 19:14:12 | [diff] [blame] | 29 | return OnBeforeURLRequest(request, callback, new_url); |
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 30 | } |
| 31 | |
ryansturm | 2343cb6 | 2016-06-15 01:09:00 | [diff] [blame] | 32 | int NetworkDelegate::NotifyBeforeStartTransaction( |
| 33 | URLRequest* request, |
| 34 | const CompletionCallback& callback, |
[email protected] | 084262c | 2011-12-01 21:12:47 | [diff] [blame] | 35 | HttpRequestHeaders* headers) { |
ssid | 6d6b4010 | 2016-04-05 18:59:56 | [diff] [blame] | 36 | TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), |
ryansturm | 2343cb6 | 2016-06-15 01:09:00 | [diff] [blame] | 37 | "NetworkDelegate::NotifyBeforeStartTransation"); |
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 38 | DCHECK(CalledOnValidThread()); |
| 39 | DCHECK(headers); |
[email protected] | 084262c | 2011-12-01 21:12:47 | [diff] [blame] | 40 | DCHECK(!callback.is_null()); |
ryansturm | 2343cb6 | 2016-06-15 01:09:00 | [diff] [blame] | 41 | return OnBeforeStartTransaction(request, callback, headers); |
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 42 | } |
| 43 | |
ryansturm | 49a8cb1 | 2016-06-15 16:51:09 | [diff] [blame] | 44 | void NetworkDelegate::NotifyBeforeSendHeaders( |
[email protected] | 597a1ab | 2014-06-26 08:12:27 | [diff] [blame] | 45 | URLRequest* request, |
| 46 | const ProxyInfo& proxy_info, |
ryansturm | 49a8cb1 | 2016-06-15 16:51:09 | [diff] [blame] | 47 | const ProxyRetryInfoMap& proxy_retry_info, |
[email protected] | 597a1ab | 2014-06-26 08:12:27 | [diff] [blame] | 48 | HttpRequestHeaders* headers) { |
| 49 | DCHECK(CalledOnValidThread()); |
| 50 | DCHECK(headers); |
ryansturm | 49a8cb1 | 2016-06-15 16:51:09 | [diff] [blame] | 51 | OnBeforeSendHeaders(request, proxy_info, proxy_retry_info, headers); |
[email protected] | 597a1ab | 2014-06-26 08:12:27 | [diff] [blame] | 52 | } |
| 53 | |
ryansturm | 2343cb6 | 2016-06-15 01:09:00 | [diff] [blame] | 54 | void NetworkDelegate::NotifyStartTransaction( |
| 55 | URLRequest* request, |
| 56 | const HttpRequestHeaders& headers) { |
ssid | 6d6b4010 | 2016-04-05 18:59:56 | [diff] [blame] | 57 | TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), |
ryansturm | 2343cb6 | 2016-06-15 01:09:00 | [diff] [blame] | 58 | "NetworkDelegate::NotifyStartTransaction"); |
[email protected] | 82b4230 | 2011-04-20 16:28:16 | [diff] [blame] | 59 | DCHECK(CalledOnValidThread()); |
ryansturm | 2343cb6 | 2016-06-15 01:09:00 | [diff] [blame] | 60 | OnStartTransaction(request, headers); |
[email protected] | 82b4230 | 2011-04-20 16:28:16 | [diff] [blame] | 61 | } |
| 62 | |
[email protected] | ea8141e | 2011-10-05 13:12:51 | [diff] [blame] | 63 | int NetworkDelegate::NotifyHeadersReceived( |
| 64 | URLRequest* request, |
[email protected] | 084262c | 2011-12-01 21:12:47 | [diff] [blame] | 65 | const CompletionCallback& callback, |
[email protected] | 507af8f | 2012-10-20 00:42:32 | [diff] [blame] | 66 | const HttpResponseHeaders* original_response_headers, |
[email protected] | 5f71413 | 2014-03-26 10:41:16 | [diff] [blame] | 67 | scoped_refptr<HttpResponseHeaders>* override_response_headers, |
| 68 | GURL* allowed_unsafe_redirect_url) { |
ssid | 6d6b4010 | 2016-04-05 18:59:56 | [diff] [blame] | 69 | TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), |
| 70 | "NetworkDelegate::NotifyHeadersReceived"); |
[email protected] | ea8141e | 2011-10-05 13:12:51 | [diff] [blame] | 71 | DCHECK(CalledOnValidThread()); |
| 72 | DCHECK(original_response_headers); |
[email protected] | 084262c | 2011-12-01 21:12:47 | [diff] [blame] | 73 | DCHECK(!callback.is_null()); |
[email protected] | 5f71413 | 2014-03-26 10:41:16 | [diff] [blame] | 74 | return OnHeadersReceived(request, |
| 75 | callback, |
| 76 | original_response_headers, |
| 77 | override_response_headers, |
| 78 | allowed_unsafe_redirect_url); |
[email protected] | ea8141e | 2011-10-05 13:12:51 | [diff] [blame] | 79 | } |
| 80 | |
maksim.sisov | 0f4aa14 | 2016-09-05 05:55:28 | [diff] [blame] | 81 | void NetworkDelegate::NotifyResponseStarted(URLRequest* request, |
| 82 | int net_error) { |
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 83 | DCHECK(CalledOnValidThread()); |
| 84 | DCHECK(request); |
maksim.sisov | 0f4aa14 | 2016-09-05 05:55:28 | [diff] [blame] | 85 | |
| 86 | OnResponseStarted(request, net_error); |
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 87 | } |
| 88 | |
sclittle | a133de0 | 2015-11-10 23:54:21 | [diff] [blame] | 89 | void NetworkDelegate::NotifyNetworkBytesReceived(URLRequest* request, |
sclittle | ce72c48 | 2015-08-24 20:20:59 | [diff] [blame] | 90 | int64_t bytes_received) { |
ssid | 6d6b4010 | 2016-04-05 18:59:56 | [diff] [blame] | 91 | TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), |
| 92 | "NetworkDelegate::NotifyNetworkBytesReceived"); |
[email protected] | 8523ba5 | 2011-05-22 19:00:58 | [diff] [blame] | 93 | DCHECK(CalledOnValidThread()); |
sclittle | ce72c48 | 2015-08-24 20:20:59 | [diff] [blame] | 94 | DCHECK_GT(bytes_received, 0); |
| 95 | OnNetworkBytesReceived(request, bytes_received); |
[email protected] | 8523ba5 | 2011-05-22 19:00:58 | [diff] [blame] | 96 | } |
| 97 | |
sclittle | a133de0 | 2015-11-10 23:54:21 | [diff] [blame] | 98 | void NetworkDelegate::NotifyNetworkBytesSent(URLRequest* request, |
sclittle | 28d558b | 2015-09-28 21:40:52 | [diff] [blame] | 99 | int64_t bytes_sent) { |
| 100 | DCHECK(CalledOnValidThread()); |
| 101 | DCHECK_GT(bytes_sent, 0); |
| 102 | OnNetworkBytesSent(request, bytes_sent); |
| 103 | } |
| 104 | |
[email protected] | 31b2e5f | 2011-04-20 16:58:32 | [diff] [blame] | 105 | void NetworkDelegate::NotifyBeforeRedirect(URLRequest* request, |
| 106 | const GURL& new_location) { |
| 107 | DCHECK(CalledOnValidThread()); |
| 108 | DCHECK(request); |
| 109 | OnBeforeRedirect(request, new_location); |
| 110 | } |
| 111 | |
maksim.sisov | 0f4aa14 | 2016-09-05 05:55:28 | [diff] [blame] | 112 | void NetworkDelegate::NotifyCompleted(URLRequest* request, |
| 113 | bool started, |
| 114 | int net_error) { |
ssid | 6d6b4010 | 2016-04-05 18:59:56 | [diff] [blame] | 115 | TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), |
| 116 | "NetworkDelegate::NotifyCompleted"); |
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 117 | DCHECK(CalledOnValidThread()); |
| 118 | DCHECK(request); |
pkasting | 941842c | 2015-04-11 01:51:30 | [diff] [blame] | 119 | // TODO(cbentzel): Remove ScopedTracker below once crbug.com/475753 is fixed. |
vadimt | 844c1557 | 2014-11-04 22:55:57 | [diff] [blame] | 120 | tracked_objects::ScopedTracker tracking_profile( |
pkasting | 941842c | 2015-04-11 01:51:30 | [diff] [blame] | 121 | FROM_HERE_WITH_EXPLICIT_FUNCTION("475753 NetworkDelegate::OnCompleted")); |
maksim.sisov | 0f4aa14 | 2016-09-05 05:55:28 | [diff] [blame] | 122 | |
| 123 | OnCompleted(request, started, net_error); |
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 124 | } |
| 125 | |
[email protected] | 4875ba1 | 2011-03-30 22:31:51 | [diff] [blame] | 126 | void NetworkDelegate::NotifyURLRequestDestroyed(URLRequest* request) { |
ssid | 6d6b4010 | 2016-04-05 18:59:56 | [diff] [blame] | 127 | TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), |
| 128 | "NetworkDelegate::NotifyURLRequestDestroyed"); |
[email protected] | 5aa2013 | 2011-04-27 23:11:34 | [diff] [blame] | 129 | DCHECK(CalledOnValidThread()); |
[email protected] | 4875ba1 | 2011-03-30 22:31:51 | [diff] [blame] | 130 | DCHECK(request); |
[email protected] | 5aa2013 | 2011-04-27 23:11:34 | [diff] [blame] | 131 | OnURLRequestDestroyed(request); |
| 132 | } |
| 133 | |
[email protected] | 82a3767 | 2011-05-03 12:02:41 | [diff] [blame] | 134 | void NetworkDelegate::NotifyPACScriptError(int line_number, |
[email protected] | 42cba2fb | 2013-03-29 19:58:57 | [diff] [blame] | 135 | const base::string16& error) { |
[email protected] | 82a3767 | 2011-05-03 12:02:41 | [diff] [blame] | 136 | DCHECK(CalledOnValidThread()); |
| 137 | OnPACScriptError(line_number, error); |
| 138 | } |
| 139 | |
[email protected] | c2911d7 | 2011-10-03 22:16:36 | [diff] [blame] | 140 | NetworkDelegate::AuthRequiredResponse NetworkDelegate::NotifyAuthRequired( |
| 141 | URLRequest* request, |
| 142 | const AuthChallengeInfo& auth_info, |
| 143 | const AuthCallback& callback, |
| 144 | AuthCredentials* credentials) { |
[email protected] | 7efc582d | 2011-08-03 20:46:35 | [diff] [blame] | 145 | DCHECK(CalledOnValidThread()); |
[email protected] | c2911d7 | 2011-10-03 22:16:36 | [diff] [blame] | 146 | return OnAuthRequired(request, auth_info, callback, credentials); |
[email protected] | 7efc582d | 2011-08-03 20:46:35 | [diff] [blame] | 147 | } |
| 148 | |
[email protected] | 4c219e2 | 2012-05-05 19:41:04 | [diff] [blame] | 149 | bool NetworkDelegate::CanGetCookies(const URLRequest& request, |
| 150 | const CookieList& cookie_list) { |
[email protected] | 9c8ae8c | 2012-03-09 13:13:35 | [diff] [blame] | 151 | DCHECK(CalledOnValidThread()); |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 152 | DCHECK(!(request.load_flags() & LOAD_DO_NOT_SEND_COOKIES)); |
[email protected] | 4c219e2 | 2012-05-05 19:41:04 | [diff] [blame] | 153 | return OnCanGetCookies(request, cookie_list); |
[email protected] | 9c8ae8c | 2012-03-09 13:13:35 | [diff] [blame] | 154 | } |
| 155 | |
[email protected] | f33e687 | 2013-05-07 07:00:37 | [diff] [blame] | 156 | bool NetworkDelegate::CanSetCookie(const URLRequest& request, |
| 157 | const std::string& cookie_line, |
| 158 | CookieOptions* options) { |
[email protected] | 9c8ae8c | 2012-03-09 13:13:35 | [diff] [blame] | 159 | DCHECK(CalledOnValidThread()); |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 160 | DCHECK(!(request.load_flags() & LOAD_DO_NOT_SAVE_COOKIES)); |
[email protected] | 4c219e2 | 2012-05-05 19:41:04 | [diff] [blame] | 161 | return OnCanSetCookie(request, cookie_line, options); |
| 162 | } |
| 163 | |
| 164 | bool NetworkDelegate::CanAccessFile(const URLRequest& request, |
[email protected] | a3ef483 | 2013-02-02 05:12:33 | [diff] [blame] | 165 | const base::FilePath& path) const { |
[email protected] | 4c219e2 | 2012-05-05 19:41:04 | [diff] [blame] | 166 | DCHECK(CalledOnValidThread()); |
| 167 | return OnCanAccessFile(request, path); |
[email protected] | 9c8ae8c | 2012-03-09 13:13:35 | [diff] [blame] | 168 | } |
| 169 | |
[email protected] | e6d01765 | 2013-05-17 18:01:40 | [diff] [blame] | 170 | bool NetworkDelegate::CanEnablePrivacyMode( |
| 171 | const GURL& url, |
| 172 | const GURL& first_party_for_cookies) const { |
ssid | 6d6b4010 | 2016-04-05 18:59:56 | [diff] [blame] | 173 | TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), |
| 174 | "NetworkDelegate::CanEnablePrivacyMode"); |
[email protected] | e6d01765 | 2013-05-17 18:01:40 | [diff] [blame] | 175 | DCHECK(CalledOnValidThread()); |
| 176 | return OnCanEnablePrivacyMode(url, first_party_for_cookies); |
| 177 | } |
| 178 | |
estark | 7625d81 | 2015-10-12 20:10:41 | [diff] [blame] | 179 | bool NetworkDelegate::AreExperimentalCookieFeaturesEnabled() const { |
| 180 | return OnAreExperimentalCookieFeaturesEnabled(); |
mkwst | 0513c9d | 2015-04-01 05:53:15 | [diff] [blame] | 181 | } |
| 182 | |
jww | 79aceda | 2015-12-07 01:56:34 | [diff] [blame] | 183 | bool NetworkDelegate::AreStrictSecureCookiesEnabled() const { |
| 184 | return OnAreStrictSecureCookiesEnabled(); |
| 185 | } |
| 186 | |
jochen | 0e3b3a6 | 2014-09-16 18:31:23 | [diff] [blame] | 187 | bool NetworkDelegate::CancelURLRequestWithPolicyViolatingReferrerHeader( |
| 188 | const URLRequest& request, |
| 189 | const GURL& target_url, |
| 190 | const GURL& referrer_url) const { |
| 191 | DCHECK(CalledOnValidThread()); |
| 192 | return OnCancelURLRequestWithPolicyViolatingReferrerHeader( |
| 193 | request, target_url, referrer_url); |
| 194 | } |
| 195 | |
maksim.sisov | 0f4aa14 | 2016-09-05 05:55:28 | [diff] [blame] | 196 | void NetworkDelegate::OnResponseStarted(URLRequest* request, int net_error) { |
| 197 | OnResponseStarted(request); |
| 198 | } |
| 199 | |
| 200 | // Deprecated |
| 201 | void NetworkDelegate::OnResponseStarted(URLRequest* request) { |
| 202 | NOTREACHED(); |
| 203 | } |
| 204 | |
| 205 | void NetworkDelegate::OnCompleted(URLRequest* request, |
| 206 | bool started, |
| 207 | int net_error) { |
| 208 | OnCompleted(request, started); |
| 209 | } |
| 210 | |
| 211 | // Deprecated. |
| 212 | void NetworkDelegate::OnCompleted(URLRequest* request, bool started) { |
| 213 | NOTREACHED(); |
| 214 | } |
| 215 | |
[email protected] | 0651b81 | 2011-02-24 00:22:50 | [diff] [blame] | 216 | } // namespace net |