diff options
author | fsamuel@chromium.org <fsamuel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-29 05:12:27 +0000 |
---|---|---|
committer | fsamuel@chromium.org <fsamuel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-29 05:12:27 +0000 |
commit | 39d9079cd60c57db7c588256c244b7d08361dc03 (patch) | |
tree | 697b1f785a68f2a1fc8ba1a818196f602a5f656f /chrome/test | |
parent | e5c3e06752cbc44a66a4c3ff08d86eeded1ed666 (diff) | |
download | chromium_src-39d9079cd60c57db7c588256c244b7d08361dc03.zip chromium_src-39d9079cd60c57db7c588256c244b7d08361dc03.tar.gz chromium_src-39d9079cd60c57db7c588256c244b7d08361dc03.tar.bz2 |
<webview>: Removing a <webview> should not remove all WebRequest event listeners
Only WebRequest event listeners on the <webview> being destroyed should lose its
listeners in the browser process.
Add a routing ID parameter to
ExtensionWebRequestEventRouter::RemoveWebViewEventListeners so that it only
removes the webrequest event listeners of the WebContents being destroyed.
BUG=280468
Test=WebViewInteractiveTest.NewWindow_WebRequestRemoveElement
Review URL: https://chromiumcodereview.appspot.com/23640008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@220209 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test')
-rw-r--r-- | chrome/test/data/extensions/platform_apps/web_view/newwindow/embedder.js | 77 | ||||
-rw-r--r-- | chrome/test/data/extensions/platform_apps/web_view/newwindow/newwindow.html | 10 |
2 files changed, 70 insertions, 17 deletions
diff --git a/chrome/test/data/extensions/platform_apps/web_view/newwindow/embedder.js b/chrome/test/data/extensions/platform_apps/web_view/newwindow/embedder.js index ce32602..7a5fb27 100644 --- a/chrome/test/data/extensions/platform_apps/web_view/newwindow/embedder.js +++ b/chrome/test/data/extensions/platform_apps/web_view/newwindow/embedder.js @@ -279,33 +279,74 @@ function testNewWindowExecuteScript() { }; function testNewWindowWebRequest() { - var testName = 'testNewWindowExecuteScript'; + var testName = 'testNewWindowWebRequest'; var webview = embedder.setUpGuest_('foobar'); var onNewWindow = function(e) { chrome.test.log('Embedder notified on newwindow'); embedder.assertCorrectEvent_(e, ''); - var newwebview = document.createElement('webview'); - document.querySelector('#webview-tag-container').appendChild(newwebview); + var newwebview = new WebView(); var calledWebRequestEvent = false; + newwebview.request.onBeforeRequest.addListener(function(e) { + if (!calledWebRequestEvent) { + calledWebRequestEvent = true; + embedder.test.succeed(); + } + }, {urls: ['<all_urls>']}); + document.querySelector('#webview-tag-container').appendChild(newwebview); e.preventDefault(); - // The WebRequest API is not exposed until the <webview> MutationObserver - // picks up the <webview> in the DOM. Thus, we cannot immediately access - // WebRequest API. - window.setTimeout(function() { - newwebview.onBeforeRequest.addListener(function(e) { + try { + e.window.attach(newwebview); + } catch (e) { + embedder.test.fail(); + } + }; + webview.addEventListener('newwindow', onNewWindow); + + // Load a new window with the given name. + embedder.setUpNewWindowRequest_(webview, 'guest.html', '', testName); +}; + +function testNewWindowWebRequestRemoveElement() { + var testName = 'testNewWindowWebRequestRemoveElement'; + var dataUrl = 'data:text/html,<body>foobar</body>'; + var webview = embedder.setUpGuest_('foobar'); + var calledWebRequestEvent = false; + webview.request.onBeforeRequest.addListener(function(e) { + if (e.url == embedder.guestURL && calledWebRequestEvent) { + embedder.test.succeed(); + } + }, {urls: ['<all_urls>']}); + + var onNewWindow = function(e) { + chrome.test.log('Embedder notified on newwindow'); + embedder.assertCorrectEvent_(e, ''); + + e.preventDefault(); + chrome.app.window.create('newwindow.html', { + width: 640, + height: 480 + }, function(newwindow) { + newwindow.contentWindow.onload = function(evt) { + var newwebview = + newwindow.contentWindow.document.querySelector('webview'); + newwebview.request.onBeforeRequest.addListener(function(e) { if (!calledWebRequestEvent) { calledWebRequestEvent = true; - embedder.test.succeed(); + newwebview.parentElement.removeChild(newwebview); + setTimeout(function() { + webview.src = embedder.guestURL; + }, 0); } - }, { urls: ['<all_urls>'] }, ['blocking']); - try { - e.window.attach(newwebview); - } catch (e) { - embedder.test.fail(); - } - }, 0); + }, {urls: ['<all_urls>']}); + try { + e.window.attach(newwebview); + } catch (e) { + embedder.test.fail(); + } + }; + }); }; webview.addEventListener('newwindow', onNewWindow); @@ -313,6 +354,7 @@ function testNewWindowWebRequest() { embedder.setUpNewWindowRequest_(webview, 'guest.html', '', testName); }; + embedder.test.testList = { 'testNewWindowNameTakesPrecedence': testNewWindowNameTakesPrecedence, 'testWebViewNameTakesPrecedence': testWebViewNameTakesPrecedence, @@ -320,7 +362,8 @@ embedder.test.testList = { 'testNewWindowRedirect': testNewWindowRedirect, 'testNewWindowClose': testNewWindowClose, 'testNewWindowExecuteScript': testNewWindowExecuteScript, - 'testNewWindowWebRequest': testNewWindowWebRequest + 'testNewWindowWebRequest': testNewWindowWebRequest, + 'testNewWindowWebRequestRemoveElement': testNewWindowWebRequestRemoveElement }; onload = function() { diff --git a/chrome/test/data/extensions/platform_apps/web_view/newwindow/newwindow.html b/chrome/test/data/extensions/platform_apps/web_view/newwindow/newwindow.html new file mode 100644 index 0000000..5c6b9de --- /dev/null +++ b/chrome/test/data/extensions/platform_apps/web_view/newwindow/newwindow.html @@ -0,0 +1,10 @@ +<!-- + * Copyright 2013 The Chromium Authors. All rights reserved. Use of this + * source code is governed by a BSD-style license that can be found in the + * LICENSE file. +--> +<html> +<body> + <webview></webview> +</body> +</html> |