| Index: extensions/test/data/web_view/apitest/main.js
|
| diff --git a/extensions/test/data/web_view/apitest/main.js b/extensions/test/data/web_view/apitest/main.js
|
| index b6c734f6c3bc6e5266b33e6f7fc69a0a84ed9165..2489bbf45c0c6d2df8c7f09c13c8a4c718ea48c0 100644
|
| --- a/extensions/test/data/web_view/apitest/main.js
|
| +++ b/extensions/test/data/web_view/apitest/main.js
|
| @@ -19,6 +19,8 @@ embedder.setUp_ = function(config) {
|
| embedder.redirectGuestURLDest =
|
| embedder.baseGuestURL + '/guest_redirect.html';
|
| embedder.windowOpenGuestURL = embedder.baseGuestURL + '/guest.html';
|
| + embedder.windowOpenGuestDataURL =
|
| + embedder.baseGuestURL + '/guest_data_url.html';
|
| embedder.sameDocumentNavigationURL =
|
| embedder.baseGuestURL + '/guest_same_document_navigation.html';
|
| };
|
| @@ -1133,6 +1135,48 @@ function testNavigationToExternalProtocol() {
|
| document.body.appendChild(webview);
|
| }
|
|
|
| +// This test verifies that redirecting a webview to a data URL is blocked.
|
| +function testRedirectToDataUrlBlocked() {
|
| + var webview = document.createElement('webview');
|
| + webview.addEventListener('consolemessage', function(e) {
|
| + window.console.log('consolemessage: ' + e.message);
|
| + if (e.message.startsWith(
|
| + 'Not allowed to top-level navigate to resource:')) {
|
| + embedder.test.succeed();
|
| + }
|
| + });
|
| + webview.addEventListener('loadstop', function(e) {
|
| + if (webview.getAttribute('src').startsWith("data:"))
|
| + embedder.test.fail();
|
| + });
|
| + webview.setAttribute('src', embedder.windowOpenGuestDataURL);
|
| + document.body.appendChild(webview);
|
| +}
|
| +
|
| +// This test verifies that redirecting a webview to a data URL is allowed if the
|
| +// current URL is already a data URL.
|
| +function testRedirectToDataUrlFromDataUrlAllowed() {
|
| + var webview = document.createElement('webview');
|
| + webview.addEventListener('loadstop', function(e) {
|
| + if (webview.getAttribute('src').startsWith("data:text/html")) {
|
| + webview.executeScript({
|
| + code: 'window.location.href = "data:text/plain, success";'
|
| + }, function(results) {});
|
| + } else if (webview.getAttribute('src').startsWith("data:text/plain")) {
|
| + embedder.test.succeed();
|
| + }
|
| + });
|
| + webview.addEventListener('consolemessage', function(e) {
|
| + window.console.log('consolemessage: ' + e.message);
|
| + if (e.message.startsWith(
|
| + 'Not allowed to top-level navigate to resource:')) {
|
| + embedder.test.fail();
|
| + }
|
| + });
|
| + webview.setAttribute('src', 'data:text/html,navigate to another data url');
|
| + document.body.appendChild(webview);
|
| +}
|
| +
|
| // This test ensures if the guest isn't there and we resize the guest (from JS),
|
| // it remembers the size correctly.
|
| function testNavigateAfterResize() {
|
| @@ -1229,6 +1273,12 @@ function testNavOnSrcAttributeChange() {
|
| }
|
|
|
| // This test verifies that new window attachment functions as expected.
|
| +//
|
| +// TODO(crbug.com/594215) Test that opening a new window with a data URL is
|
| +// blocked. There is currently no way to test this, as the block message is
|
| +// printed on the new window which never gets created, so the message is lost.
|
| +// Also test that opening a new window with a data URL when the webview is
|
| +// already on a data URL is allowed.
|
| function testNewWindow() {
|
| var webview = document.createElement('webview');
|
| webview.addEventListener('newwindow', function(e) {
|
| @@ -1785,6 +1835,9 @@ embedder.test.testList = {
|
| 'testLoadStartLoadRedirect': testLoadStartLoadRedirect,
|
| 'testNavigateAfterResize': testNavigateAfterResize,
|
| 'testNavigationToExternalProtocol': testNavigationToExternalProtocol,
|
| + 'testRedirectToDataUrlBlocked': testRedirectToDataUrlBlocked,
|
| + 'testRedirectToDataUrlFromDataUrlAllowed':
|
| + testRedirectToDataUrlFromDataUrlAllowed,
|
| 'testNavOnConsecutiveSrcAttributeChanges':
|
| testNavOnConsecutiveSrcAttributeChanges,
|
| 'testNavOnSrcAttributeChange': testNavOnSrcAttributeChange,
|
|
|