summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-07 20:32:42 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-07 20:32:42 +0000
commit20a02f9bc672fcb33fba1f8f2eb7f0d1111b5b28 (patch)
treedb728dc8f39291a9c5748a4ba4ec03c20aa20a3d
parent586d51edafeeed9705656ac871fcd3d7653e4456 (diff)
downloadchromium_src-20a02f9bc672fcb33fba1f8f2eb7f0d1111b5b28.zip
chromium_src-20a02f9bc672fcb33fba1f8f2eb7f0d1111b5b28.tar.gz
chromium_src-20a02f9bc672fcb33fba1f8f2eb7f0d1111b5b28.tar.bz2
Stop caching pointers to RenderWidgetHostView in WebContentsView implementations (namely Aura and Windows). This is a cause of problems because it sometimes goes out of date (i.e. with pending navigations that fail, and previously with interstitials).
BUG=162981 Review URL: https://codereview.chromium.org/11446057 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171831 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/browser/web_contents/interstitial_page_impl.cc7
-rw-r--r--content/browser/web_contents/interstitial_page_impl.h3
-rw-r--r--content/browser/web_contents/render_view_host_manager.cc3
-rw-r--r--content/browser/web_contents/web_contents_view_android.cc3
-rw-r--r--content/browser/web_contents/web_contents_view_android.h1
-rw-r--r--content/browser/web_contents/web_contents_view_aura.cc41
-rw-r--r--content/browser/web_contents/web_contents_view_aura.h3
-rw-r--r--content/browser/web_contents/web_contents_view_gtk.cc7
-rw-r--r--content/browser/web_contents/web_contents_view_gtk.h1
-rw-r--r--content/browser/web_contents/web_contents_view_guest.cc3
-rw-r--r--content/browser/web_contents/web_contents_view_guest.h1
-rw-r--r--content/browser/web_contents/web_contents_view_mac.h1
-rw-r--r--content/browser/web_contents/web_contents_view_mac.mm3
-rw-r--r--content/browser/web_contents/web_contents_view_win.cc18
-rw-r--r--content/browser/web_contents/web_contents_view_win.h4
-rw-r--r--content/public/browser/web_contents_view.h6
-rw-r--r--content/test/test_web_contents_view.cc3
-rw-r--r--content/test/test_web_contents_view.h1
18 files changed, 34 insertions, 75 deletions
diff --git a/content/browser/web_contents/interstitial_page_impl.cc b/content/browser/web_contents/interstitial_page_impl.cc
index 50883ae..df508e6 100644
--- a/content/browser/web_contents/interstitial_page_impl.cc
+++ b/content/browser/web_contents/interstitial_page_impl.cc
@@ -250,9 +250,6 @@ void InterstitialPageImpl::Hide() {
// already showing. That would result in bad things (unparented HWND on
// Windows for example) happening.
old_view->Show();
- // WebContentsView implementations cached a pointer to the interstitial view
- // when we created it, so set the old original back.
- web_contents_->GetView()->SetView(old_view);
}
// If the focus was on the interstitial, let's keep it to the page.
@@ -627,6 +624,10 @@ void InterstitialPageImpl::FocusThroughTabTraversal(bool reverse) {
render_view_host_->SetInitialFocus(reverse);
}
+RenderWidgetHostView* InterstitialPageImpl::GetView() {
+ return render_view_host_->GetView();
+}
+
RenderViewHost* InterstitialPageImpl::GetRenderViewHostForTesting() const {
return render_view_host_;
}
diff --git a/content/browser/web_contents/interstitial_page_impl.h b/content/browser/web_contents/interstitial_page_impl.h
index 69f6120..4a48372 100644
--- a/content/browser/web_contents/interstitial_page_impl.h
+++ b/content/browser/web_contents/interstitial_page_impl.h
@@ -20,6 +20,7 @@
namespace content {
class NavigationEntry;
class RenderViewHostImpl;
+class RenderWidgetHostView;
class WebContentsView;
class WebContentsImpl;
@@ -68,6 +69,8 @@ class CONTENT_EXPORT InterstitialPageImpl
// Called when tab traversing.
void FocusThroughTabTraversal(bool reverse);
+ RenderWidgetHostView* GetView();
+
// See description above field.
void set_reload_on_dont_proceed(bool value) {
reload_on_dont_proceed_ = value;
diff --git a/content/browser/web_contents/render_view_host_manager.cc b/content/browser/web_contents/render_view_host_manager.cc
index 63c05a6..25a4559 100644
--- a/content/browser/web_contents/render_view_host_manager.cc
+++ b/content/browser/web_contents/render_view_host_manager.cc
@@ -13,6 +13,7 @@
#include "content/browser/renderer_host/render_view_host_factory.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/site_instance_impl.h"
+#include "content/browser/web_contents/interstitial_page_impl.h"
#include "content/browser/web_contents/navigation_controller_impl.h"
#include "content/browser/web_contents/navigation_entry_impl.h"
#include "content/browser/webui/web_ui_impl.h"
@@ -89,6 +90,8 @@ RenderViewHostImpl* RenderViewHostManager::pending_render_view_host() const {
}
RenderWidgetHostView* RenderViewHostManager::GetRenderWidgetHostView() const {
+ if (interstitial_page_)
+ return interstitial_page_->GetView();
if (!render_view_host_)
return NULL;
return render_view_host_->GetView();
diff --git a/content/browser/web_contents/web_contents_view_android.cc b/content/browser/web_contents/web_contents_view_android.cc
index acb597d..a042541 100644
--- a/content/browser/web_contents/web_contents_view_android.cc
+++ b/content/browser/web_contents/web_contents_view_android.cc
@@ -79,9 +79,6 @@ RenderWidgetHostView* WebContentsViewAndroid::CreateViewForWidget(
return view;
}
-void WebContentsViewAndroid::SetView(RenderWidgetHostView* view) {
-}
-
gfx::NativeView WebContentsViewAndroid::GetNativeView() const {
return content_view_core_;
}
diff --git a/content/browser/web_contents/web_contents_view_android.h b/content/browser/web_contents/web_contents_view_android.h
index 8975ea1..6236fe8 100644
--- a/content/browser/web_contents/web_contents_view_android.h
+++ b/content/browser/web_contents/web_contents_view_android.h
@@ -33,7 +33,6 @@ class WebContentsViewAndroid : public WebContentsView,
virtual void CreateView(const gfx::Size& initial_size) OVERRIDE;
virtual RenderWidgetHostView* CreateViewForWidget(
RenderWidgetHost* render_widget_host) OVERRIDE;
- virtual void SetView(RenderWidgetHostView* view) OVERRIDE;
virtual gfx::NativeView GetNativeView() const OVERRIDE;
virtual gfx::NativeView GetContentNativeView() const OVERRIDE;
virtual gfx::NativeWindow GetTopLevelNativeWindow() const OVERRIDE;
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
index 44ba318..bf881e3 100644
--- a/content/browser/web_contents/web_contents_view_aura.cc
+++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -328,7 +328,6 @@ WebContentsViewAura::WebContentsViewAura(
WebContentsImpl* web_contents,
WebContentsViewDelegate* delegate)
: web_contents_(web_contents),
- view_(NULL),
delegate_(delegate),
current_drag_op_(WebKit::WebDragOperationNone),
drag_dest_delegate_(NULL),
@@ -421,7 +420,7 @@ void WebContentsViewAura::PrepareContentWindowForOverscroll() {
}
void WebContentsViewAura::ResetOverscrollTransform() {
- if (!view_)
+ if (!web_contents_->GetRenderWidgetHostView())
return;
aura::Window* target = GetWindowToAnimateForOverscroll();
ui::ScopedLayerAnimationSettings settings(target->layer()->GetAnimator());
@@ -432,14 +431,14 @@ void WebContentsViewAura::ResetOverscrollTransform() {
}
void WebContentsViewAura::CompleteOverscrollNavigation(OverscrollMode mode) {
+ if (!web_contents_->GetRenderWidgetHostView())
+ return;
+
// Animate out the current view first. Navigate to the requested history at
// the end of the animation.
if (current_overscroll_gesture_ == OVERSCROLL_NONE)
return;
- if (!view_)
- return;
-
completed_overscroll_gesture_ = mode;
aura::Window* target = GetWindowToAnimateForOverscroll();
ui::ScopedLayerAnimationSettings settings(target->layer()->GetAnimator());
@@ -447,7 +446,8 @@ void WebContentsViewAura::CompleteOverscrollNavigation(OverscrollMode mode) {
settings.SetTweenType(ui::Tween::EASE_OUT);
settings.AddObserver(this);
gfx::Transform transform;
- int content_width = view_->GetViewBounds().width();
+ int content_width =
+ web_contents_->GetRenderWidgetHostView()->GetViewBounds().width();
transform.Translate(mode == OVERSCROLL_WEST ? -content_width : content_width,
0);
target->SetTransform(transform);
@@ -533,13 +533,14 @@ RenderWidgetHostView* WebContentsViewAura::CreateViewForWidget(
return render_widget_host->GetView();
}
- view_ = RenderWidgetHostView::CreateViewForWidget(render_widget_host);
- view_->InitAsChild(NULL);
- GetNativeView()->AddChild(view_->GetNativeView());
- view_->Show();
+ RenderWidgetHostView* view =
+ RenderWidgetHostView::CreateViewForWidget(render_widget_host);
+ view->InitAsChild(NULL);
+ GetNativeView()->AddChild(view->GetNativeView());
+ view->Show();
// We listen to drag drop events in the newly created view's window.
- aura::client::SetDragDropDelegate(view_->GetNativeView(), this);
+ aura::client::SetDragDropDelegate(view->GetNativeView(), this);
RenderWidgetHostImpl* host_impl =
RenderWidgetHostImpl::From(render_widget_host);
@@ -547,11 +548,7 @@ RenderWidgetHostView* WebContentsViewAura::CreateViewForWidget(
web_contents_->GetDelegate()->CanOverscrollContent())
host_impl->overscroll_controller()->set_delegate(this);
- return view_;
-}
-
-void WebContentsViewAura::SetView(RenderWidgetHostView* view) {
- view_ = view;
+ return view;
}
gfx::NativeView WebContentsViewAura::GetNativeView() const {
@@ -559,7 +556,8 @@ gfx::NativeView WebContentsViewAura::GetNativeView() const {
}
gfx::NativeView WebContentsViewAura::GetContentNativeView() const {
- return view_->GetNativeView();
+ RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView();
+ return rwhv ? rwhv->GetNativeView() : NULL;
}
gfx::NativeWindow WebContentsViewAura::GetTopLevelNativeWindow() const {
@@ -576,7 +574,6 @@ void WebContentsViewAura::SetPageTitle(const string16& title) {
void WebContentsViewAura::OnTabCrashed(base::TerminationStatus status,
int error_code) {
- view_ = NULL;
// Set the focus to the parent because neither the view window nor this
// window can handle key events.
if (window_->HasFocus() && window_->parent())
@@ -690,7 +687,7 @@ void WebContentsViewAura::StartDragging(
// updates while in the system DoDragDrop loop.
int result_op = 0;
{
- gfx::NativeView content_native_view = view_? GetContentNativeView() : NULL;
+ gfx::NativeView content_native_view = GetContentNativeView();
MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current());
result_op = aura::client::GetDragDropClient(root_window)->StartDragAndDrop(
data, root_window, content_native_view,
@@ -846,9 +843,9 @@ bool WebContentsViewAura::ShouldDescendIntoChildForEventHandling(
}
bool WebContentsViewAura::CanFocus() {
- // Do not take the focus if |view_| is gone because neither the view window
- // nor this window can handle key events.
- return view_ != NULL;
+ // Do not take the focus if the render widget host view is gone because
+ // neither the view window nor this window can handle key events.
+ return web_contents_->GetRenderWidgetHostView() != NULL;
}
void WebContentsViewAura::OnCaptureLost() {
diff --git a/content/browser/web_contents/web_contents_view_aura.h b/content/browser/web_contents/web_contents_view_aura.h
index 5d9dc63..ef53fea 100644
--- a/content/browser/web_contents/web_contents_view_aura.h
+++ b/content/browser/web_contents/web_contents_view_aura.h
@@ -81,7 +81,6 @@ class CONTENT_EXPORT WebContentsViewAura
virtual void CreateView(const gfx::Size& initial_size) OVERRIDE;
virtual RenderWidgetHostView* CreateViewForWidget(
RenderWidgetHost* render_widget_host) OVERRIDE;
- virtual void SetView(RenderWidgetHostView* view) OVERRIDE;
virtual gfx::NativeView GetNativeView() const OVERRIDE;
virtual gfx::NativeView GetContentNativeView() const OVERRIDE;
virtual gfx::NativeWindow GetTopLevelNativeWindow() const OVERRIDE;
@@ -170,8 +169,6 @@ class CONTENT_EXPORT WebContentsViewAura
// The WebContentsImpl whose contents we display.
WebContentsImpl* web_contents_;
- RenderWidgetHostView* view_;
-
scoped_ptr<WebContentsViewDelegate> delegate_;
WebKit::WebDragOperationsMask current_drag_op_;
diff --git a/content/browser/web_contents/web_contents_view_gtk.cc b/content/browser/web_contents/web_contents_view_gtk.cc
index f20f080..59aa26a 100644
--- a/content/browser/web_contents/web_contents_view_gtk.cc
+++ b/content/browser/web_contents/web_contents_view_gtk.cc
@@ -148,13 +148,6 @@ RenderWidgetHostView* WebContentsViewGtk::CreateViewForWidget(
return view;
}
-void WebContentsViewGtk::SetView(RenderWidgetHostView* view) {
- gfx::NativeView content_view = view->GetNativeView();
- drag_dest_.reset(new WebDragDestGtk(web_contents_, content_view));
- if (delegate_.get())
- drag_dest_->set_delegate(delegate_->GetDragDestDelegate());
-}
-
gfx::NativeView WebContentsViewGtk::GetNativeView() const {
if (delegate_.get())
return delegate_->GetNativeView();
diff --git a/content/browser/web_contents/web_contents_view_gtk.h b/content/browser/web_contents/web_contents_view_gtk.h
index 9d3ae6b..3e52372 100644
--- a/content/browser/web_contents/web_contents_view_gtk.h
+++ b/content/browser/web_contents/web_contents_view_gtk.h
@@ -48,7 +48,6 @@ class CONTENT_EXPORT WebContentsViewGtk
virtual void CreateView(const gfx::Size& initial_size) OVERRIDE;
virtual RenderWidgetHostView* CreateViewForWidget(
RenderWidgetHost* render_widget_host) OVERRIDE;
- virtual void SetView(RenderWidgetHostView* view) OVERRIDE;
virtual gfx::NativeView GetNativeView() const OVERRIDE;
virtual gfx::NativeView GetContentNativeView() const OVERRIDE;
virtual gfx::NativeWindow GetTopLevelNativeWindow() const OVERRIDE;
diff --git a/content/browser/web_contents/web_contents_view_guest.cc b/content/browser/web_contents/web_contents_view_guest.cc
index b8a4afd..a732014 100644
--- a/content/browser/web_contents/web_contents_view_guest.cc
+++ b/content/browser/web_contents/web_contents_view_guest.cc
@@ -55,9 +55,6 @@ RenderWidgetHostView* WebContentsViewGuest::CreateViewForWidget(
return view;
}
-void WebContentsViewGuest::SetView(RenderWidgetHostView* view) {
-}
-
gfx::NativeView WebContentsViewGuest::GetNativeView() const {
return NULL;
}
diff --git a/content/browser/web_contents/web_contents_view_guest.h b/content/browser/web_contents/web_contents_view_guest.h
index 08e032f..efc1dff 100644
--- a/content/browser/web_contents/web_contents_view_guest.h
+++ b/content/browser/web_contents/web_contents_view_guest.h
@@ -39,7 +39,6 @@ class CONTENT_EXPORT WebContentsViewGuest
virtual void CreateView(const gfx::Size& initial_size) OVERRIDE;
virtual RenderWidgetHostView* CreateViewForWidget(
RenderWidgetHost* render_widget_host) OVERRIDE;
- virtual void SetView(RenderWidgetHostView* view) OVERRIDE;
virtual gfx::NativeView GetNativeView() const OVERRIDE;
virtual gfx::NativeView GetContentNativeView() const OVERRIDE;
virtual gfx::NativeWindow GetTopLevelNativeWindow() const OVERRIDE;
diff --git a/content/browser/web_contents/web_contents_view_mac.h b/content/browser/web_contents/web_contents_view_mac.h
index ae17873..3403b287 100644
--- a/content/browser/web_contents/web_contents_view_mac.h
+++ b/content/browser/web_contents/web_contents_view_mac.h
@@ -67,7 +67,6 @@ class WebContentsViewMac : public WebContentsView,
virtual void CreateView(const gfx::Size& initial_size) OVERRIDE;
virtual RenderWidgetHostView* CreateViewForWidget(
RenderWidgetHost* render_widget_host) OVERRIDE;
- virtual void SetView(RenderWidgetHostView* view) OVERRIDE;
virtual gfx::NativeView GetNativeView() const OVERRIDE;
virtual gfx::NativeView GetContentNativeView() const OVERRIDE;
virtual gfx::NativeWindow GetTopLevelNativeWindow() const OVERRIDE;
diff --git a/content/browser/web_contents/web_contents_view_mac.mm b/content/browser/web_contents/web_contents_view_mac.mm
index 8d59680..a050f17 100644
--- a/content/browser/web_contents/web_contents_view_mac.mm
+++ b/content/browser/web_contents/web_contents_view_mac.mm
@@ -141,9 +141,6 @@ RenderWidgetHostView* WebContentsViewMac::CreateViewForWidget(
return view;
}
-void WebContentsViewMac::SetView(RenderWidgetHostView* view) {
-}
-
gfx::NativeView WebContentsViewMac::GetNativeView() const {
return cocoa_view_.get();
}
diff --git a/content/browser/web_contents/web_contents_view_win.cc b/content/browser/web_contents/web_contents_view_win.cc
index 667884c..0609285 100644
--- a/content/browser/web_contents/web_contents_view_win.cc
+++ b/content/browser/web_contents/web_contents_view_win.cc
@@ -90,7 +90,6 @@ void AddFilterToParentHwndSubclass(HWND hwnd, ui::HWNDMessageFilter* filter) {
WebContentsViewWin::WebContentsViewWin(WebContentsImpl* web_contents,
WebContentsViewDelegate* delegate)
: web_contents_(web_contents),
- view_(NULL),
delegate_(delegate),
hwnd_message_filter_(new PositionChangedMessageFilter) {
}
@@ -131,16 +130,12 @@ RenderWidgetHostView* WebContentsViewWin::CreateViewForWidget(
return render_widget_host->GetView();
}
- view_ = static_cast<RenderWidgetHostViewWin*>(
+ RenderWidgetHostViewWin* view = static_cast<RenderWidgetHostViewWin*>(
RenderWidgetHostView::CreateViewForWidget(render_widget_host));
- view_->CreateWnd(GetNativeView());
- view_->ShowWindow(SW_SHOW);
- view_->SetSize(initial_size_);
- return view_;
-}
-
-void WebContentsViewWin::SetView(RenderWidgetHostView* view) {
- view_ = static_cast<RenderWidgetHostViewWin*>(view);
+ view->CreateWnd(GetNativeView());
+ view->ShowWindow(SW_SHOW);
+ view->SetSize(initial_size_);
+ return view;
}
gfx::NativeView WebContentsViewWin::GetNativeView() const {
@@ -173,9 +168,6 @@ void WebContentsViewWin::SetPageTitle(const string16& title) {
void WebContentsViewWin::OnTabCrashed(base::TerminationStatus status,
int error_code) {
- // TODO(avi): No other TCV implementation does anything in this callback. Can
- // this be moved elsewhere so that |OnTabCrashed| can be removed everywhere?
- view_ = NULL;
}
void WebContentsViewWin::SizeContents(const gfx::Size& size) {
diff --git a/content/browser/web_contents/web_contents_view_win.h b/content/browser/web_contents/web_contents_view_win.h
index e9a7a7c..8da8882 100644
--- a/content/browser/web_contents/web_contents_view_win.h
+++ b/content/browser/web_contents/web_contents_view_win.h
@@ -20,7 +20,6 @@ class HWNDMessageFilter;
}
namespace content {
-class RenderWidgetHostViewWin;
class WebContentsDragWin;
class WebContentsImpl;
class WebContentsViewDelegate;
@@ -57,7 +56,6 @@ class CONTENT_EXPORT WebContentsViewWin
virtual void CreateView(const gfx::Size& initial_size) OVERRIDE;
virtual RenderWidgetHostView* CreateViewForWidget(
RenderWidgetHost* render_widget_host) OVERRIDE;
- virtual void SetView(RenderWidgetHostView* view) OVERRIDE;
virtual gfx::NativeView GetNativeView() const OVERRIDE;
virtual gfx::NativeView GetContentNativeView() const OVERRIDE;
virtual gfx::NativeWindow GetTopLevelNativeWindow() const OVERRIDE;
@@ -128,8 +126,6 @@ class CONTENT_EXPORT WebContentsViewWin
// The WebContentsImpl whose contents we display.
WebContentsImpl* web_contents_;
- RenderWidgetHostViewWin* view_;
-
scoped_ptr<WebContentsViewDelegate> delegate_;
// The helper object that handles drag destination related interactions with
diff --git a/content/public/browser/web_contents_view.h b/content/public/browser/web_contents_view.h
index 45fe5c3..89ecdf9 100644
--- a/content/public/browser/web_contents_view.h
+++ b/content/public/browser/web_contents_view.h
@@ -37,12 +37,6 @@ class CONTENT_EXPORT WebContentsView {
virtual RenderWidgetHostView* CreateViewForWidget(
RenderWidgetHost* render_widget_host) = 0;
- // This is required because some WebContentsView cache the
- // RenderWidgetHostView created by the above method. In that case, when the
- // view created by the above method is destroyed, the old one needs to be set
- // again.
- virtual void SetView(RenderWidgetHostView* view) = 0;
-
// Returns the native widget that contains the contents of the tab.
virtual gfx::NativeView GetNativeView() const = 0;
diff --git a/content/test/test_web_contents_view.cc b/content/test/test_web_contents_view.cc
index 5b99a1c..0e9febc 100644
--- a/content/test/test_web_contents_view.cc
+++ b/content/test/test_web_contents_view.cc
@@ -50,9 +50,6 @@ RenderWidgetHostView* TestWebContentsView::CreateViewForWidget(
return NULL;
}
-void TestWebContentsView::SetView(RenderWidgetHostView* view) {
-}
-
gfx::NativeView TestWebContentsView::GetNativeView() const {
return gfx::NativeView();
}
diff --git a/content/test/test_web_contents_view.h b/content/test/test_web_contents_view.h
index 0370740..d9e0f8e 100644
--- a/content/test/test_web_contents_view.h
+++ b/content/test/test_web_contents_view.h
@@ -40,7 +40,6 @@ class TestWebContentsView : public WebContentsView,
virtual void CreateView(const gfx::Size& initial_size) OVERRIDE;
virtual RenderWidgetHostView* CreateViewForWidget(
RenderWidgetHost* render_widget_host) OVERRIDE;
- virtual void SetView(RenderWidgetHostView* view) OVERRIDE;
virtual gfx::NativeView GetNativeView() const OVERRIDE;
virtual gfx::NativeView GetContentNativeView() const OVERRIDE;
virtual gfx::NativeWindow GetTopLevelNativeWindow() const OVERRIDE;