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

Unified Diff: extensions/browser/guest_view/web_view/web_view_guest.cc

Issue 1181263007: WebView context menu cleanup. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: A new strategy. Rebased. Created 5 years, 6 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: 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());
}

Powered by Google App Engine
This is Rietveld 408576698