diff --git a/atom/browser/api/atom_api_web_view_manager.cc b/atom/browser/api/atom_api_web_view_manager.cc index f06c1105526e..1586c3a10dde 100644 --- a/atom/browser/api/atom_api_web_view_manager.cc +++ b/atom/browser/api/atom_api_web_view_manager.cc @@ -14,22 +14,12 @@ using atom::WebContentsPreferences; namespace { -atom::WebViewManager* GetWebViewManager(content::WebContents* web_contents) { - auto context = web_contents->GetBrowserContext(); - if (context) { - auto manager = context->GetGuestManager(); - return static_cast(manager); - } else { - return nullptr; - } -} - void AddGuest(int guest_instance_id, int element_instance_id, content::WebContents* embedder, content::WebContents* guest_web_contents, const base::DictionaryValue& options) { - auto manager = GetWebViewManager(embedder); + auto manager = atom::WebViewManager::GetWebViewManager(embedder); if (manager) manager->AddGuest(guest_instance_id, element_instance_id, embedder, guest_web_contents); @@ -38,7 +28,7 @@ void AddGuest(int guest_instance_id, } void RemoveGuest(content::WebContents* embedder, int guest_instance_id) { - auto manager = GetWebViewManager(embedder); + auto manager = atom::WebViewManager::GetWebViewManager(embedder); if (manager) manager->RemoveGuest(guest_instance_id); } diff --git a/atom/browser/web_contents_preferences.cc b/atom/browser/web_contents_preferences.cc index f57274527fc6..5e1971063fac 100644 --- a/atom/browser/web_contents_preferences.cc +++ b/atom/browser/web_contents_preferences.cc @@ -9,6 +9,7 @@ #include #include "atom/browser/native_window.h" +#include "atom/browser/web_view_manager.h" #include "atom/common/native_mate_converters/value_converter.h" #include "atom/common/options_switches.h" #include "base/command_line.h" @@ -155,19 +156,23 @@ void WebContentsPreferences::AppendExtraCommandLineSwitches( command_line->AppendSwitchASCII(::switches::kEnableBlinkFeatures, blink_features); - // The initial visibility state. NativeWindow* window = NativeWindow::FromWebContents(web_contents); + + // Inherit initial visibilty state from parent window in webviews + if (guest_instance_id && !window) { + auto manager = WebViewManager::GetWebViewManager(web_contents); + if (manager) { + content::WebContents* embedder = manager->GetEmbedder(guest_instance_id); + if (embedder) + window = NativeWindow::FromWebContents(embedder); + } + } + + // The initial visibility state. if (window) { bool visible = window->IsVisible() && !window->IsMinimized(); if (!visible) // Default state is visible. command_line->AppendSwitch(switches::kHiddenPage); - } else { - // Inherit initial visibilty state from parent window in webviews - bool hidden_page; - if (web_preferences.GetBoolean(options::kHiddenPage, &hidden_page) && - hidden_page) { - command_line->AppendSwitch(switches::kHiddenPage); - } } } diff --git a/atom/browser/web_view_manager.cc b/atom/browser/web_view_manager.cc index d404c1a43680..321820bc2f61 100644 --- a/atom/browser/web_view_manager.cc +++ b/atom/browser/web_view_manager.cc @@ -6,7 +6,6 @@ #include "atom/browser/atom_browser_context.h" #include "content/public/browser/render_process_host.h" -#include "content/public/browser/web_contents.h" namespace atom { @@ -42,6 +41,13 @@ void WebViewManager::RemoveGuest(int guest_instance_id) { } } +content::WebContents* WebViewManager::GetEmbedder(int guest_instance_id) { + if (ContainsKey(web_contents_embedder_map_, guest_instance_id)) + return web_contents_embedder_map_[guest_instance_id].embedder; + else + return nullptr; +} + content::WebContents* WebViewManager::GetGuestByInstanceID( int owner_process_id, int element_instance_id) { @@ -65,4 +71,16 @@ bool WebViewManager::ForEachGuest(content::WebContents* embedder_web_contents, return false; } +// static +WebViewManager* WebViewManager::GetWebViewManager(content::WebContents* web_contents) { + auto context = web_contents->GetBrowserContext(); + if (context) { + auto manager = context->GetGuestManager(); + return static_cast(manager); + } else { + return nullptr; + } +} + + } // namespace atom diff --git a/atom/browser/web_view_manager.h b/atom/browser/web_view_manager.h index ff9a8ecba2ab..b956fa76ecff 100644 --- a/atom/browser/web_view_manager.h +++ b/atom/browser/web_view_manager.h @@ -8,6 +8,7 @@ #include #include "content/public/browser/browser_plugin_guest_manager.h" +#include "content/public/browser/web_contents.h" namespace atom { @@ -22,6 +23,10 @@ class WebViewManager : public content::BrowserPluginGuestManager { content::WebContents* web_contents); void RemoveGuest(int guest_instance_id); + content::WebContents* GetEmbedder(int guest_instance_id); + + static WebViewManager* GetWebViewManager(content::WebContents* web_contents); + protected: // content::BrowserPluginGuestManager: content::WebContents* GetGuestByInstanceID(int owner_process_id, diff --git a/lib/browser/guest-view-manager.js b/lib/browser/guest-view-manager.js index 57ed14af5d22..6876a8d22c12 100644 --- a/lib/browser/guest-view-manager.js +++ b/lib/browser/guest-view-manager.js @@ -181,8 +181,7 @@ var attachGuest = function (embedder, elementInstanceId, guestInstanceId, params plugins: params.plugins, zoomFactor: params.zoomFactor, webSecurity: !params.disablewebsecurity, - blinkFeatures: params.blinkfeatures, - hiddenPage: params.hiddenPage + blinkFeatures: params.blinkfeatures } if (params.preload) { diff --git a/lib/renderer/web-view/web-view.js b/lib/renderer/web-view/web-view.js index fd44d925e456..e9d300aabbcb 100644 --- a/lib/renderer/web-view/web-view.js +++ b/lib/renderer/web-view/web-view.js @@ -230,8 +230,7 @@ var WebViewImpl = (function () { params = { instanceId: this.viewInstanceId, userAgentOverride: this.userAgentOverride, - zoomFactor: webFrame.getZoomFactor(), - hiddenPage: document.hidden + zoomFactor: webFrame.getZoomFactor() } ref1 = this.attributes for (attributeName in ref1) {