diff options
author | evan@chromium.org <evan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-22 23:15:27 +0000 |
---|---|---|
committer | evan@chromium.org <evan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-22 23:15:27 +0000 |
commit | 439a23813d24262f7d66b1d551a6d77db0072722 (patch) | |
tree | 41fc06e025eda2b4dfd996bbcf4d96b567552fe9 | |
parent | 013f3065b739ecffb04792805e6edc0429886fb6 (diff) | |
download | chromium_src-439a23813d24262f7d66b1d551a6d77db0072722.zip chromium_src-439a23813d24262f7d66b1d551a6d77db0072722.tar.gz chromium_src-439a23813d24262f7d66b1d551a6d77db0072722.tar.bz2 |
Revert "Don't send resize messages until the renderer has been initialized."
This reverts commit r14260.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14267 0039d316-1c4b-4281-b951-d872f2087c98
12 files changed, 43 insertions, 21 deletions
diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc index 76b8d5a..aa1b78c 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -92,6 +92,7 @@ RenderViewHost::RenderViewHost(SiteInstance* instance, : RenderWidgetHost(instance->GetProcess(), routing_id), instance_(instance), delegate_(delegate), + renderer_initialized_(false), waiting_for_drag_context_response_(false), debugger_attached_(false), enabled_bindings_(0), @@ -199,6 +200,11 @@ bool RenderViewHost::IsRenderViewLive() const { return process()->channel() && renderer_initialized_; } +void RenderViewHost::Init() { + RenderWidgetHost::Init(); + renderer_initialized_ = true; +} + void RenderViewHost::NavigateToEntry(const NavigationEntry& entry, bool is_reload) { ViewMsg_Navigate_Params params; @@ -860,9 +866,13 @@ void RenderViewHost::OnMsgRenderViewReady() { } void RenderViewHost::OnMsgRenderViewGone() { - // Our base class RenderWidgetHost needs to reset some stuff. + // Our base class RenderWidgetHouse needs to reset some stuff. RendererExited(); + // Clearing this flag causes us to re-create the renderer when recovering + // from a crashed renderer. + renderer_initialized_ = false; + delegate_->RenderViewGone(this); OnDebugDisconnect(); } diff --git a/chrome/browser/renderer_host/render_view_host.h b/chrome/browser/renderer_host/render_view_host.h index 976a434..e6e7ad11 100644 --- a/chrome/browser/renderer_host/render_view_host.h +++ b/chrome/browser/renderer_host/render_view_host.h @@ -424,6 +424,7 @@ class RenderViewHost : public RenderWidgetHost { void WindowMoveOrResizeStarted(); // RenderWidgetHost public overrides. + virtual void Init(); virtual void Shutdown(); virtual bool IsRenderView() { return true; } virtual void OnMessageReceived(const IPC::Message& msg); @@ -591,6 +592,11 @@ class RenderViewHost : public RenderWidgetHost { HostPersonalization personalization_; #endif + // true if a renderer has once been valid. We use this flag to display a sad + // tab only when we lose our renderer and not if a paint occurs during + // initialization. + bool renderer_initialized_; + // true if we are currently waiting for a response for drag context // information. bool waiting_for_drag_context_response_; diff --git a/chrome/browser/renderer_host/render_widget_host.cc b/chrome/browser/renderer_host/render_widget_host.cc index 64fb609..dd14812 100644 --- a/chrome/browser/renderer_host/render_widget_host.cc +++ b/chrome/browser/renderer_host/render_widget_host.cc @@ -47,8 +47,7 @@ static const int kHungRendererDelayMs = 20000; RenderWidgetHost::RenderWidgetHost(RenderProcessHost* process, int routing_id) - : renderer_initialized_(false), - view_(NULL), + : view_(NULL), process_(process), routing_id_(routing_id), is_loading_(false), @@ -82,8 +81,6 @@ RenderWidgetHost::~RenderWidgetHost() { void RenderWidgetHost::Init() { DCHECK(process_->channel()); - renderer_initialized_ = true; - // Send the ack along with the information on placement. gfx::NativeView plugin_view = view_->GetPluginNativeView(); Send(new ViewMsg_CreatingNew_ACK(routing_id_, @@ -162,10 +159,8 @@ void RenderWidgetHost::WasRestored() { } void RenderWidgetHost::WasResized() { - if (resize_ack_pending_ || !process_->channel() || !view_ || - !renderer_initialized_) { + if (resize_ack_pending_ || !process_->channel() || !view_) return; - } gfx::Rect view_bounds = view_->GetViewBounds(); gfx::Size new_size(view_bounds.width(), view_bounds.height()); @@ -352,10 +347,6 @@ void RenderWidgetHost::ForwardInputEvent(const WebInputEvent& input_event, } void RenderWidgetHost::RendererExited() { - // Clearing this flag causes us to re-create the renderer when recovering - // from a crashed renderer. - renderer_initialized_ = false; - // Must reset these to ensure that mouse move events work with a new renderer. mouse_move_pending_ = false; next_mouse_move_.reset(); diff --git a/chrome/browser/renderer_host/render_widget_host.h b/chrome/browser/renderer_host/render_widget_host.h index ad81ad8..b6fd4d0 100644 --- a/chrome/browser/renderer_host/render_widget_host.h +++ b/chrome/browser/renderer_host/render_widget_host.h @@ -142,7 +142,7 @@ class RenderWidgetHost : public IPC::Channel::Listener { // Called when a renderer object already been created for this host, and we // just need to be attached to it. Used for window.open, <select> dropdown // menus, and other times when the renderer initiates creating an object. - void Init(); + virtual void Init(); // Tells the renderer to die and then calls Destroy(). virtual void Shutdown(); @@ -282,12 +282,6 @@ class RenderWidgetHost : public IPC::Channel::Listener { virtual void NotifyRendererUnresponsive() {} virtual void NotifyRendererResponsive() {} - protected: - // true if a renderer has once been valid. We use this flag to display a sad - // tab only when we lose our renderer and not if a paint occurs during - // initialization. - bool renderer_initialized_; - private: FRIEND_TEST(RenderWidgetHostTest, Resize); FRIEND_TEST(RenderWidgetHostTest, HiddenPaint); diff --git a/chrome/browser/tab_contents/tab_contents_view.h b/chrome/browser/tab_contents/tab_contents_view.h index 7095bf8..2a17dff 100644 --- a/chrome/browser/tab_contents/tab_contents_view.h +++ b/chrome/browser/tab_contents/tab_contents_view.h @@ -124,6 +124,10 @@ class TabContentsView : public RenderViewHostDelegate::View { // invoked, SetInitialFocus is invoked. virtual void RestoreFocus() = 0; + // Sets children's size. May involve packing them in order to get the + // toolkit to send them resize events. + virtual void SetChildSize(RenderWidgetHostView* rwh_view) = 0; + protected: TabContentsView() {} // Abstract interface. diff --git a/chrome/browser/tab_contents/tab_contents_view_gtk.cc b/chrome/browser/tab_contents/tab_contents_view_gtk.cc index 6c6bc30..7262d19 100644 --- a/chrome/browser/tab_contents/tab_contents_view_gtk.cc +++ b/chrome/browser/tab_contents/tab_contents_view_gtk.cc @@ -101,7 +101,6 @@ RenderWidgetHostView* TabContentsViewGtk::CreateViewForWidget( g_signal_connect(view->native_view(), "button-press-event", G_CALLBACK(OnMouseDown), this); gfx::RemoveAllChildren(vbox_.get()); - gtk_box_pack_start(GTK_BOX(vbox_.get()), content_view_, TRUE, TRUE, 0); return view; } @@ -187,6 +186,12 @@ void TabContentsViewGtk::RestoreFocus() { NOTIMPLEMENTED() << " -- need to restore the focus position on this page."; } +void TabContentsViewGtk::SetChildSize(RenderWidgetHostView* rwh_view) { + // Packing the gtk widget in a container will cause a configure-event to be + // sent to the widget. + gtk_box_pack_start(GTK_BOX(vbox_.get()), content_view_, TRUE, TRUE, 0); +} + void TabContentsViewGtk::UpdateDragCursor(bool is_drop_target) { NOTIMPLEMENTED(); } diff --git a/chrome/browser/tab_contents/tab_contents_view_gtk.h b/chrome/browser/tab_contents/tab_contents_view_gtk.h index 08c4388..94c60c4 100644 --- a/chrome/browser/tab_contents/tab_contents_view_gtk.h +++ b/chrome/browser/tab_contents/tab_contents_view_gtk.h @@ -43,6 +43,7 @@ class TabContentsViewGtk : public TabContentsView { virtual void SetInitialFocus(); virtual void StoreFocus(); virtual void RestoreFocus(); + virtual void SetChildSize(RenderWidgetHostView* rwh_view); // Backend implementation of RenderViewHostDelegate::View. virtual void ShowContextMenu(const ContextMenuParams& params); @@ -55,6 +56,7 @@ class TabContentsViewGtk : public TabContentsView { const gfx::Rect& selection_rect, int active_match_ordinal, bool final_update); + private: // We keep track of the timestamp of the latest mousedown event. static gboolean OnMouseDown(GtkWidget* widget, diff --git a/chrome/browser/tab_contents/tab_contents_view_mac.h b/chrome/browser/tab_contents/tab_contents_view_mac.h index ae40894..920fd76 100644 --- a/chrome/browser/tab_contents/tab_contents_view_mac.h +++ b/chrome/browser/tab_contents/tab_contents_view_mac.h @@ -58,6 +58,7 @@ class TabContentsViewMac : public TabContentsView, virtual void SetInitialFocus(); virtual void StoreFocus(); virtual void RestoreFocus(); + virtual void SetChildSize(RenderWidgetHostView* rwh_view); // Backend implementation of RenderViewHostDelegate::View. virtual RenderWidgetHostView* CreateNewWidgetInternal(int route_id, diff --git a/chrome/browser/tab_contents/tab_contents_view_mac.mm b/chrome/browser/tab_contents/tab_contents_view_mac.mm index d7e4398..291c73c 100644 --- a/chrome/browser/tab_contents/tab_contents_view_mac.mm +++ b/chrome/browser/tab_contents/tab_contents_view_mac.mm @@ -160,6 +160,10 @@ void TabContentsViewMac::RestoreFocus() { // TODO(port) } +void TabContentsViewMac::SetChildSize(RenderWidgetHostView* rwh_view) { + rwh_view->SetSize(GetContainerSize()); +} + void TabContentsViewMac::UpdateDragCursor(bool is_drop_target) { NOTIMPLEMENTED(); } diff --git a/chrome/browser/tab_contents/tab_contents_view_win.cc b/chrome/browser/tab_contents/tab_contents_view_win.cc index f5f3d96..3278c60 100644 --- a/chrome/browser/tab_contents/tab_contents_view_win.cc +++ b/chrome/browser/tab_contents/tab_contents_view_win.cc @@ -310,6 +310,10 @@ void TabContentsViewWin::RestoreFocus() { } } +void TabContentsViewWin::SetChildSize(RenderWidgetHostView* rwh_view) { + rwh_view->SetSize(GetContainerSize()); +} + void TabContentsViewWin::UpdateDragCursor(bool is_drop_target) { drop_target_->set_is_drop_target(is_drop_target); } diff --git a/chrome/browser/tab_contents/tab_contents_view_win.h b/chrome/browser/tab_contents/tab_contents_view_win.h index 8ef2765..227dfa5 100644 --- a/chrome/browser/tab_contents/tab_contents_view_win.h +++ b/chrome/browser/tab_contents/tab_contents_view_win.h @@ -43,6 +43,7 @@ class TabContentsViewWin : public TabContentsView, virtual void SetInitialFocus(); virtual void StoreFocus(); virtual void RestoreFocus(); + virtual void SetChildSize(RenderWidgetHostView* rwh_view); // Backend implementation of RenderViewHostDelegate::View. virtual void ShowContextMenu(const ContextMenuParams& params); diff --git a/chrome/browser/tab_contents/web_contents.cc b/chrome/browser/tab_contents/web_contents.cc index dcd566c..6236f6a 100644 --- a/chrome/browser/tab_contents/web_contents.cc +++ b/chrome/browser/tab_contents/web_contents.cc @@ -1559,7 +1559,7 @@ bool WebContents::CreateRenderViewForRenderManager( return false; // Now that the RenderView has been created, we need to tell it its size. - rwh_view->SetSize(view_->GetContainerSize()); + view_->SetChildSize(rwh_view); UpdateMaxPageIDIfNecessary(render_view_host->site_instance(), render_view_host); |