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

Unified Diff: chrome/browser/extensions/extension_webrequest_api.cc

Issue 6698009: Add request_id to HttpRequestInfo and pass it to the NetworkDelegate for events. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: net and cache intercept Created 9 years, 9 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/extension_webrequest_api.cc
diff --git a/chrome/browser/extensions/extension_webrequest_api.cc b/chrome/browser/extensions/extension_webrequest_api.cc
index 46d14c10312903f17a03460208d9a35f07c5d786..f07c7b297ef119cf68813ee9fab739b7f8dd780f 100644
--- a/chrome/browser/extensions/extension_webrequest_api.cc
+++ b/chrome/browser/extensions/extension_webrequest_api.cc
@@ -16,6 +16,7 @@
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_extent.h"
#include "chrome/common/extensions/url_pattern.h"
+#include "chrome/common/url_constants.h"
#include "content/browser/browser_thread.h"
#include "net/base/net_errors.h"
#include "net/url_request/url_request.h"
@@ -243,6 +244,60 @@ bool ExtensionWebRequestEventRouter::OnBeforeRequest(
if (listeners.empty())
return false;
+ // Don't handle HTTP requests yet. We want to wait until we have headers
+ // available. Then we can dispatch the event. Remember the request, because
+ // we only have access to the ID at that point.
+ if (request->url().SchemeIs(chrome::kHttpScheme) ||
+ request->url().SchemeIs(chrome::kHttpsScheme)) {
+ http_requests_[request->identifier()] = request;
willchan no longer on Chromium 2011/03/17 15:55:54 You insert into this map here. What happens if OnB
Matt Perry 2011/03/22 21:11:43 Yep... I added a tracking object so they're remove
+ return false;
+ }
+
+ return OnBeforeRequestCommon(profile_id, event_router, request, callback,
+ tab_id, window_id, resource_type, listeners);
willchan no longer on Chromium 2011/03/17 15:55:54 where are these variables coming from? looks like
Matt Perry 2011/03/22 21:11:43 oops. bad base revision messed this up.
+}
+
+bool ExtensionWebRequestEventRouter::OnBeforeHttpRequest(
+ ProfileId profile_id,
+ ExtensionEventRouterForwarder* event_router,
+ uint64 request_id,
+ net::HttpRequestHeaders* headers,
willchan no longer on Chromium 2011/03/17 15:55:54 Don't you need to pass this variable through to On
Matt Perry 2011/03/22 21:11:43 Yeah, I'm leaving that as a TODO for now. There's
+ net::CompletionCallback* callback) {
+ // TODO(jochen): Figure out what to do with events from the system context.
+ if (profile_id == Profile::kInvalidProfileId)
+ return false;
+
+ HttpRequestMap::iterator iter = http_requests_.find(request_id);
+ if (iter == http_requests_.end())
willchan no longer on Chromium 2011/03/17 15:55:54 Isn't this a bug? Should this be LOG(DFATAL)?
+ return false;
+
+ net::URLRequest* request = iter->second;
+ http_requests_.erase(iter);
+
+ int tab_id = -1;
+ int window_id = -1;
+ ResourceType::Type resource_type = ResourceType::LAST_TYPE;
+ ExtractRequestInfo(request, &tab_id, &window_id, &resource_type);
+
+ std::vector<const EventListener*> listeners =
+ GetMatchingListeners(profile_id, keys::kOnBeforeRequest, request->url(),
+ tab_id, window_id, resource_type);
+ if (listeners.empty())
+ return false;
+
+ return OnBeforeRequestCommon(profile_id, event_router, request, callback,
+ tab_id, window_id, resource_type, listeners);
+}
+
+bool ExtensionWebRequestEventRouter::OnBeforeRequestCommon(
+ ProfileId profile_id,
+ ExtensionEventRouterForwarder* event_router,
+ net::URLRequest* request,
+ net::CompletionCallback* callback,
+ int tab_id,
+ int window_id,
+ ResourceType::Type resource_type,
+ const std::vector<const EventListener*>& listeners) {
ListValue args;
DictionaryValue* dict = new DictionaryValue();
dict->SetString(keys::kUrlKey, request->url().spec());
@@ -261,12 +316,12 @@ bool ExtensionWebRequestEventRouter::OnBeforeRequest(
// TODO(mpcomplete): Consider consolidating common (extension_id,json_args)
// pairs into a single message sent to a list of sub_event_names.
int num_handlers_blocking = 0;
- for (std::vector<const EventListener*>::iterator it = listeners.begin();
+ for (std::vector<const EventListener*>::const_iterator it = listeners.begin();
it != listeners.end(); ++it) {
event_router->DispatchEventToExtension(
(*it)->extension_id, (*it)->sub_event_name, json_args,
profile_id, true, GURL());
- if ((*it)->extra_info_spec & ExtraInfoSpec::BLOCKING) {
+ if (callback && (*it)->extra_info_spec & ExtraInfoSpec::BLOCKING) {
(*it)->blocked_requests.insert(request->identifier());
++num_handlers_blocking;
}

Powered by Google App Engine
This is Rietveld 408576698