summaryrefslogtreecommitdiffstats
path: root/extensions/browser/extension_function_dispatcher.cc
diff options
context:
space:
mode:
authorguohui <guohui@chromium.org>2014-10-23 09:06:45 -0700
committerCommit bot <commit-bot@chromium.org>2014-10-23 16:07:19 +0000
commit02ca72f2a3d4ad3e5c3142a1be013b49de12b155 (patch)
tree527329b3514ea3cd1b75fb70b25e930326de4e87 /extensions/browser/extension_function_dispatcher.cc
parent80c363b0c3fe7462bc26851778d41a8313953a24 (diff)
downloadchromium_src-02ca72f2a3d4ad3e5c3142a1be013b49de12b155.zip
chromium_src-02ca72f2a3d4ad3e5c3142a1be013b49de12b155.tar.gz
chromium_src-02ca72f2a3d4ad3e5c3142a1be013b49de12b155.tar.bz2
Fix webrequest api for webview in webui
<webview> can be directly embedded in a whitelisted webui page, but some webview apis are broken in a extension-less webui context. This CL fixes: 1. a crash on adding webview.request listener due to null extension pointer. 2. a crash on navigating away from a webview embedder due to dangling zoom observer. BUG=426016 Review URL: https://codereview.chromium.org/670173002 Cr-Commit-Position: refs/heads/master@{#300897}
Diffstat (limited to 'extensions/browser/extension_function_dispatcher.cc')
-rw-r--r--extensions/browser/extension_function_dispatcher.cc15
1 files changed, 11 insertions, 4 deletions
diff --git a/extensions/browser/extension_function_dispatcher.cc b/extensions/browser/extension_function_dispatcher.cc
index f9bbec5..5edb3ec 100644
--- a/extensions/browser/extension_function_dispatcher.cc
+++ b/extensions/browser/extension_function_dispatcher.cc
@@ -229,8 +229,6 @@ void ExtensionFunctionDispatcher::DispatchOnIOThread(
const ExtensionHostMsg_Request_Params& params) {
const Extension* extension =
extension_info_map->extensions().GetByID(params.extension_id);
- if (!extension)
- return;
ExtensionFunction::ResponseCallback callback(
base::Bind(&IOThreadResponseCallback, ipc_sender, routing_id,
@@ -255,12 +253,21 @@ void ExtensionFunctionDispatcher::DispatchOnIOThread(
}
function_io->set_ipc_sender(ipc_sender, routing_id);
function_io->set_extension_info_map(extension_info_map);
- function->set_include_incognito(
- extension_info_map->IsIncognitoEnabled(extension->id()));
+ if (extension) {
+ function->set_include_incognito(
+ extension_info_map->IsIncognitoEnabled(extension->id()));
+ }
if (!CheckPermissions(function.get(), params, callback))
return;
+ if (!extension) {
+ // Skip all of the UMA, quota, event page, activity logging stuff if there
+ // isn't an extension, e.g. if the function call was from WebUI.
+ function->Run()->Execute();
+ return;
+ }
+
QuotaService* quota = extension_info_map->GetQuotaService();
std::string violation_error = quota->Assess(extension->id(),
function.get(),