Chromium Code Reviews| Index: extensions/browser/guest_view/web_view/web_view_guest.cc |
| diff --git a/extensions/browser/guest_view/web_view/web_view_guest.cc b/extensions/browser/guest_view/web_view/web_view_guest.cc |
| index 3d5f31e930e2f9bb0233b3be6aede2d3ab5fa2d4..9f0b7b83f3e96066cf45acf684cb6eaef77e8b65 100644 |
| --- a/extensions/browser/guest_view/web_view/web_view_guest.cc |
| +++ b/extensions/browser/guest_view/web_view/web_view_guest.cc |
| @@ -4,6 +4,8 @@ |
| #include "extensions/browser/guest_view/web_view/web_view_guest.h" |
| +#include <utility> |
| + |
| #include "base/message_loop/message_loop.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/strings/utf_string_conversions.h" |
| @@ -40,6 +42,7 @@ |
| #include "extensions/browser/api/guest_view/web_view/web_view_internal_api.h" |
| #include "extensions/browser/api/web_request/web_request_api.h" |
| #include "extensions/browser/extension_system.h" |
| +#include "extensions/browser/extensions_browser_client.h" |
| #include "extensions/browser/guest_view/web_view/web_view_constants.h" |
| #include "extensions/browser/guest_view/web_view/web_view_content_script_manager.h" |
| #include "extensions/browser/guest_view/web_view/web_view_permission_helper.h" |
| @@ -189,10 +192,15 @@ double ConvertZoomLevelToZoomFactor(double zoom_level) { |
| } |
| using WebViewKey = std::pair<int, int>; |
| + |
| using WebViewKeyToIDMap = std::map<WebViewKey, int>; |
| static base::LazyInstance<WebViewKeyToIDMap> web_view_key_to_id_map = |
| LAZY_INSTANCE_INITIALIZER; |
| +using WebViewKeyToExtensionIDMap = std::map<WebViewKey, std::string>; |
| +static base::LazyInstance<WebViewKeyToExtensionIDMap> |
|
Devlin
2015/07/06 17:46:18
Storing this as global state seems unnecessary (an
|
| + web_view_key_to_extension_id_map = LAZY_INSTANCE_INITIALIZER; |
| + |
| } // namespace |
| // static |
| @@ -234,6 +242,13 @@ void WebViewGuest::CleanUp(int embedder_process_id, int view_instance_id) { |
| // Clean up content scripts for the WebView. |
| auto csm = WebViewContentScriptManager::Get(browser_context); |
| csm->RemoveAllContentScriptsForWebView(embedder_process_id, view_instance_id); |
| + |
| + // Allow an extensions browser client to potentially perform more cleanup. |
| + ExtensionsBrowserClient::Get()->CleanUpWebView(embedder_process_id, |
| + view_instance_id); |
| + |
| + // Remove this WebView's entry in |web_view_key_to_extension_id_map|. |
| + web_view_key_to_extension_id_map.Get().erase(key); |
| } |
| // static |
| @@ -275,7 +290,7 @@ int WebViewGuest::GetOrGenerateRulesRegistryID( |
| if (!is_web_view) |
| return RulesRegistryService::kDefaultRulesRegistryID; |
| - WebViewKey key = std::make_pair(embedder_process_id, webview_instance_id); |
| + WebViewKey key(embedder_process_id, webview_instance_id); |
| auto it = web_view_key_to_id_map.Get().find(key); |
| if (it != web_view_key_to_id_map.Get().end()) |
| return it->second; |
| @@ -297,6 +312,26 @@ int WebViewGuest::GetViewInstanceId(WebContents* contents) { |
| return guest->view_instance_id(); |
| } |
| +// static |
| +std::string WebViewGuest::GetExtensionID(int embedder_process_id, |
| + int view_instance_id) { |
| + WebViewKey key(embedder_process_id, view_instance_id); |
| + auto it = web_view_key_to_extension_id_map.Get().find(key); |
| + |
| + if (it == web_view_key_to_extension_id_map.Get().end()) |
| + return ""; |
| + |
| + return it->second; |
| +} |
| + |
| +// static |
| +void WebViewGuest::RegisterExtensionID(const std::string& extension_id, |
| + int embedder_process_id, |
| + int view_instance_id) { |
| + WebViewKey key(embedder_process_id, view_instance_id); |
| + web_view_key_to_extension_id_map.Get()[key] = extension_id; |
| +} |
| + |
| bool WebViewGuest::CanRunInDetachedState() const { |
| return true; |
| } |
| @@ -434,9 +469,6 @@ int WebViewGuest::GetTaskPrefix() const { |
| } |
| void WebViewGuest::GuestDestroyed() { |
| - // Clean up custom context menu items for this guest. |
| - if (web_view_guest_delegate_) |
| - web_view_guest_delegate_->OnGuestDestroyed(); |
| RemoveWebViewStateFromIOThread(web_contents()); |
| } |