| Index: chrome/test/data/extensions/platform_apps/web_view/newwindow/embedder.js
|
| 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 bded587295d7389ff7126b0adfc952c8f4a3dfbd..af310b63d7691de87185b5aad880c4d95910817b 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
|
| @@ -200,21 +200,21 @@ function testNewWindowNameTakesPrecedence() {
|
| webViewName, guestName, partitionName, expectedName);
|
| }
|
|
|
| -function testWebViewNameTakesPrecedence() {
|
| +function testNewWindowWebViewNameTakesPrecedence() {
|
| var webViewName = 'foo';
|
| var guestName = '';
|
| var partitionName = 'persist:foobar';
|
| var expectedName = webViewName;
|
| - testNewWindowName('testWebViewNameTakesPrecedence',
|
| + testNewWindowName('testNewWindowWebViewNameTakesPrecedence',
|
| webViewName, guestName, partitionName, expectedName);
|
| }
|
|
|
| -function testNoName() {
|
| +function testNewWindowNoName() {
|
| var webViewName = '';
|
| var guestName = '';
|
| var partitionName = '';
|
| var expectedName = '';
|
| - testNewWindowName('testNoName',
|
| + testNewWindowName('testNewWindowNoName',
|
| webViewName, guestName, partitionName, expectedName);
|
| }
|
|
|
| @@ -235,6 +235,34 @@ function testNewWindowRedirect() {
|
| webViewName, guestName, partitionName, expectedName);
|
| }
|
|
|
| +// Tests that we fail gracefully if we try to attach() a <webview> on a
|
| +// newwindow event after the opener has been destroyed.
|
| +function testNewWindowAttachAfterOpenerDestroyed() {
|
| + var testName = 'testNewWindowAttachAfterOpenerDestroyed';
|
| + var webview = embedder.setUpGuest_('foobar');
|
| +
|
| + var onNewWindow = function(e) {
|
| + embedder.assertCorrectEvent_(e, '');
|
| +
|
| + // Remove the opener.
|
| + webview.parentNode.removeChild(webview);
|
| + // Pass in a timeout so we ensure the newwindow disposal codepath
|
| + // works properly.
|
| + window.setTimeout(function() {
|
| + // At this point the opener <webview> is gone.
|
| + // Trying to discard() will fail silently.
|
| + e.window.attach(document.createElement('webview'));
|
| + window.setTimeout(function() { embedder.test.succeed(); }, 0);
|
| + }, 0);
|
| +
|
| + e.preventDefault();
|
| + };
|
| + webview.addEventListener('newwindow', onNewWindow);
|
| +
|
| + // Load a new window with the given name.
|
| + embedder.setUpNewWindowRequest_(webview, 'guest.html', '', testName);
|
| +}
|
| +
|
| function testNewWindowClose() {
|
| var testName = 'testNewWindowClose';
|
| var webview = embedder.setUpGuest_('foobar');
|
| @@ -291,7 +319,35 @@ function testNewWindowDeferredAttachment() {
|
|
|
| // Load a new window with the given name.
|
| embedder.setUpNewWindowRequest_(webview, 'guest.html', '', testName);
|
| -};
|
| +}
|
| +
|
| +// Tests that we fail gracefully if we try to discard() a <webview> on a
|
| +// newwindow event after the opener has been destroyed.
|
| +function testNewWindowDiscardAfterOpenerDestroyed() {
|
| + var testName = 'testNewWindowDiscardAfterOpenerDestroyed';
|
| + var webview = embedder.setUpGuest_('foobar');
|
| +
|
| + var onNewWindow = function(e) {
|
| + embedder.assertCorrectEvent_(e, '');
|
| +
|
| + // Remove the opener.
|
| + webview.parentNode.removeChild(webview);
|
| + // Pass in a timeout so we ensure the newwindow disposal codepath
|
| + // works properly.
|
| + window.setTimeout(function() {
|
| + // At this point the opener <webview> is gone.
|
| + // Trying to discard() will fail silently.
|
| + e.window.discard();
|
| + window.setTimeout(function() { embedder.test.succeed(); }, 0);
|
| + }, 0);
|
| +
|
| + e.preventDefault();
|
| + };
|
| + webview.addEventListener('newwindow', onNewWindow);
|
| +
|
| + // Load a new window with the given name.
|
| + embedder.setUpNewWindowRequest_(webview, 'guest.html', '', testName);
|
| +}
|
|
|
| function testNewWindowExecuteScript() {
|
| var testName = 'testNewWindowExecuteScript';
|
| @@ -333,6 +389,30 @@ function testNewWindowOpenInNewTab() {
|
| webview.src = embedder.guestWithLinkURL;
|
| }
|
|
|
| +// Tests that if opener <webview> is gone with unattached guest, we
|
| +// don't see any error.
|
| +// This test also makes sure we destroy the unattached guests properly.
|
| +function testNewWindowOpenerDestroyedWhileUnattached() {
|
| + var testName = 'testNewWindowOpenerDestroyedBeforeAttach';
|
| + var webview = embedder.setUpGuest_('foobar');
|
| +
|
| + var onNewWindow = function(e) {
|
| + embedder.assertCorrectEvent_(e, '');
|
| +
|
| + // Remove the opener.
|
| + webview.parentNode.removeChild(webview);
|
| + // Pass in a timeout so we ensure the newwindow disposal codepath
|
| + // works properly.
|
| + window.setTimeout(function() { embedder.test.succeed(); }, 0);
|
| +
|
| + e.preventDefault();
|
| + };
|
| + webview.addEventListener('newwindow', onNewWindow);
|
| +
|
| + // Load a new window with the given name.
|
| + embedder.setUpNewWindowRequest_(webview, 'guest.html', '', testName);
|
| +}
|
| +
|
| function testNewWindowWebRequest() {
|
| var testName = 'testNewWindowWebRequest';
|
| var webview = embedder.setUpGuest_('foobar');
|
| @@ -491,18 +571,25 @@ function testNewWindowWebRequestRemoveElement() {
|
| }
|
|
|
| embedder.test.testList = {
|
| - 'testNewWindowNameTakesPrecedence': testNewWindowNameTakesPrecedence,
|
| - 'testWebViewNameTakesPrecedence': testWebViewNameTakesPrecedence,
|
| - 'testNoName': testNoName,
|
| - 'testNewWindowRedirect': testNewWindowRedirect,
|
| + 'testNewWindowAttachAfterOpenerDestroyed':
|
| + testNewWindowAttachAfterOpenerDestroyed,
|
| 'testNewWindowClose': testNewWindowClose,
|
| + 'testNewWindowDeclarativeWebRequest': testNewWindowDeclarativeWebRequest,
|
| 'testNewWindowDeferredAttachment': testNewWindowDeferredAttachment,
|
| + 'testNewWindowDiscardAfterOpenerDestroyed':
|
| + testNewWindowDiscardAfterOpenerDestroyed,
|
| 'testNewWindowExecuteScript': testNewWindowExecuteScript,
|
| + 'testNewWindowNameTakesPrecedence': testNewWindowNameTakesPrecedence,
|
| + 'testNewWindowNoName': testNewWindowNoName,
|
| 'testNewWindowOpenInNewTab': testNewWindowOpenInNewTab,
|
| - 'testNewWindowDeclarativeWebRequest': testNewWindowDeclarativeWebRequest,
|
| + 'testNewWindowOpenerDestroyedWhileUnattached':
|
| + testNewWindowOpenerDestroyedWhileUnattached,
|
| + 'testNewWindowRedirect': testNewWindowRedirect,
|
| 'testNewWindowWebRequest': testNewWindowWebRequest,
|
| 'testNewWindowWebRequestCloseWindow': testNewWindowWebRequestCloseWindow,
|
| - 'testNewWindowWebRequestRemoveElement': testNewWindowWebRequestRemoveElement
|
| + 'testNewWindowWebRequestRemoveElement': testNewWindowWebRequestRemoveElement,
|
| + 'testNewWindowWebViewNameTakesPrecedence':
|
| + testNewWindowWebViewNameTakesPrecedence
|
| };
|
|
|
| onload = function() {
|
|
|