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

Unified Diff: chrome/browser/extensions/api/web_request/web_request_api.cc

Issue 10560013: Persist declarative rules to the extension state store. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 8 years, 6 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698