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

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

Issue 885493007: Refactoring: de-couple Extensions from "script injection System" [render side] : 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Devlin@'s comments. Created 5 years, 10 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 36418980eadde3a8fa1d9fd78e76eafe7215b33b..73fe4257c7627b301f5bb7f39c0f79482ed6e0d3 100644
--- a/extensions/browser/guest_view/web_view/web_view_guest.cc
+++ b/extensions/browser/guest_view/web_view/web_view_guest.cc
@@ -59,6 +59,8 @@ namespace extensions {
namespace {
+int current_script_injection_instance_id = 0;
+
std::string WindowOpenDispositionToString(
WindowOpenDisposition window_open_disposition) {
switch (window_open_disposition) {
@@ -100,6 +102,10 @@ static std::string TerminationStatusToString(base::TerminationStatus status) {
return "unknown";
}
+int GetNextScriptInjectionInstanceID() {
+ return ++current_script_injection_instance_id;
+}
+
std::string GetStoragePartitionIdFromSiteURL(const GURL& site_url) {
const std::string& partition_id = site_url.query();
bool persist_storage = site_url.path().find("persist") != std::string::npos;
@@ -185,6 +191,8 @@ 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;
+static base::LazyInstance<WebViewKeyToIDMap> script_injection_instance_id_map =
Devlin 2015/02/06 00:28:41 It bothers me that we have multiple different maps
Xi Han 2015/02/06 17:21:45 We would like to have just one function, but the i
Devlin 2015/02/06 18:48:36 But the RulesRegistry one is going away, right?
Xi Han 2015/02/06 19:45:33 Hmmm, I don't think so, because the declarative we
Devlin 2015/02/09 17:40:24 Ah, right. In that case, can we make GetRulesRegi
Xi Han 2015/02/09 23:28:11 As discussed offline, we will still keeps two maps
+ LAZY_INSTANCE_INITIALIZER;
// static
int WebViewGuest::GetOrGenerateRulesRegistryID(
@@ -208,6 +216,25 @@ int WebViewGuest::GetOrGenerateRulesRegistryID(
}
// static
+int WebViewGuest:: GetOrGenerateScriptInjectionInstanceID(
+ int embedder_process_id,
+ int guest_instance_id ) {
+ if (!(embedder_process_id && guest_instance_id))
+ return Host::kDefaultInstanceId;
+
+ WebViewKey key = std::make_pair(embedder_process_id, guest_instance_id);
+ WebViewKeyToIDMap& script_injection_ids =
+ script_injection_instance_id_map.Get();
+ auto it = script_injection_ids.find(key);
+ if (it != script_injection_ids.end())
+ return it->second;
+
+ int script_injection_instance_id = GetNextScriptInjectionInstanceID();
+ script_injection_ids[key] = script_injection_instance_id;
+ return script_injection_instance_id;
+}
+
+// static
int WebViewGuest::GetViewInstanceId(WebContents* contents) {
auto guest = FromWebContents(contents);
if (!guest)
@@ -294,6 +321,10 @@ void WebViewGuest::DidInitialize(const base::DictionaryValue& create_params) {
owner_web_contents()->GetRenderProcessHost()->GetID(),
view_instance_id());
+ GetOrGenerateScriptInjectionInstanceID(
+ owner_web_contents()->GetRenderProcessHost()->GetID(),
+ guest_instance_id());
+
// We must install the mapping from guests to WebViews prior to resuming
// suspended resource loads so that the WebRequest API will catch resource
// requests.
@@ -321,6 +352,7 @@ void WebViewGuest::EmbedderWillBeDestroyed() {
WebViewKey key(owner_web_contents()->GetRenderProcessHost()->GetID(),
view_instance_id());
web_view_key_to_id_map.Get().erase(key);
+ script_injection_instance_id_map.Get().erase(key);
content::BrowserThread::PostTask(
content::BrowserThread::IO,

Powered by Google App Engine
This is Rietveld 408576698