diff options
-rw-r--r-- | chrome/browser/apps/web_view_browsertest.cc | 6 | ||||
-rw-r--r-- | chrome/test/data/extensions/platform_apps/web_view/shim/main.js | 35 | ||||
-rw-r--r-- | content/browser/browser_plugin/browser_plugin_guest.cc | 10 |
3 files changed, 46 insertions, 5 deletions
diff --git a/chrome/browser/apps/web_view_browsertest.cc b/chrome/browser/apps/web_view_browsertest.cc index dc079df..314783f 100644 --- a/chrome/browser/apps/web_view_browsertest.cc +++ b/chrome/browser/apps/web_view_browsertest.cc @@ -1193,7 +1193,11 @@ IN_PROC_BROWSER_TEST_F(WebViewTest, Shim_TestLoadAbortNonWebSafeScheme) { } IN_PROC_BROWSER_TEST_F(WebViewTest, Shim_TestReload) { - TestHelper("testReload", "web_view/shim", NEEDS_TEST_SERVER); + TestHelper("testReload", "web_view/shim", NO_TEST_SERVER); +} + +IN_PROC_BROWSER_TEST_F(WebViewTest, Shim_TestReloadAfterTerminate) { + TestHelper("testReloadAfterTerminate", "web_view/shim", NO_TEST_SERVER); } IN_PROC_BROWSER_TEST_F(WebViewTest, Shim_TestGetProcessId) { diff --git a/chrome/test/data/extensions/platform_apps/web_view/shim/main.js b/chrome/test/data/extensions/platform_apps/web_view/shim/main.js index b0487a90..d6688bc 100644 --- a/chrome/test/data/extensions/platform_apps/web_view/shim/main.js +++ b/chrome/test/data/extensions/platform_apps/web_view/shim/main.js @@ -1367,6 +1367,40 @@ function testReload() { document.body.appendChild(webview); } +// This test verifies that the reload method on webview functions as expected. +function testReloadAfterTerminate() { + var triggerNavUrl = 'data:text/html,trigger navigation'; + var webview = document.createElement('webview'); + + var step = 1; + webview.addEventListener('loadstop', function(e) { + switch (step) { + case 1: + webview.terminate(); + break; + case 2: + setTimeout(function() { embedder.test.succeed(); }, 0); + break; + default: + window.console.log('Unexpected loadstop event, step = ' + step); + embedder.test.fail(); + break; + } + ++step; + }); + + webview.addEventListener('exit', function(e) { + // Trigger a focus state change of the guest to test for + // http://crbug.com/413874. + webview.blur(); + webview.focus(); + setTimeout(function() { webview.reload(); }, 0); + }); + + webview.src = triggerNavUrl; + document.body.appendChild(webview); +} + // This test verifies that a <webview> is torn down gracefully when removed from // the DOM on exit. @@ -1834,6 +1868,7 @@ embedder.test.testList = { 'testNavigateAfterResize': testNavigateAfterResize, 'testNavigationToExternalProtocol': testNavigationToExternalProtocol, 'testReload': testReload, + 'testReloadAfterTerminate': testReloadAfterTerminate, 'testRemoveWebviewOnExit': testRemoveWebviewOnExit, 'testRemoveWebviewAfterNavigation': testRemoveWebviewAfterNavigation, 'testResizeWebviewResizesContent': testResizeWebviewResizesContent, diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc index 569c9de..847eff8 100644 --- a/content/browser/browser_plugin/browser_plugin_guest.cc +++ b/content/browser/browser_plugin/browser_plugin_guest.cc @@ -109,13 +109,16 @@ base::WeakPtr<BrowserPluginGuest> BrowserPluginGuest::AsWeakPtr() { void BrowserPluginGuest::SetFocus(RenderWidgetHost* rwh, bool focused) { focused_ = focused; + if (!rwh) + return; + rwh->Send(new InputMsg_SetFocus(rwh->GetRoutingID(), focused)); if (!focused && mouse_locked_) OnUnlockMouse(); // Restore the last seen state of text input to the view. RenderWidgetHostViewBase* rwhv = static_cast<RenderWidgetHostViewBase*>( - web_contents()->GetRenderWidgetHostView()); + rwh->GetView()); if (rwhv) { ViewHostMsg_TextInputState_Params params; params.type = last_text_input_type_; @@ -718,9 +721,8 @@ void BrowserPluginGuest::OnResizeGuest( void BrowserPluginGuest::OnSetFocus(int browser_plugin_instance_id, bool focused) { - - RenderWidgetHost* rwh = web_contents()->GetRenderWidgetHostView()-> - GetRenderWidgetHost(); + RenderWidgetHostView* rwhv = web_contents()->GetRenderWidgetHostView(); + RenderWidgetHost* rwh = rwhv ? rwhv->GetRenderWidgetHost() : NULL; SetFocus(rwh, focused); } |