1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/indexedDB/test/webapp_clearBrowserData.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,140 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +"use strict"; 1.8 + 1.9 +const appDomain = "example.org"; 1.10 +const manifestURL = 1.11 + location.protocol + "//" + appDomain + "/manifest.webapp"; 1.12 + 1.13 +function testSteps() 1.14 +{ 1.15 + const objectStoreName = "foo"; 1.16 + const testKey = 1; 1.17 + const testValue = objectStoreName; 1.18 + 1.19 + // Determine whether the app and browser frames should be in or 1.20 + // out-of-process. 1.21 + let remote_app, remote_browser; 1.22 + if (window.location.href.indexOf("inproc_oop") != -1) { 1.23 + remote_app = false; 1.24 + remote_browser = true; 1.25 + } 1.26 + else if (window.location.href.indexOf("oop_inproc") != -1) { 1.27 + remote_app = true; 1.28 + remote_browser = false; 1.29 + } 1.30 + else if (window.location.href.indexOf("inproc_inproc") != -1) { 1.31 + remote_app = false; 1.32 + remote_browser = false; 1.33 + } 1.34 + else { 1.35 + ok(false, "Bad test filename!"); 1.36 + return; 1.37 + } 1.38 + 1.39 + let request = indexedDB.open(window.location.pathname, 1); 1.40 + request.onerror = errorHandler; 1.41 + request.onupgradeneeded = grabEventAndContinueHandler; 1.42 + request.onsuccess = unexpectedSuccessHandler; 1.43 + let event = yield undefined; 1.44 + 1.45 + let db = event.target.result; 1.46 + db.onerror = errorHandler; 1.47 + db.onversionchange = function(event) { 1.48 + event.target.close(); 1.49 + } 1.50 + 1.51 + let objectStore = db.createObjectStore(objectStoreName); 1.52 + objectStore.add(testValue, testKey); 1.53 + 1.54 + request.onsuccess = grabEventAndContinueHandler; 1.55 + event = yield undefined; 1.56 + 1.57 + // We need to send both remote_browser and remote_app in the querystring 1.58 + // because webapp_clearBrowserData_appFrame uses the path + querystring to 1.59 + // create and open a database which it checks no other test has touched. If 1.60 + // we sent only remote_browser, then we wouldn't be able to test both 1.61 + // (remote_app==false, remote_browser==false) and (remote_app==true, 1.62 + // remote_browser==false). 1.63 + let srcURL = location.protocol + "//" + appDomain + 1.64 + location.pathname.substring(0, location.pathname.lastIndexOf('/')) + 1.65 + "/webapp_clearBrowserData_appFrame.html?" + 1.66 + "remote_browser=" + remote_browser + "&" + 1.67 + "remote_app=" + remote_app; 1.68 + 1.69 + let iframe = document.createElement("iframe"); 1.70 + iframe.setAttribute("mozbrowser", ""); 1.71 + iframe.setAttribute("mozapp", manifestURL); 1.72 + iframe.setAttribute("src", srcURL); 1.73 + iframe.setAttribute("remote", remote_app); 1.74 + iframe.addEventListener("mozbrowsershowmodalprompt", function(event) { 1.75 + let message = JSON.parse(event.detail.message); 1.76 + switch (message.type) { 1.77 + case "info": 1.78 + case "ok": 1.79 + window[message.type].apply(window, message.args); 1.80 + break; 1.81 + case "done": 1.82 + continueToNextStepSync(); 1.83 + break; 1.84 + default: 1.85 + throw "unknown message"; 1.86 + } 1.87 + }); 1.88 + 1.89 + info("loading app frame"); 1.90 + 1.91 + document.body.appendChild(iframe); 1.92 + yield undefined; 1.93 + 1.94 + request = indexedDB.open(window.location.pathname, 1); 1.95 + request.onerror = errorHandler; 1.96 + request.onupgradeneeded = unexpectedSuccessHandler; 1.97 + request.onsuccess = grabEventAndContinueHandler; 1.98 + event = yield undefined; 1.99 + 1.100 + db = event.target.result; 1.101 + db.onerror = errorHandler; 1.102 + 1.103 + objectStore = 1.104 + db.transaction(objectStoreName).objectStore(objectStoreName); 1.105 + objectStore.get(testKey).onsuccess = grabEventAndContinueHandler; 1.106 + event = yield undefined; 1.107 + 1.108 + ok(testValue == event.target.result, "data still exists"); 1.109 + 1.110 + finishTest(); 1.111 + yield undefined; 1.112 +} 1.113 + 1.114 +function start() 1.115 +{ 1.116 + if (!SpecialPowers.isMainProcess()) { 1.117 + todo(false, "Test disabled in child processes, for now"); 1.118 + SimpleTest.finish(); 1.119 + return; 1.120 + } 1.121 + 1.122 + SpecialPowers.addPermission("browser", true, document); 1.123 + SpecialPowers.addPermission("browser", true, { manifestURL: manifestURL, 1.124 + isInBrowserElement: false }); 1.125 + SpecialPowers.addPermission("embed-apps", true, document); 1.126 + 1.127 + SpecialPowers.setAllAppsLaunchable(true); 1.128 + 1.129 + window.addEventListener("unload", function cleanup(event) { 1.130 + if (event.target == document) { 1.131 + window.removeEventListener("unload", cleanup, false); 1.132 + 1.133 + SpecialPowers.removePermission("browser", location.href); 1.134 + SpecialPowers.removePermission("browser", 1.135 + location.protocol + "//" + appDomain); 1.136 + SpecialPowers.removePermission("embed-apps", location.href); 1.137 + } 1.138 + }, false); 1.139 + 1.140 + SpecialPowers.pushPrefEnv({ 1.141 + "set": [["dom.mozBrowserFramesEnabled", true]] 1.142 + }, runTest); 1.143 +}