| 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 717770fe44d40121aa73d60011e47262f7f34473..da931f8db305aebd9e59b2ca5d52036ca4f9650c 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 =
|
| + 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,
|
|
|