diff options
author | lazyboy@chromium.org <lazyboy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-27 00:02:07 +0000 |
---|---|---|
committer | lazyboy@chromium.org <lazyboy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-27 00:02:07 +0000 |
commit | 99b96f34f59e23b1d298d096a6e87119609f93a8 (patch) | |
tree | 9f6e8a77a6f900db3e29f82855ad192c2effe1b2 /content | |
parent | a07fb6d62e5762df82304256e0fc712c10a55498 (diff) | |
download | chromium_src-99b96f34f59e23b1d298d096a6e87119609f93a8.zip chromium_src-99b96f34f59e23b1d298d096a6e87119609f93a8.tar.gz chromium_src-99b96f34f59e23b1d298d096a6e87119609f93a8.tar.bz2 |
Browser plugin: fix win aura tear down crash, skip calling
ChildWindow->UpdateConstrainedWindow() from WCVAura after the web_contents_ has
been destroyed.
BUG=178169,177222
TEST=Added test for teardown, enabled couple of tests back in
WebViewTest and BrowserPluginHostTest.
Review URL: https://chromiumcodereview.appspot.com/12334075
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@184781 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/browser_plugin/browser_plugin_host_browsertest.cc | 21 | ||||
-rw-r--r-- | content/browser/web_contents/web_contents_view_aura.cc | 17 |
2 files changed, 17 insertions, 21 deletions
diff --git a/content/browser/browser_plugin/browser_plugin_host_browsertest.cc b/content/browser/browser_plugin/browser_plugin_host_browsertest.cc index b781d52..5b2f2cb 100644 --- a/content/browser/browser_plugin/browser_plugin_host_browsertest.cc +++ b/content/browser/browser_plugin/browser_plugin_host_browsertest.cc @@ -488,17 +488,8 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, EmbedderChangedAfterSwap) { EmbedderChangedAfterSwapTestHelper(); } -// TODO(lazyboy): Make this test pass on win aura trybots: -// http://crbug.com/177222. -#if defined(OS_WIN) && defined(USE_AURA) -#define MAYBE_EmbedderChangedAfterSwap_UseGuestViews \ - DISABLED_EmbedderChangedAfterSwap_UseGuestViews -#else -#define MAYBE_EmbedderChangedAfterSwap_UseGuestViews \ - EmbedderChangedAfterSwap_UseGuestViews -#endif IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, - MAYBE_EmbedderChangedAfterSwap_UseGuestViews) { + EmbedderChangedAfterSwap_UseGuestViews) { // kEnableBrowserPluginGuestViews is turned on for this test. EmbedderChangedAfterSwapTestHelper(); } @@ -738,15 +729,7 @@ IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, ReloadEmbedder) { ReloadEmbedderTestHelper(); } -// TODO(lazyboy): Make this test pass on win aura trybots: -// http://crbug.com/177222. -#if defined(OS_WIN) && defined(USE_AURA) -#define MAYBE_ReloadEmbedder_UseGuestViews DISABLED_ReloadEmbedder_UseGuestViews -#else -#define MAYBE_ReloadEmbedder_UseGuestViews ReloadEmbedder_UseGuestViews -#endif -IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, - MAYBE_ReloadEmbedder_UseGuestViews) { +IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, ReloadEmbedder_UseGuestViews) { // kEnableBrowserPluginGuestViews is turned on for this test. ReloadEmbedderTestHelper(); } diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc index 228d6c6..8038678 100644 --- a/content/browser/web_contents/web_contents_view_aura.cc +++ b/content/browser/web_contents/web_contents_view_aura.cc @@ -24,6 +24,7 @@ #include "content/public/browser/render_widget_host.h" #include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/web_contents_delegate.h" +#include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_view_delegate.h" #include "content/public/browser/web_drag_dest_delegate.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" @@ -778,10 +779,13 @@ class WebContentsViewAura::WindowObserver // Constrained windows are added as children of the WebContent's view which may // overlap with windowed NPAPI plugins. In that case, tell the RWHV so that it // can update the plugins' cutout rects accordingly. -class WebContentsViewAura::ChildWindowObserver : public aura::WindowObserver { +class WebContentsViewAura::ChildWindowObserver : public aura::WindowObserver, + public WebContentsObserver { public: explicit ChildWindowObserver(WebContentsViewAura* view) - : view_(view) { + : WebContentsObserver(view->web_contents_), + view_(view), + web_contents_destroyed_(false) { view_->window_->AddObserver(this); } @@ -822,11 +826,19 @@ class WebContentsViewAura::ChildWindowObserver : public aura::WindowObserver { } } + // Overridden from WebContentsObserver: + virtual void WebContentsDestroyed(WebContents* web_contents) OVERRIDE { + web_contents_destroyed_ = true; + } + private: void UpdateConstrainedWindows(aura::Window* exclude) { if (RenderViewHostFactory::has_factory()) return; // Can't cast to RenderWidgetHostViewAura in unit tests. + if (web_contents_destroyed_) + return; + RenderWidgetHostViewAura* view = static_cast<RenderWidgetHostViewAura*>( view_->web_contents_->GetRenderWidgetHostView()); if (!view) @@ -843,6 +855,7 @@ class WebContentsViewAura::ChildWindowObserver : public aura::WindowObserver { } WebContentsViewAura* view_; + bool web_contents_destroyed_; DISALLOW_COPY_AND_ASSIGN(ChildWindowObserver); }; |