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);