| 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 e8b5d91f71175c1782cd43709a5b467dc9384fe5..c337c36f9e65096969ee3713f4947b8c9a24a27c 100644
|
| --- a/chrome/browser/extensions/api/web_request/web_request_api.cc
|
| +++ b/chrome/browser/extensions/api/web_request/web_request_api.cc
|
| @@ -812,7 +812,11 @@ void ExtensionWebRequestEventRouter::OnCompleted(
|
| ExtensionInfoMap* extension_info_map,
|
| net::URLRequest* request) {
|
| // We hide events from the system context as well as sensitive requests.
|
| - if (!profile || WebRequestPermissions::HideRequest(request))
|
| + // However, if the request first became sensitive after redirecting we have
|
| + // already signaled it and thus we have to signal the end of it. This is
|
| + // risk-free because the handler cannot modify the request now.
|
| + if (!profile ||
|
| + (WebRequestPermissions::HideRequest(request) && !WasSignaled(*request)))
|
| return;
|
|
|
| request_time_tracker_->LogRequestEndTime(request->identifier(),
|
| @@ -861,7 +865,11 @@ void ExtensionWebRequestEventRouter::OnErrorOccurred(
|
| net::URLRequest* request,
|
| bool started) {
|
| // We hide events from the system context as well as sensitive requests.
|
| - if (!profile || WebRequestPermissions::HideRequest(request))
|
| + // However, if the request first became sensitive after redirecting we have
|
| + // already signaled it and thus we have to signal the end of it. This is
|
| + // risk-free because the handler cannot modify the request now.
|
| + if (!profile ||
|
| + (WebRequestPermissions::HideRequest(request) && !WasSignaled(*request)))
|
| return;
|
|
|
| request_time_tracker_->LogRequestEndTime(request->identifier(),
|
| @@ -1096,6 +1104,13 @@ void* ExtensionWebRequestEventRouter::GetCrossProfile(void* profile) const {
|
| return cross_profile->second;
|
| }
|
|
|
| +bool ExtensionWebRequestEventRouter::WasSignaled(
|
| + const net::URLRequest& request) {
|
| + SignaledRequestMap::const_iterator flag =
|
| + signaled_requests_.find(request.identifier());
|
| + return (flag != signaled_requests_.end()) && (flag->second != 0);
|
| +}
|
| +
|
| void ExtensionWebRequestEventRouter::GetMatchingListenersImpl(
|
| void* profile,
|
| ExtensionInfoMap* extension_info_map,
|
|
|