diff options
author | guohui <guohui@chromium.org> | 2014-10-23 09:06:45 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-23 16:07:19 +0000 |
commit | 02ca72f2a3d4ad3e5c3142a1be013b49de12b155 (patch) | |
tree | 527329b3514ea3cd1b75fb70b25e930326de4e87 /extensions/browser/extension_function_dispatcher.cc | |
parent | 80c363b0c3fe7462bc26851778d41a8313953a24 (diff) | |
download | chromium_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.cc | 15 |
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(), |