| Index: chrome/browser/extensions/api/web_request/web_request_api.cc
|
| diff --git a/chrome/browser/extensions/api/web_request/web_request_api.cc b/chrome/browser/extensions/api/web_request/web_request_api.cc
|
| index dc884f859e9dbd95dda5686454b5464143f37444..e1095698c6533201d7933cd7d3ff3088689ea94a 100644
|
| --- a/chrome/browser/extensions/api/web_request/web_request_api.cc
|
| +++ b/chrome/browser/extensions/api/web_request/web_request_api.cc
|
| @@ -498,7 +498,7 @@ struct ExtensionWebRequestEventRouter::BlockedRequest {
|
| net::CompletionCallback callback;
|
|
|
| // If non-empty, this contains the new URL that the request will redirect to.
|
| - // Only valid for OnBeforeRequest.
|
| + // Only valid for OnBeforeRequest and OnHeadersReceived.
|
| GURL* new_url;
|
|
|
| // The request headers that will be issued along with this request. Only valid
|
| @@ -831,7 +831,8 @@ int ExtensionWebRequestEventRouter::OnHeadersReceived(
|
| net::URLRequest* request,
|
| const net::CompletionCallback& callback,
|
| const net::HttpResponseHeaders* original_response_headers,
|
| - scoped_refptr<net::HttpResponseHeaders>* override_response_headers) {
|
| + scoped_refptr<net::HttpResponseHeaders>* override_response_headers,
|
| + GURL* allowed_unsafe_redirect_url) {
|
| // We hide events from the system context as well as sensitive requests.
|
| if (!profile ||
|
| WebRequestPermissions::HideRequest(extension_info_map, request))
|
| @@ -881,6 +882,8 @@ int ExtensionWebRequestEventRouter::OnHeadersReceived(
|
| override_response_headers;
|
| blocked_requests_[request->identifier()].original_response_headers =
|
| original_response_headers;
|
| + blocked_requests_[request->identifier()].new_url =
|
| + allowed_unsafe_redirect_url;
|
|
|
| if (blocked_requests_[request->identifier()].num_handlers_blocking == 0) {
|
| // If there are no blocking handlers, only the declarative rules tried
|
| @@ -1557,8 +1560,12 @@ helpers::EventResponseDelta* CalculateDelta(
|
| helpers::ResponseHeaders* new_headers =
|
| response->response_headers.get();
|
| return helpers::CalculateOnHeadersReceivedDelta(
|
| - response->extension_id, response->extension_install_time,
|
| - response->cancel, old_headers, new_headers);
|
| + response->extension_id,
|
| + response->extension_install_time,
|
| + response->cancel,
|
| + response->new_url,
|
| + old_headers,
|
| + new_headers);
|
| }
|
| case ExtensionWebRequestEventRouter::kOnAuthRequired:
|
| return helpers::CalculateOnAuthRequiredDelta(
|
| @@ -1848,6 +1855,7 @@ int ExtensionWebRequestEventRouter::ExecuteDeltas(
|
| blocked_request.response_deltas,
|
| blocked_request.original_response_headers.get(),
|
| blocked_request.override_response_headers,
|
| + blocked_request.new_url,
|
| &warnings,
|
| blocked_request.net_log);
|
| } else if (blocked_request.event == kOnAuthRequired) {
|
|
|