Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(478)

Side by Side Diff: chrome/browser/net/chrome_extensions_network_delegate.cc

Issue 2335133003: PlzNavigate: support the WebRequest API (Closed)
Patch Set: Addressed comments + removed test filter changes Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/net/chrome_extensions_network_delegate.h" 5 #include "chrome/browser/net/chrome_extensions_network_delegate.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
11 11
12 #if defined(ENABLE_EXTENSIONS) 12 #if defined(ENABLE_EXTENSIONS)
13 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/browser_process.h"
14 #include "chrome/browser/extensions/api/proxy/proxy_api.h" 14 #include "chrome/browser/extensions/api/proxy/proxy_api.h"
15 #include "chrome/browser/extensions/event_router_forwarder.h" 15 #include "chrome/browser/extensions/event_router_forwarder.h"
16 #include "chrome/browser/profiles/profile_manager.h" 16 #include "chrome/browser/profiles/profile_manager.h"
17 #include "chrome/browser/renderer_host/chrome_navigation_ui_data.h"
17 #include "content/public/browser/browser_thread.h" 18 #include "content/public/browser/browser_thread.h"
18 #include "content/public/browser/render_frame_host.h" 19 #include "content/public/browser/render_frame_host.h"
19 #include "content/public/browser/resource_request_info.h" 20 #include "content/public/browser/resource_request_info.h"
20 #include "extensions/browser/api/web_request/web_request_api.h" 21 #include "extensions/browser/api/web_request/web_request_api.h"
22 #include "extensions/browser/extension_navigation_ui_data.h"
21 #include "extensions/browser/info_map.h" 23 #include "extensions/browser/info_map.h"
22 #include "extensions/browser/process_manager.h" 24 #include "extensions/browser/process_manager.h"
23 #include "extensions/common/constants.h" 25 #include "extensions/common/constants.h"
24 #include "net/url_request/url_request.h" 26 #include "net/url_request/url_request.h"
25 27
26 using content::BrowserThread; 28 using content::BrowserThread;
27 using content::ResourceRequestInfo; 29 using content::ResourceRequestInfo;
28 using extensions::ExtensionWebRequestEventRouter; 30 using extensions::ExtensionWebRequestEventRouter;
29 31
30 namespace { 32 namespace {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 77
76 int process_id, render_frame_id; 78 int process_id, render_frame_id;
77 if (info->GetAssociatedRenderFrame(&process_id, &render_frame_id)) { 79 if (info->GetAssociatedRenderFrame(&process_id, &render_frame_id)) {
78 BrowserThread::PostTask( 80 BrowserThread::PostTask(
79 BrowserThread::UI, FROM_HERE, 81 BrowserThread::UI, FROM_HERE,
80 base::Bind(&NotifyEPMRequestStatus, status, profile_id, 82 base::Bind(&NotifyEPMRequestStatus, status, profile_id,
81 request->identifier(), process_id, render_frame_id)); 83 request->identifier(), process_id, render_frame_id));
82 } 84 }
83 } 85 }
84 86
87 extensions::ExtensionNavigationUIData* GetExtensionNavigationUIData(
88 net::URLRequest* request) {
89 const content::ResourceRequestInfo* info =
90 content::ResourceRequestInfo::ForRequest(request);
91 if (!info)
92 return nullptr;
93 ChromeNavigationUIData* navigation_data =
94 static_cast<ChromeNavigationUIData*>(info->GetNavigationUIData());
95 if (!navigation_data)
96 return nullptr;
97 return navigation_data->GetExtensionNavigationUIData();
98 }
99
85 class ChromeExtensionsNetworkDelegateImpl 100 class ChromeExtensionsNetworkDelegateImpl
86 : public ChromeExtensionsNetworkDelegate { 101 : public ChromeExtensionsNetworkDelegate {
87 public: 102 public:
88 explicit ChromeExtensionsNetworkDelegateImpl( 103 explicit ChromeExtensionsNetworkDelegateImpl(
89 extensions::EventRouterForwarder* event_router); 104 extensions::EventRouterForwarder* event_router);
90 ~ChromeExtensionsNetworkDelegateImpl() override; 105 ~ChromeExtensionsNetworkDelegateImpl() override;
91 106
92 private: 107 private:
93 // ChromeExtensionsNetworkDelegate implementation. 108 // ChromeExtensionsNetworkDelegate implementation.
94 void ForwardProxyErrors(net::URLRequest* request) override; 109 void ForwardProxyErrors(net::URLRequest* request) override;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 bool is_nested_url = url.SchemeIsFileSystem() || url.SchemeIsBlob(); 184 bool is_nested_url = url.SchemeIsFileSystem() || url.SchemeIsBlob();
170 bool is_navigation = 185 bool is_navigation =
171 info && content::IsResourceTypeFrame(info->GetResourceType()); 186 info && content::IsResourceTypeFrame(info->GetResourceType());
172 if (is_nested_url && is_navigation && info->IsMainFrame() && 187 if (is_nested_url && is_navigation && info->IsMainFrame() &&
173 url::Origin(url).scheme() == extensions::kExtensionScheme && 188 url::Origin(url).scheme() == extensions::kExtensionScheme &&
174 !extension_info_map_->process_map().Contains(info->GetChildID())) { 189 !extension_info_map_->process_map().Contains(info->GetChildID())) {
175 return net::ERR_ABORTED; 190 return net::ERR_ABORTED;
176 } 191 }
177 192
178 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest( 193 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest(
179 profile_, extension_info_map_.get(), request, callback, new_url); 194 profile_, extension_info_map_.get(),
195 GetExtensionNavigationUIData(request), request, callback, new_url);
180 } 196 }
181 197
182 int ChromeExtensionsNetworkDelegateImpl::OnBeforeStartTransaction( 198 int ChromeExtensionsNetworkDelegateImpl::OnBeforeStartTransaction(
183 net::URLRequest* request, 199 net::URLRequest* request,
184 const net::CompletionCallback& callback, 200 const net::CompletionCallback& callback,
185 net::HttpRequestHeaders* headers) { 201 net::HttpRequestHeaders* headers) {
186 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeSendHeaders( 202 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeSendHeaders(
187 profile_, extension_info_map_.get(), request, callback, headers); 203 profile_, extension_info_map_.get(),
204 GetExtensionNavigationUIData(request), request, callback, headers);
188 } 205 }
189 206
190 void ChromeExtensionsNetworkDelegateImpl::OnStartTransaction( 207 void ChromeExtensionsNetworkDelegateImpl::OnStartTransaction(
191 net::URLRequest* request, 208 net::URLRequest* request,
192 const net::HttpRequestHeaders& headers) { 209 const net::HttpRequestHeaders& headers) {
193 ExtensionWebRequestEventRouter::GetInstance()->OnSendHeaders( 210 ExtensionWebRequestEventRouter::GetInstance()->OnSendHeaders(
194 profile_, extension_info_map_.get(), request, headers); 211 profile_, extension_info_map_.get(),
212 GetExtensionNavigationUIData(request), request, headers);
195 } 213 }
196 214
197 int ChromeExtensionsNetworkDelegateImpl::OnHeadersReceived( 215 int ChromeExtensionsNetworkDelegateImpl::OnHeadersReceived(
198 net::URLRequest* request, 216 net::URLRequest* request,
199 const net::CompletionCallback& callback, 217 const net::CompletionCallback& callback,
200 const net::HttpResponseHeaders* original_response_headers, 218 const net::HttpResponseHeaders* original_response_headers,
201 scoped_refptr<net::HttpResponseHeaders>* override_response_headers, 219 scoped_refptr<net::HttpResponseHeaders>* override_response_headers,
202 GURL* allowed_unsafe_redirect_url) { 220 GURL* allowed_unsafe_redirect_url) {
203 return ExtensionWebRequestEventRouter::GetInstance()->OnHeadersReceived( 221 return ExtensionWebRequestEventRouter::GetInstance()->OnHeadersReceived(
204 profile_, 222 profile_, extension_info_map_.get(),
205 extension_info_map_.get(), 223 GetExtensionNavigationUIData(request), request, callback,
206 request, 224 original_response_headers, override_response_headers,
207 callback,
208 original_response_headers,
209 override_response_headers,
210 allowed_unsafe_redirect_url); 225 allowed_unsafe_redirect_url);
211 } 226 }
212 227
213 void ChromeExtensionsNetworkDelegateImpl::OnBeforeRedirect( 228 void ChromeExtensionsNetworkDelegateImpl::OnBeforeRedirect(
214 net::URLRequest* request, 229 net::URLRequest* request,
215 const GURL& new_location) { 230 const GURL& new_location) {
216 ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRedirect( 231 ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRedirect(
217 profile_, extension_info_map_.get(), request, new_location); 232 profile_, extension_info_map_.get(),
233 GetExtensionNavigationUIData(request), request, new_location);
218 } 234 }
219 235
220 236
221 void ChromeExtensionsNetworkDelegateImpl::OnResponseStarted( 237 void ChromeExtensionsNetworkDelegateImpl::OnResponseStarted(
222 net::URLRequest* request) { 238 net::URLRequest* request) {
223 ExtensionWebRequestEventRouter::GetInstance()->OnResponseStarted( 239 ExtensionWebRequestEventRouter::GetInstance()->OnResponseStarted(
224 profile_, extension_info_map_.get(), request); 240 profile_, extension_info_map_.get(),
241 GetExtensionNavigationUIData(request), request);
225 ForwardProxyErrors(request); 242 ForwardProxyErrors(request);
226 } 243 }
227 244
228 void ChromeExtensionsNetworkDelegateImpl::OnCompleted( 245 void ChromeExtensionsNetworkDelegateImpl::OnCompleted(
229 net::URLRequest* request, 246 net::URLRequest* request,
230 bool started) { 247 bool started) {
231 if (request->status().status() == net::URLRequestStatus::SUCCESS) { 248 if (request->status().status() == net::URLRequestStatus::SUCCESS) {
232 bool is_redirect = request->response_headers() && 249 bool is_redirect = request->response_headers() &&
233 net::HttpResponseHeaders::IsRedirectResponseCode( 250 net::HttpResponseHeaders::IsRedirectResponseCode(
234 request->response_headers()->response_code()); 251 request->response_headers()->response_code());
235 if (!is_redirect) { 252 if (!is_redirect) {
236 ExtensionWebRequestEventRouter::GetInstance()->OnCompleted( 253 ExtensionWebRequestEventRouter::GetInstance()->OnCompleted(
237 profile_, extension_info_map_.get(), request); 254 profile_, extension_info_map_.get(),
255 GetExtensionNavigationUIData(request), request);
238 } 256 }
239 return; 257 return;
240 } 258 }
241 259
242 if (request->status().status() == net::URLRequestStatus::FAILED || 260 if (request->status().status() == net::URLRequestStatus::FAILED ||
243 request->status().status() == net::URLRequestStatus::CANCELED) { 261 request->status().status() == net::URLRequestStatus::CANCELED) {
244 ExtensionWebRequestEventRouter::GetInstance()->OnErrorOccurred( 262 ExtensionWebRequestEventRouter::GetInstance()->OnErrorOccurred(
245 profile_, extension_info_map_.get(), request, started); 263 profile_, extension_info_map_.get(),
264 GetExtensionNavigationUIData(request), request, started);
246 return; 265 return;
247 } 266 }
248 267
249 NOTREACHED(); 268 NOTREACHED();
250 } 269 }
251 270
252 void ChromeExtensionsNetworkDelegateImpl::OnURLRequestDestroyed( 271 void ChromeExtensionsNetworkDelegateImpl::OnURLRequestDestroyed(
253 net::URLRequest* request) { 272 net::URLRequest* request) {
254 ExtensionWebRequestEventRouter::GetInstance()->OnURLRequestDestroyed( 273 ExtensionWebRequestEventRouter::GetInstance()->OnURLRequestDestroyed(
255 profile_, request); 274 profile_, request);
256 } 275 }
257 276
258 void ChromeExtensionsNetworkDelegateImpl::OnPACScriptError( 277 void ChromeExtensionsNetworkDelegateImpl::OnPACScriptError(
259 int line_number, 278 int line_number,
260 const base::string16& error) { 279 const base::string16& error) {
261 extensions::ProxyEventRouter::GetInstance()->OnPACScriptError( 280 extensions::ProxyEventRouter::GetInstance()->OnPACScriptError(
262 event_router_.get(), profile_, line_number, error); 281 event_router_.get(), profile_, line_number, error);
263 } 282 }
264 283
265 net::NetworkDelegate::AuthRequiredResponse 284 net::NetworkDelegate::AuthRequiredResponse
266 ChromeExtensionsNetworkDelegateImpl::OnAuthRequired( 285 ChromeExtensionsNetworkDelegateImpl::OnAuthRequired(
267 net::URLRequest* request, 286 net::URLRequest* request,
268 const net::AuthChallengeInfo& auth_info, 287 const net::AuthChallengeInfo& auth_info,
269 const AuthCallback& callback, 288 const AuthCallback& callback,
270 net::AuthCredentials* credentials) { 289 net::AuthCredentials* credentials) {
271 return ExtensionWebRequestEventRouter::GetInstance()->OnAuthRequired( 290 return ExtensionWebRequestEventRouter::GetInstance()->OnAuthRequired(
272 profile_, extension_info_map_.get(), request, auth_info, callback, 291 profile_, extension_info_map_.get(),
292 GetExtensionNavigationUIData(request), request, auth_info, callback,
273 credentials); 293 credentials);
274 } 294 }
275 295
276 } // namespace 296 } // namespace
277 297
278 #endif // defined(ENABLE_EXTENSIONS) 298 #endif // defined(ENABLE_EXTENSIONS)
279 299
280 // static 300 // static
281 ChromeExtensionsNetworkDelegate* ChromeExtensionsNetworkDelegate::Create( 301 ChromeExtensionsNetworkDelegate* ChromeExtensionsNetworkDelegate::Create(
282 extensions::EventRouterForwarder* event_router) { 302 extensions::EventRouterForwarder* event_router) {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 } 384 }
365 385
366 net::NetworkDelegate::AuthRequiredResponse 386 net::NetworkDelegate::AuthRequiredResponse
367 ChromeExtensionsNetworkDelegate::OnAuthRequired( 387 ChromeExtensionsNetworkDelegate::OnAuthRequired(
368 net::URLRequest* request, 388 net::URLRequest* request,
369 const net::AuthChallengeInfo& auth_info, 389 const net::AuthChallengeInfo& auth_info,
370 const AuthCallback& callback, 390 const AuthCallback& callback,
371 net::AuthCredentials* credentials) { 391 net::AuthCredentials* credentials) {
372 return net::NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION; 392 return net::NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION;
373 } 393 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698