summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-21 17:13:28 +0000
committerjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-21 17:13:28 +0000
commita8d807a012eadb63e011bbeeb911d11540668a17 (patch)
tree3e91b129cc63a607faae7c67f6d978b4bf79e064
parent0874b962109555a4403b82df328570a2d9ac4750 (diff)
downloadchromium_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
-rw-r--r--content/browser/renderer_host/render_widget_host_view_gtk.cc4
-rw-r--r--content/browser/renderer_host/render_widget_host_view_guest.cc2
-rw-r--r--content/browser/renderer_host/render_widget_host_view_mac.mm2
-rw-r--r--content/browser/renderer_host/render_widget_host_view_win.cc2
-rw-r--r--content/browser/web_contents/web_contents_impl.cc4
-rw-r--r--content/renderer/render_view_impl.cc7
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_,