summaryrefslogtreecommitdiffstats
path: root/chrome/test
diff options
context:
space:
mode:
authorfsamuel@chromium.org <fsamuel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-29 05:12:27 +0000
committerfsamuel@chromium.org <fsamuel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-29 05:12:27 +0000
commit39d9079cd60c57db7c588256c244b7d08361dc03 (patch)
tree697b1f785a68f2a1fc8ba1a818196f602a5f656f /chrome/test
parente5c3e06752cbc44a66a4c3ff08d86eeded1ed666 (diff)
downloadchromium_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.js77
-rw-r--r--chrome/test/data/extensions/platform_apps/web_view/newwindow/newwindow.html10
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>