1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
<!DOCTYPE HTML>
<html>
<head>
<title>Test Storage API </title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
<script type="text/javascript" src="head.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<script type="text/javascript">
"use strict";
add_task(async function setup() {
await SpecialPowers.pushPrefEnv({
"set": [
["dom.storageManager.enabled", true],
["dom.storageManager.prompt.testing", true],
["dom.storageManager.prompt.testing.allow", true],
],
});
});
add_task(async function test_backgroundScript() {
function background() {
browser.test.assertTrue(navigator.storage !== undefined, "Has storage api interface");
// Test estimate.
browser.test.assertTrue("estimate" in navigator.storage, "Has estimate function");
browser.test.assertEq("function", typeof navigator.storage.estimate, "estimate is function");
browser.test.assertTrue(navigator.storage.estimate() instanceof Promise, "estimate returns a promise");
return browser.test.notifyPass("navigation_storage_api.done");
}
let extension = ExtensionTestUtils.loadExtension({
background,
});
await extension.startup();
await extension.awaitFinish("navigation_storage_api.done");
await extension.unload();
});
add_task(async function test_contentScript() {
await SpecialPowers.pushPrefEnv({
set: [["dom.security.https_first", false]],
});
function contentScript() {
// Should not access storage api in non-secure context.
browser.test.assertEq(undefined, navigator.storage,
"A page from the unsecure http protocol " +
"doesn't have access to the navigator.storage API");
return browser.test.notifyPass("navigation_storage_api.done");
}
let extension = ExtensionTestUtils.loadExtension({
manifest: {
content_scripts: [{
"matches": ["http://example.com/*/file_sample.html"],
"js": ["content_script.js"],
}],
},
files: {
"content_script.js": `(${contentScript})()`,
},
});
await extension.startup();
// Open an explicit URL for testing Storage API in an insecure context.
let win = window.open("http://example.com/tests/toolkit/components/extensions/test/mochitest/file_sample.html");
await extension.awaitFinish("navigation_storage_api.done");
await extension.unload();
win.close();
});
add_task(async function test_contentScriptSecure() {
function contentScript() {
browser.test.assertTrue(navigator.storage !== undefined, "Has storage api interface");
// Test estimate.
browser.test.assertTrue("estimate" in navigator.storage, "Has estimate function");
browser.test.assertEq("function", typeof navigator.storage.estimate, "estimate is function");
// The promise that estimate function returns belongs to the content page,
// but the Promise constructor belongs to the content script sandbox.
// Check window.Promise here.
browser.test.assertTrue(navigator.storage.estimate() instanceof window.Promise, "estimate returns a promise");
return browser.test.notifyPass("navigation_storage_api.done");
}
let extension = ExtensionTestUtils.loadExtension({
manifest: {
content_scripts: [{
"matches": ["https://example.com/*/file_sample.html"],
"js": ["content_script.js"],
}],
},
files: {
"content_script.js": `(${contentScript})()`,
},
});
await extension.startup();
// Open an explicit URL for testing Storage API in a secure context.
let win = window.open("file_sample.html");
await extension.awaitFinish("navigation_storage_api.done");
await extension.unload();
win.close();
});
add_task(async function cleanup() {
await SpecialPowers.popPrefEnv();
});
</script>
</body>
</html>
|