Chromium Code Reviews| 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 04a4d698a62e3cb7fd9daefa08fff390071a7f4d..c6c4a46d7e86c5e40a3f8f72f8875358c8e53ed9 100644 |
| --- a/chrome/browser/extensions/api/web_request/web_request_api.cc |
| +++ b/chrome/browser/extensions/api/web_request/web_request_api.cc |
| @@ -489,7 +489,8 @@ int ExtensionWebRequestEventRouter::OnBeforeRequest( |
| bool initialize_blocked_requests = false; |
| initialize_blocked_requests |= |
| - ProcessDeclarativeRules(request, extensions::ON_BEFORE_REQUEST, NULL); |
| + ProcessDeclarativeRules(profile, keys::kOnBeforeRequest, request, |
| + extensions::ON_BEFORE_REQUEST, NULL); |
| int extra_info_spec = 0; |
| std::vector<const EventListener*> listeners = |
| @@ -537,8 +538,8 @@ int ExtensionWebRequestEventRouter::OnBeforeSendHeaders( |
| bool initialize_blocked_requests = false; |
| initialize_blocked_requests |= |
| - ProcessDeclarativeRules(request, extensions::ON_BEFORE_SEND_HEADERS, |
| - NULL); |
| + ProcessDeclarativeRules(profile, keys::kOnBeforeSendHeaders, request, |
| + extensions::ON_BEFORE_SEND_HEADERS, NULL); |
| int extra_info_spec = 0; |
| std::vector<const EventListener*> listeners = |
| @@ -621,7 +622,8 @@ int ExtensionWebRequestEventRouter::OnHeadersReceived( |
| bool initialize_blocked_requests = false; |
| initialize_blocked_requests |= |
| - ProcessDeclarativeRules(request, extensions::ON_HEADERS_RECEIVED, |
| + ProcessDeclarativeRules(profile, keys::kOnHeadersReceived, request, |
| + extensions::ON_HEADERS_RECEIVED, |
| original_response_headers); |
| int extra_info_spec = 0; |
| @@ -1269,8 +1271,9 @@ void ExtensionWebRequestEventRouter::DecrementBlockCount( |
| base::TimeDelta block_time = |
| base::Time::Now() - blocked_request.blocking_time; |
| - request_time_tracker_->IncrementExtensionBlockTime( |
| - extension_id, request_id, block_time); |
| + if (!extension_id.empty()) |
| + request_time_tracker_->IncrementExtensionBlockTime( |
| + extension_id, request_id, block_time); |
|
battre
2012/06/15 22:56:49
should we add a UMA statistic to measure the netwo
Matt Perry
2012/06/18 21:01:01
Done.
|
| if (num_handlers_blocking == 0) { |
| ExecuteDeltas(profile, request_id, true); |
| @@ -1399,12 +1402,26 @@ int ExtensionWebRequestEventRouter::ExecuteDeltas( |
| } |
| bool ExtensionWebRequestEventRouter::ProcessDeclarativeRules( |
| + void* profile, |
| + const std::string& event_name, |
| net::URLRequest* request, |
| extensions::RequestStages request_stage, |
| net::HttpResponseHeaders* original_response_headers) { |
| if (!rules_registry_.get()) |
| return false; |
| + if (!rules_registry_->IsReady()) { |
|
battre
2012/06/15 22:56:49
nice! the architecture is really flexible.
Matt Perry
2012/06/18 21:01:01
Agreed, I was pleasantly surprised with how simple
|
| + // The rules registry is still loading. Block this request until it |
| + // finishes. |
| + EventResponse* response = NULL; |
| + rules_registry_->AddReadyCallback( |
| + base::Bind(&ExtensionWebRequestEventRouter::DecrementBlockCount, |
| + AsWeakPtr(), profile, std::string(), event_name, |
| + request->identifier(), response)); |
| + blocked_requests_[request->identifier()].num_handlers_blocking++; |
|
Matt Perry
2012/06/18 21:01:01
BTW I had to add more initialization of blocked_re
|
| + return true; |
| + } |
| + |
| base::Time start = base::Time::Now(); |
| // TODO(battre): Annotate deltas with extension IDs, so that we can |