diff options
Diffstat (limited to 'dom/indexedDB/test/file_app_isolation.js')
-rw-r--r-- | dom/indexedDB/test/file_app_isolation.js | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/dom/indexedDB/test/file_app_isolation.js b/dom/indexedDB/test/file_app_isolation.js new file mode 100644 index 000000000..d6ed3fab4 --- /dev/null +++ b/dom/indexedDB/test/file_app_isolation.js @@ -0,0 +1,161 @@ +SimpleTest.waitForExplicitFinish(); + +var fileTestOnCurrentOrigin = (location.protocol + '//' + location.host + location.pathname) + .replace('test_', 'file_') + .replace('_inproc', '').replace('_oop', ''); + +var previousPrefs = { + mozBrowserFramesEnabled: undefined, + oop_by_default: undefined, +}; + +try { + previousPrefs.mozBrowserFramesEnabled = SpecialPowers.getBoolPref('dom.mozBrowserFramesEnabled'); +} catch(e) +{ +} + +try { + previousPrefs.oop_by_default = SpecialPowers.getBoolPref('dom.ipc.browser_frames.oop_by_default'); +} catch(e) { +} + +SpecialPowers.setBoolPref('dom.mozBrowserFramesEnabled', true); +SpecialPowers.setBoolPref("dom.ipc.browser_frames.oop_by_default", location.pathname.indexOf('_inproc') == -1); + +SpecialPowers.addPermission("browser", true, window.document); + +var gData = [ + // APP 1 + { + app: 'http://example.org/manifest.webapp', + action: 'read-no', + src: fileTestOnCurrentOrigin, + }, + { + app: 'http://example.org/manifest.webapp', + action: 'write', + src: fileTestOnCurrentOrigin, + }, + { + app: 'http://example.org/manifest.webapp', + action: 'read-yes', + src: fileTestOnCurrentOrigin, + }, + // APP 2 + { + app: 'https://example.com/manifest.webapp', + action: 'read-no', + src: fileTestOnCurrentOrigin, + }, + { + app: 'https://example.com/manifest.webapp', + action: 'write', + src: fileTestOnCurrentOrigin, + }, + { + app: 'https://example.com/manifest.webapp', + action: 'read-yes', + src: fileTestOnCurrentOrigin, + }, + // Browser + { + browser: true, + action: 'read-no', + src: fileTestOnCurrentOrigin, + }, + { + browser: true, + action: 'write', + src: fileTestOnCurrentOrigin, + }, + { + browser: true, + action: 'read-yes', + src: fileTestOnCurrentOrigin, + }, +]; + +function runTest() { + for (var i in gData) { + var iframe = document.createElement('iframe'); + var data = gData[i]; + + if (data.app) { + iframe.setAttribute('mozbrowser', ''); + iframe.setAttribute('mozapp', data.app); + } else if (data.browser) { + iframe.setAttribute('mozbrowser', ''); + } + + if (data.app || data.browser) { + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { + is(e.detail.message, 'success', 'test number ' + i); + +// document.getElementById('content').removeChild(iframe); + + i++; + if (i >= gData.length) { + if (previousPrefs.mozBrowserFramesEnabled !== undefined) { + SpecialPowers.setBoolPref('dom.mozBrowserFramesEnabled', previousPrefs.mozBrowserFramesEnabled); + } + if (previousPrefs.oop_by_default !== undefined) { + SpecialPowers.setBoolPref("dom.ipc.browser_frames.oop_by_default", previousPrefs.oop_by_default); + } + + SpecialPowers.removePermission("browser", window.document); + + indexedDB.deleteDatabase('AppIsolationTest').onsuccess = function() { + SimpleTest.finish(); + }; + } else { + gTestRunner.next(); + } + }); + } + + iframe.src = data.src + '?' + data.action; + + document.getElementById('content').appendChild(iframe); + + yield undefined; + } +} + +var gTestRunner = runTest(); + +function startTest() { + var request = window.indexedDB.open('AppIsolationTest'); + var created = false; + + request.onupgradeneeded = function(event) { + created = true; + var db = event.target.result; + var data = [ + { id: "0", name: "foo" }, + ]; + var objectStore = db.createObjectStore("test", { keyPath: "id" }); + for (var i in data) { + objectStore.add(data[i]); + } + } + + request.onsuccess = function(event) { + var db = event.target.result; + is(created, true, "we should have created the db"); + + db.transaction("test").objectStore("test").get("0").onsuccess = function(event) { + is(event.target.result.name, 'foo', 'data have been written'); + db.close(); + + gTestRunner.next(); + }; + } +} + +// TODO: remove unsetting network.disable.ipc.security as part of bug 820712 +SpecialPowers.pushPrefEnv({ + "set": [ + ["network.disable.ipc.security", true], + ] +}, startTest); |