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

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

Issue 864893003: <webview>: Fix WebRequest API crash (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed tests Created 5 years, 11 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
« no previous file with comments | « chrome/browser/extensions/api/web_request/web_request_api_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/browser/api/web_request/web_request_api.cc
diff --git a/extensions/browser/api/web_request/web_request_api.cc b/extensions/browser/api/web_request/web_request_api.cc
index b04ee7656142448910ea7ca0946aa93a77449397..87da356ebce5602f6072deb5f7d75d62d8983b65 100644
--- a/extensions/browser/api/web_request/web_request_api.cc
+++ b/extensions/browser/api/web_request/web_request_api.cc
@@ -458,21 +458,31 @@ struct ExtensionWebRequestEventRouter::EventListener {
RequestFilter filter;
int extra_info_spec;
int embedder_process_id;
- int webview_instance_id;
+ int web_view_instance_id;
base::WeakPtr<IPC::Sender> ipc_sender;
mutable std::set<uint64> blocked_requests;
// Comparator to work with std::set.
bool operator<(const EventListener& that) const {
- if (extension_id < that.extension_id)
- return true;
- if (extension_id == that.extension_id &&
- sub_event_name < that.sub_event_name)
- return true;
+ if (extension_id != that.extension_id)
+ return extension_id < that.extension_id;
+
+ if (sub_event_name != that.sub_event_name)
+ return sub_event_name < that.sub_event_name;
+
+ if (embedder_process_id != that.embedder_process_id)
+ return embedder_process_id < that.embedder_process_id;
+
+ if (web_view_instance_id != that.web_view_instance_id)
+ return web_view_instance_id < that.web_view_instance_id;
+
return false;
}
- EventListener() : extra_info_spec(0) {}
+ EventListener() :
+ extra_info_spec(0),
+ embedder_process_id(0),
+ web_view_instance_id(0) {}
};
// Contains info about requests that are blocked waiting for a response from
@@ -1279,7 +1289,7 @@ bool ExtensionWebRequestEventRouter::AddEventListener(
const RequestFilter& filter,
int extra_info_spec,
int embedder_process_id,
- int webview_instance_id,
+ int web_view_instance_id,
base::WeakPtr<IPC::Sender> ipc_sender) {
if (!IsWebRequestEvent(event_name))
return false;
@@ -1292,8 +1302,8 @@ bool ExtensionWebRequestEventRouter::AddEventListener(
listener.extra_info_spec = extra_info_spec;
listener.ipc_sender = ipc_sender;
listener.embedder_process_id = embedder_process_id;
- listener.webview_instance_id = webview_instance_id;
- if (listener.webview_instance_id) {
+ listener.web_view_instance_id = web_view_instance_id;
+ if (listener.web_view_instance_id) {
content::RecordAction(
base::UserMetricsAction("WebView.WebRequest.AddListener"));
}
@@ -1344,7 +1354,7 @@ void ExtensionWebRequestEventRouter::RemoveWebViewEventListeners(
void* browser_context,
const std::string& extension_id,
int embedder_process_id,
- int webview_instance_id) {
+ int web_view_instance_id) {
// Iterate over all listeners of all WebRequest events to delete
// any listeners that belong to the provided <webview>.
ListenerMapForBrowserContext& map_for_browser_context =
@@ -1358,7 +1368,7 @@ void ExtensionWebRequestEventRouter::RemoveWebViewEventListeners(
listener_iter != listeners.end(); ++listener_iter) {
const EventListener& listener = *listener_iter;
if (listener.embedder_process_id == embedder_process_id &&
- listener.webview_instance_id == webview_instance_id)
+ listener.web_view_instance_id == web_view_instance_id)
listeners_to_delete.push_back(listener);
}
for (size_t i = 0; i < listeners_to_delete.size(); ++i) {
@@ -1482,7 +1492,7 @@ void ExtensionWebRequestEventRouter::GetMatchingListenersImpl(
if (is_web_view_guest &&
(it->embedder_process_id != web_view_info.embedder_process_id ||
- it->webview_instance_id != web_view_info.instance_id))
+ it->web_view_instance_id != web_view_info.instance_id))
continue;
if (!it->filter.urls.is_empty() && !it->filter.urls.MatchesURL(url))
@@ -2205,20 +2215,21 @@ bool WebRequestInternalAddEventListenerFunction::RunSync() {
std::string sub_event_name;
EXTENSION_FUNCTION_VALIDATE(args_->GetString(4, &sub_event_name));
- int webview_instance_id = 0;
- EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(5, &webview_instance_id));
+ int web_view_instance_id = 0;
+ EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(5, &web_view_instance_id));
base::WeakPtr<extensions::ExtensionMessageFilter> ipc_sender =
ipc_sender_weak();
int embedder_process_id =
- ipc_sender.get() ? ipc_sender->render_process_id() : -1;
+ ipc_sender.get() && web_view_instance_id > 0 ?
+ ipc_sender->render_process_id() : 0;
const Extension* extension =
extension_info_map()->extensions().GetByID(extension_id_safe());
std::string extension_name =
extension ? extension->name() : extension_id_safe();
- if (webview_instance_id == 0) {
+ if (!web_view_instance_id) {
// We check automatically whether the extension has the 'webRequest'
// permission. For blocking calls we require the additional permission
// 'webRequestBlocking'.
@@ -2249,7 +2260,7 @@ bool WebRequestInternalAddEventListenerFunction::RunSync() {
ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
profile_id(), extension_id_safe(), extension_name,
event_name, sub_event_name, filter, extra_info_spec,
- embedder_process_id, webview_instance_id, ipc_sender_weak());
+ embedder_process_id, web_view_instance_id, ipc_sender_weak());
EXTENSION_FUNCTION_VALIDATE(success);
helpers::ClearCacheOnNavigation();
« no previous file with comments | « chrome/browser/extensions/api/web_request/web_request_api_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698