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

Side by Side Diff: chrome/browser/extensions/api/web_request/web_request_api.cc

Issue 154473002: Support redirectUrl at onHeadersReceived in WebRequest / DWR API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 6 years, 10 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/extensions/api/web_request/web_request_api.h" 5 #include "chrome/browser/extensions/api/web_request/web_request_api.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 int num_handlers_blocking; 488 int num_handlers_blocking;
489 489
490 // Pointer to NetLog to report significant changes to the request for 490 // Pointer to NetLog to report significant changes to the request for
491 // debugging. 491 // debugging.
492 const net::BoundNetLog* net_log; 492 const net::BoundNetLog* net_log;
493 493
494 // The callback to call when we get a response from all event handlers. 494 // The callback to call when we get a response from all event handlers.
495 net::CompletionCallback callback; 495 net::CompletionCallback callback;
496 496
497 // If non-empty, this contains the new URL that the request will redirect to. 497 // If non-empty, this contains the new URL that the request will redirect to.
498 // Only valid for OnBeforeRequest. 498 // Only valid for OnBeforeRequest and OnHeadersReceived.
499 GURL* new_url; 499 GURL* new_url;
500 500
501 // The request headers that will be issued along with this request. Only valid 501 // The request headers that will be issued along with this request. Only valid
502 // for OnBeforeSendHeaders. 502 // for OnBeforeSendHeaders.
503 net::HttpRequestHeaders* request_headers; 503 net::HttpRequestHeaders* request_headers;
504 504
505 // The response headers that were received from the server. Only valid for 505 // The response headers that were received from the server. Only valid for
506 // OnHeadersReceived. 506 // OnHeadersReceived.
507 scoped_refptr<const net::HttpResponseHeaders> original_response_headers; 507 scoped_refptr<const net::HttpResponseHeaders> original_response_headers;
508 508
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 args.Append(dict); 820 args.Append(dict);
821 821
822 DispatchEvent(profile, request, listeners, args); 822 DispatchEvent(profile, request, listeners, args);
823 } 823 }
824 824
825 int ExtensionWebRequestEventRouter::OnHeadersReceived( 825 int ExtensionWebRequestEventRouter::OnHeadersReceived(
826 void* profile, 826 void* profile,
827 InfoMap* extension_info_map, 827 InfoMap* extension_info_map,
828 net::URLRequest* request, 828 net::URLRequest* request,
829 const net::CompletionCallback& callback, 829 const net::CompletionCallback& callback,
830 GURL* new_url,
830 const net::HttpResponseHeaders* original_response_headers, 831 const net::HttpResponseHeaders* original_response_headers,
831 scoped_refptr<net::HttpResponseHeaders>* override_response_headers) { 832 scoped_refptr<net::HttpResponseHeaders>* override_response_headers) {
832 // We hide events from the system context as well as sensitive requests. 833 // We hide events from the system context as well as sensitive requests.
833 if (!profile || 834 if (!profile ||
834 WebRequestPermissions::HideRequest(extension_info_map, request)) 835 WebRequestPermissions::HideRequest(extension_info_map, request))
835 return net::OK; 836 return net::OK;
836 837
837 bool initialize_blocked_requests = false; 838 bool initialize_blocked_requests = false;
838 839
839 initialize_blocked_requests |= 840 initialize_blocked_requests |=
(...skipping 27 matching lines...) Expand all
867 868
868 if (!initialize_blocked_requests) 869 if (!initialize_blocked_requests)
869 return net::OK; // Nobody saw a reason for modifying the request. 870 return net::OK; // Nobody saw a reason for modifying the request.
870 871
871 blocked_requests_[request->identifier()].event = kOnHeadersReceived; 872 blocked_requests_[request->identifier()].event = kOnHeadersReceived;
872 blocked_requests_[request->identifier()].is_incognito |= 873 blocked_requests_[request->identifier()].is_incognito |=
873 IsIncognitoProfile(profile); 874 IsIncognitoProfile(profile);
874 blocked_requests_[request->identifier()].request = request; 875 blocked_requests_[request->identifier()].request = request;
875 blocked_requests_[request->identifier()].callback = callback; 876 blocked_requests_[request->identifier()].callback = callback;
876 blocked_requests_[request->identifier()].net_log = &request->net_log(); 877 blocked_requests_[request->identifier()].net_log = &request->net_log();
878 blocked_requests_[request->identifier()].new_url = new_url;
877 blocked_requests_[request->identifier()].override_response_headers = 879 blocked_requests_[request->identifier()].override_response_headers =
878 override_response_headers; 880 override_response_headers;
879 blocked_requests_[request->identifier()].original_response_headers = 881 blocked_requests_[request->identifier()].original_response_headers =
880 original_response_headers; 882 original_response_headers;
881 883
882 if (blocked_requests_[request->identifier()].num_handlers_blocking == 0) { 884 if (blocked_requests_[request->identifier()].num_handlers_blocking == 0) {
883 // If there are no blocking handlers, only the declarative rules tried 885 // If there are no blocking handlers, only the declarative rules tried
884 // to modify the request and we can respond synchronously. 886 // to modify the request and we can respond synchronously.
885 return ExecuteDeltas(profile, request->identifier(), 887 return ExecuteDeltas(profile, request->identifier(),
886 false /* call_callback*/); 888 false /* call_callback*/);
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after
1548 response->extension_id, response->extension_install_time, 1550 response->extension_id, response->extension_install_time,
1549 response->cancel, old_headers, new_headers); 1551 response->cancel, old_headers, new_headers);
1550 } 1552 }
1551 case ExtensionWebRequestEventRouter::kOnHeadersReceived: { 1553 case ExtensionWebRequestEventRouter::kOnHeadersReceived: {
1552 const net::HttpResponseHeaders* old_headers = 1554 const net::HttpResponseHeaders* old_headers =
1553 blocked_request->original_response_headers.get(); 1555 blocked_request->original_response_headers.get();
1554 helpers::ResponseHeaders* new_headers = 1556 helpers::ResponseHeaders* new_headers =
1555 response->response_headers.get(); 1557 response->response_headers.get();
1556 return helpers::CalculateOnHeadersReceivedDelta( 1558 return helpers::CalculateOnHeadersReceivedDelta(
1557 response->extension_id, response->extension_install_time, 1559 response->extension_id, response->extension_install_time,
1558 response->cancel, old_headers, new_headers); 1560 response->cancel, response->new_url, old_headers, new_headers);
1559 } 1561 }
1560 case ExtensionWebRequestEventRouter::kOnAuthRequired: 1562 case ExtensionWebRequestEventRouter::kOnAuthRequired:
1561 return helpers::CalculateOnAuthRequiredDelta( 1563 return helpers::CalculateOnAuthRequiredDelta(
1562 response->extension_id, response->extension_install_time, 1564 response->extension_id, response->extension_install_time,
1563 response->cancel, &response->auth_credentials); 1565 response->cancel, &response->auth_credentials);
1564 default: 1566 default:
1565 NOTREACHED(); 1567 NOTREACHED();
1566 break; 1568 break;
1567 } 1569 }
1568 return NULL; 1570 return NULL;
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
1836 CHECK(!blocked_request.callback.is_null()); 1838 CHECK(!blocked_request.callback.is_null());
1837 helpers::MergeOnBeforeSendHeadersResponses( 1839 helpers::MergeOnBeforeSendHeadersResponses(
1838 blocked_request.response_deltas, 1840 blocked_request.response_deltas,
1839 blocked_request.request_headers, 1841 blocked_request.request_headers,
1840 &warnings, 1842 &warnings,
1841 blocked_request.net_log); 1843 blocked_request.net_log);
1842 } else if (blocked_request.event == kOnHeadersReceived) { 1844 } else if (blocked_request.event == kOnHeadersReceived) {
1843 CHECK(!blocked_request.callback.is_null()); 1845 CHECK(!blocked_request.callback.is_null());
1844 helpers::MergeOnHeadersReceivedResponses( 1846 helpers::MergeOnHeadersReceivedResponses(
1845 blocked_request.response_deltas, 1847 blocked_request.response_deltas,
1848 blocked_request.new_url,
1846 blocked_request.original_response_headers.get(), 1849 blocked_request.original_response_headers.get(),
1847 blocked_request.override_response_headers, 1850 blocked_request.override_response_headers,
1848 &warnings, 1851 &warnings,
1849 blocked_request.net_log); 1852 blocked_request.net_log);
1850 } else if (blocked_request.event == kOnAuthRequired) { 1853 } else if (blocked_request.event == kOnAuthRequired) {
1851 CHECK(blocked_request.callback.is_null()); 1854 CHECK(blocked_request.callback.is_null());
1852 CHECK(!blocked_request.auth_callback.is_null()); 1855 CHECK(!blocked_request.auth_callback.is_null());
1853 credentials_set = helpers::MergeOnAuthRequiredResponses( 1856 credentials_set = helpers::MergeOnAuthRequiredResponses(
1854 blocked_request.response_deltas, 1857 blocked_request.response_deltas,
1855 blocked_request.auth_credentials, 1858 blocked_request.auth_credentials,
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
2380 } else if ((*it)->name().find("AdBlock") != std::string::npos) { 2383 } else if ((*it)->name().find("AdBlock") != std::string::npos) {
2381 adblock = true; 2384 adblock = true;
2382 } else { 2385 } else {
2383 other = true; 2386 other = true;
2384 } 2387 }
2385 } 2388 }
2386 } 2389 }
2387 2390
2388 host->Send(new ExtensionMsg_UsingWebRequestAPI(adblock, adblock_plus, other)); 2391 host->Send(new ExtensionMsg_UsingWebRequestAPI(adblock, adblock_plus, other));
2389 } 2392 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698