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 16c713998d598a177b89fe220979f74c72e41e18..176b70d2543a742e761cf4548e51e312ca774e62 100644 |
--- a/extensions/test/data/web_view/apitest/main.js |
+++ b/extensions/test/data/web_view/apitest/main.js |
@@ -537,6 +537,111 @@ function testExecuteScriptFail() { |
} |
} |
+// This test verifies that the loadabort event fires when loading a webview |
+// accessible resource from a partition that is not privileged. |
+function testLoadAbortChromeExtensionURLWrongPartition() { |
+ var localResource = chrome.runtime.getURL('guest.html'); |
+ var webview = document.createElement('webview'); |
+ webview.addEventListener('loadabort', function(e) { |
+ embedder.test.assertEq('ERR_ADDRESS_UNREACHABLE', e.reason); |
+ embedder.test.succeed(); |
+ }); |
+ webview.addEventListener('loadstop', function(e) { |
+ embedder.test.fail(); |
+ }); |
+ webview.setAttribute('src', localResource); |
+ document.body.appendChild(webview); |
+} |
+ |
+// This test verifies that the loadabort event fires as expected when an illegal |
+// chrome URL is provided. |
+function testLoadAbortIllegalChromeURL() { |
+ var webview = document.createElement('webview'); |
+ var onFirstLoadStop = function(e) { |
+ webview.removeEventListener('loadstop', onFirstLoadStop); |
+ webview.setAttribute('src', 'chrome://newtab'); |
+ }; |
+ webview.addEventListener('loadstop', onFirstLoadStop); |
+ webview.addEventListener('loadabort', function(e) { |
+ embedder.test.assertEq('ERR_ABORTED', e.reason); |
+ embedder.test.succeed(); |
+ }); |
+ webview.setAttribute('src', 'about:blank'); |
+ document.body.appendChild(webview); |
+} |
+ |
+function testLoadAbortIllegalFileURL() { |
+ var webview = document.createElement('webview'); |
+ webview.addEventListener('loadabort', function(e) { |
+ embedder.test.assertEq('ERR_ABORTED', e.reason); |
+ embedder.test.succeed(); |
+ }); |
+ webview.setAttribute('src', 'file://foo'); |
+ document.body.appendChild(webview); |
+} |
+ |
+function testLoadAbortIllegalJavaScriptURL() { |
+ var webview = document.createElement('webview'); |
+ webview.addEventListener('loadabort', function(e) { |
+ embedder.test.assertEq('ERR_ABORTED', e.reason); |
+ embedder.test.succeed(); |
+ }); |
+ webview.setAttribute('src', 'javascript:void(document.bgColor="#0000FF")'); |
+ document.body.appendChild(webview); |
+} |
+ |
+// Verifies that navigating to invalid URL (e.g. 'http:') doesn't cause a crash. |
+function testLoadAbortInvalidNavigation() { |
+ var webview = document.createElement('webview'); |
+ var validSchemeWithEmptyURL = 'http:'; |
+ webview.addEventListener('loadabort', function(e) { |
+ embedder.test.assertEq('ERR_ABORTED', e.reason); |
+ embedder.test.assertEq('', e.url); |
+ embedder.test.succeed(); |
+ }); |
+ webview.addEventListener('exit', function(e) { |
+ // We should not crash. |
+ embedder.test.fail(); |
+ }); |
+ webview.setAttribute('src', validSchemeWithEmptyURL); |
+ document.body.appendChild(webview); |
+} |
+ |
+// Verifies that navigation to a URL that is valid but not web-safe or |
+// pseudo-scheme fires loadabort and doesn't cause a crash. |
+function testLoadAbortNonWebSafeScheme() { |
+ var webview = document.createElement('webview'); |
+ var chromeGuestURL = 'chrome-guest://abc123'; |
+ webview.addEventListener('loadabort', function(e) { |
+ embedder.test.assertEq('ERR_ABORTED', e.reason); |
+ embedder.test.assertEq('chrome-guest://abc123/', e.url); |
+ embedder.test.succeed(); |
+ }); |
+ webview.addEventListener('exit', function(e) { |
+ // We should not crash. |
+ embedder.test.fail(); |
+ }); |
+ webview.setAttribute('src', chromeGuestURL); |
+ document.body.appendChild(webview); |
+}; |
+ |
+// Tests that the 'loadprogress' event is triggered correctly. |
+function testLoadProgressEvent() { |
+ var webview = document.createElement('webview'); |
+ var progress = 0; |
+ |
+ webview.addEventListener('loadstop', function(evt) { |
+ embedder.test.assertEq(1, progress); |
+ embedder.test.succeed(); |
+ }); |
+ |
+ webview.addEventListener('loadprogress', function(evt) { |
+ progress = evt.progress; |
+ }); |
+ |
+ webview.setAttribute('src', 'data:text/html,trigger navigation'); |
+ document.body.appendChild(webview); |
+} |
// Tests end. |
@@ -556,7 +661,15 @@ embedder.test.testList = { |
'testDisplayNoneWebviewLoad': testDisplayNoneWebviewLoad, |
'testDisplayNoneWebviewRemoveChild': testDisplayNoneWebviewRemoveChild, |
'testExecuteScript': testExecuteScript, |
- 'testExecuteScriptFail': testExecuteScriptFail |
+ 'testExecuteScriptFail': testExecuteScriptFail, |
+ 'testLoadAbortChromeExtensionURLWrongPartition': |
+ testLoadAbortChromeExtensionURLWrongPartition, |
+ 'testLoadAbortIllegalChromeURL': testLoadAbortIllegalChromeURL, |
+ 'testLoadAbortIllegalFileURL': testLoadAbortIllegalFileURL, |
+ 'testLoadAbortIllegalJavaScriptURL': testLoadAbortIllegalJavaScriptURL, |
+ 'testLoadAbortInvalidNavigation': testLoadAbortInvalidNavigation, |
+ 'testLoadAbortNonWebSafeScheme': testLoadAbortNonWebSafeScheme, |
+ 'testLoadProgressEvent': testLoadProgressEvent |
}; |
onload = function() { |