1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/indexedDB/test/file_app_isolation.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,168 @@ 1.4 +SimpleTest.waitForExplicitFinish(); 1.5 + 1.6 +var fileTestOnCurrentOrigin = (location.protocol + '//' + location.host + location.pathname) 1.7 + .replace('test_', 'file_') 1.8 + .replace('_inproc', '').replace('_oop', ''); 1.9 + 1.10 +var previousPrefs = { 1.11 + mozBrowserFramesEnabled: undefined, 1.12 + oop_by_default: undefined, 1.13 +}; 1.14 + 1.15 +try { 1.16 + previousPrefs.mozBrowserFramesEnabled = SpecialPowers.getBoolPref('dom.mozBrowserFramesEnabled'); 1.17 +} catch(e) 1.18 +{ 1.19 +} 1.20 + 1.21 +try { 1.22 + previousPrefs.oop_by_default = SpecialPowers.getBoolPref('dom.ipc.browser_frames.oop_by_default'); 1.23 +} catch(e) { 1.24 +} 1.25 + 1.26 +SpecialPowers.setBoolPref('dom.mozBrowserFramesEnabled', true); 1.27 +SpecialPowers.setBoolPref("dom.ipc.browser_frames.oop_by_default", location.pathname.indexOf('_inproc') == -1); 1.28 + 1.29 +SpecialPowers.addPermission("browser", true, window.document); 1.30 + 1.31 +var gData = [ 1.32 + // APP 1 1.33 + { 1.34 + app: 'http://example.org/manifest.webapp', 1.35 + action: 'read-no', 1.36 + src: fileTestOnCurrentOrigin, 1.37 + }, 1.38 + { 1.39 + app: 'http://example.org/manifest.webapp', 1.40 + action: 'write', 1.41 + src: fileTestOnCurrentOrigin, 1.42 + }, 1.43 + { 1.44 + app: 'http://example.org/manifest.webapp', 1.45 + action: 'read-yes', 1.46 + src: fileTestOnCurrentOrigin, 1.47 + }, 1.48 + // APP 2 1.49 + { 1.50 + app: 'https://example.com/manifest.webapp', 1.51 + action: 'read-no', 1.52 + src: fileTestOnCurrentOrigin, 1.53 + }, 1.54 + { 1.55 + app: 'https://example.com/manifest.webapp', 1.56 + action: 'write', 1.57 + src: fileTestOnCurrentOrigin, 1.58 + }, 1.59 + { 1.60 + app: 'https://example.com/manifest.webapp', 1.61 + action: 'read-yes', 1.62 + src: fileTestOnCurrentOrigin, 1.63 + }, 1.64 + // Browser 1.65 + { 1.66 + browser: true, 1.67 + action: 'read-no', 1.68 + src: fileTestOnCurrentOrigin, 1.69 + }, 1.70 + { 1.71 + browser: true, 1.72 + action: 'write', 1.73 + src: fileTestOnCurrentOrigin, 1.74 + }, 1.75 + { 1.76 + browser: true, 1.77 + action: 'read-yes', 1.78 + src: fileTestOnCurrentOrigin, 1.79 + }, 1.80 +]; 1.81 + 1.82 +function runTest() { 1.83 + for (var i in gData) { 1.84 + var iframe = document.createElement('iframe'); 1.85 + var data = gData[i]; 1.86 + 1.87 + if (data.app) { 1.88 + iframe.setAttribute('mozbrowser', ''); 1.89 + iframe.setAttribute('mozapp', data.app); 1.90 + } else if (data.browser) { 1.91 + iframe.setAttribute('mozbrowser', ''); 1.92 + } 1.93 + 1.94 + if (data.app || data.browser) { 1.95 + iframe.addEventListener('mozbrowsershowmodalprompt', function(e) { 1.96 + is(e.detail.message, 'success', 'test number ' + i); 1.97 + 1.98 +// document.getElementById('content').removeChild(iframe); 1.99 + 1.100 + i++; 1.101 + if (i >= gData.length) { 1.102 + if (previousPrefs.mozBrowserFramesEnabled !== undefined) { 1.103 + SpecialPowers.setBoolPref('dom.mozBrowserFramesEnabled', previousPrefs.mozBrowserFramesEnabled); 1.104 + } 1.105 + if (previousPrefs.oop_by_default !== undefined) { 1.106 + SpecialPowers.setBoolPref("dom.ipc.browser_frames.oop_by_default", previousPrefs.oop_by_default); 1.107 + } 1.108 + 1.109 + SpecialPowers.removePermission("browser", window.document); 1.110 + 1.111 + indexedDB.deleteDatabase('AppIsolationTest').onsuccess = function() { 1.112 + SimpleTest.finish(); 1.113 + }; 1.114 + } else { 1.115 + gTestRunner.next(); 1.116 + } 1.117 + }); 1.118 + } 1.119 + 1.120 + iframe.src = data.src + '?' + data.action; 1.121 + 1.122 + document.getElementById('content').appendChild(iframe); 1.123 + 1.124 + yield undefined; 1.125 + } 1.126 +} 1.127 + 1.128 +var gTestRunner = runTest(); 1.129 + 1.130 +function startTest() { 1.131 + var request = window.indexedDB.open('AppIsolationTest'); 1.132 + var created = false; 1.133 + 1.134 + request.onupgradeneeded = function(event) { 1.135 + created = true; 1.136 + var db = event.target.result; 1.137 + var data = [ 1.138 + { id: "0", name: "foo" }, 1.139 + ]; 1.140 + var objectStore = db.createObjectStore("test", { keyPath: "id" }); 1.141 + for (var i in data) { 1.142 + objectStore.add(data[i]); 1.143 + } 1.144 + } 1.145 + 1.146 + request.onsuccess = function(event) { 1.147 + var db = event.target.result; 1.148 + is(created, true, "we should have created the db"); 1.149 + 1.150 + db.transaction("test").objectStore("test").get("0").onsuccess = function(event) { 1.151 + is(event.target.result.name, 'foo', 'data have been written'); 1.152 + db.close(); 1.153 + 1.154 + gTestRunner.next(); 1.155 + }; 1.156 + } 1.157 +} 1.158 + 1.159 +// test_ipc.html executes all the tests in this directory in content process. 1.160 +// It will fail on this one for the moment. 1.161 +if (!SpecialPowers.isMainProcess()) { 1.162 + todo(false, "We should make this work on content process"); 1.163 + SimpleTest.finish(); 1.164 +} else { 1.165 + // TODO: remove unsetting network.disable.ipc.security as part of bug 820712 1.166 + SpecialPowers.pushPrefEnv({ 1.167 + "set": [ 1.168 + ["network.disable.ipc.security", true], 1.169 + ] 1.170 + }, startTest); 1.171 +}