diff options
author | jamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-21 17:13:28 +0000 |
---|---|---|
committer | jamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-21 17:13:28 +0000 |
commit | a8d807a012eadb63e011bbeeb911d11540668a17 (patch) | |
tree | 3e91b129cc63a607faae7c67f6d978b4bf79e064 | |
parent | 0874b962109555a4403b82df328570a2d9ac4750 (diff) | |
download | chromium_src-a8d807a012eadb63e011bbeeb911d11540668a17.zip chromium_src-a8d807a012eadb63e011bbeeb911d11540668a17.tar.gz chromium_src-a8d807a012eadb63e011bbeeb911d11540668a17.tar.bz2 |
Merge 229428 "Set is_hidden bit for background navigations"
> Set is_hidden bit for background navigations
>
> r218548 added an initial visibility state for WebContentsImpls and RenderWidgetHost(View|Impl)s and set it for cross-process navigations, but failed to set the correct initial state for in-process navigations. This propagates the initial hidden state correctly in these places:
>
> 1.) For browser navigations, this propagates the WebContents::CreateParams::initially_hidden bit into WebContentsImpl. Previously this went nowhere (oops!)
> 2.) For window.open() navigations to background tabs, this initializes the RenderViewImpl's hidden bit based on the navigation disposition.
> 3.) For RenderWidgetHostView impls that store their own is_hidden bit (mac, gtk and guest) this sets the initial state correctly based off of the RenderWidgetHostImpl. The other RWHView implementations do not store their own is_hidden bool and just ask their RenderWidgetHostImpl for the bit. I'm not sure why this is.
>
> BUG=305437, 302574
> TEST=see bug
> R=jam@chromium.org
>
> Review URL: https://codereview.chromium.org/27203004
TBR=jamesr@chromium.org
Review URL: https://codereview.chromium.org/32593004
git-svn-id: svn://svn.chromium.org/chrome/branches/1650/src@229849 0039d316-1c4b-4281-b951-d872f2087c98
6 files changed, 14 insertions, 7 deletions
diff --git a/content/browser/renderer_host/render_widget_host_view_gtk.cc b/content/browser/renderer_host/render_widget_host_view_gtk.cc index 9c05bca..61512ef 100644 --- a/content/browser/renderer_host/render_widget_host_view_gtk.cc +++ b/content/browser/renderer_host/render_widget_host_view_gtk.cc @@ -541,7 +541,7 @@ class RenderWidgetHostViewGtkWidget { RenderWidgetHostViewGtk::RenderWidgetHostViewGtk(RenderWidgetHost* widget_host) : host_(RenderWidgetHostImpl::From(widget_host)), about_to_validate_and_paint_(false), - is_hidden_(false), + is_hidden_(host_->is_hidden()), is_loading_(false), parent_(NULL), is_popup_first_mouse_release_(true), @@ -556,8 +556,6 @@ RenderWidgetHostViewGtk::RenderWidgetHostViewGtk(RenderWidgetHost* widget_host) compositing_surface_(gfx::kNullPluginWindow), last_mouse_down_(NULL) { host_->SetView(this); - if (host_->is_hidden()) - WasHidden(); } RenderWidgetHostViewGtk::~RenderWidgetHostViewGtk() { diff --git a/content/browser/renderer_host/render_widget_host_view_guest.cc b/content/browser/renderer_host/render_widget_host_view_guest.cc index 2f58f50..05730b9 100644 --- a/content/browser/renderer_host/render_widget_host_view_guest.cc +++ b/content/browser/renderer_host/render_widget_host_view_guest.cc @@ -51,7 +51,7 @@ RenderWidgetHostViewGuest::RenderWidgetHostViewGuest( RenderWidgetHostView* platform_view) : host_(RenderWidgetHostImpl::From(widget_host)), guest_(guest), - is_hidden_(false), + is_hidden_(host_->is_hidden()), platform_view_(static_cast<RenderWidgetHostViewPort*>(platform_view)) { #if defined(OS_WIN) || defined(USE_AURA) gesture_recognizer_.reset(ui::GestureRecognizer::Create(this)); diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm index c2304e2..b6a6c18 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac.mm +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm @@ -426,7 +426,7 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget) allow_overlapping_views_(false), use_core_animation_(false), is_loading_(false), - is_hidden_(false), + is_hidden_(render_widget_host_->is_hidden()), weak_factory_(this), fullscreen_parent_host_view_(NULL), pending_swap_buffers_acks_weak_factory_(this), diff --git a/content/browser/renderer_host/render_widget_host_view_win.cc b/content/browser/renderer_host/render_widget_host_view_win.cc index eb532c7..84a7fe7 100644 --- a/content/browser/renderer_host/render_widget_host_view_win.cc +++ b/content/browser/renderer_host/render_widget_host_view_win.cc @@ -393,7 +393,7 @@ RenderWidgetHostViewWin::RenderWidgetHostViewWin(RenderWidgetHost* widget) imm32_manager_(new ui::IMM32Manager), ime_notification_(false), capture_enter_key_(false), - is_hidden_(false), + is_hidden_(render_widget_host_->is_hidden()), about_to_validate_and_paint_(false), close_on_deactivate_(false), being_destroyed_(false), diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 5626c4b..75d8df0 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc @@ -1213,6 +1213,10 @@ void WebContentsImpl::Observe(int type, } void WebContentsImpl::Init(const WebContents::CreateParams& params) { + // This is set before initializing the render_manager_ since render_manager_ + // init calls back into us via its delegate to ask if it should be hidden. + should_normally_be_visible_ = !params.initially_hidden; + render_manager_.Init( params.browser_context, params.site_instance, params.routing_id, params.main_frame_routing_id); diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 6827468..3f0f63f 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -2312,6 +2312,11 @@ WebView* RenderViewImpl::createView( transferred_preferences.accelerated_compositing_enabled = true; } + // The initial hidden state for the RenderViewImpl here has to match what the + // browser will eventually decide for the given disposition. Since we have to + // return from this call synchronously, we just have to make our best guess + // and rely on the browser sending a WasHidden / WasShown message if it + // disagrees. RenderViewImpl* view = RenderViewImpl::Create( routing_id_, renderer_preferences_, @@ -2323,7 +2328,7 @@ WebView* RenderViewImpl::createView( string16(), // WebCore will take care of setting the correct name. true, // is_renderer_created false, // swapped_out - false, // hidden + params.disposition == NEW_BACKGROUND_TAB, // hidden 1, // next_page_id screen_info_, accessibility_mode_, |