1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/devtools/styleeditor/test/head.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,122 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +const TEST_BASE = "chrome://mochitests/content/browser/browser/devtools/styleeditor/test/"; 1.8 +const TEST_BASE_HTTP = "http://example.com/browser/browser/devtools/styleeditor/test/"; 1.9 +const TEST_BASE_HTTPS = "https://example.com/browser/browser/devtools/styleeditor/test/"; 1.10 +const TEST_HOST = 'mochi.test:8888'; 1.11 + 1.12 +let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}); 1.13 +let TargetFactory = devtools.TargetFactory; 1.14 +let {LoadContextInfo} = Cu.import("resource://gre/modules/LoadContextInfo.jsm", {}); 1.15 +let {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {}); 1.16 +let {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {}); 1.17 + 1.18 +let gPanelWindow; 1.19 +let cache = Cc["@mozilla.org/netwerk/cache-storage-service;1"] 1.20 + .getService(Ci.nsICacheStorageService); 1.21 + 1.22 + 1.23 +// Import the GCLI test helper 1.24 +let testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/")); 1.25 +Services.scriptloader.loadSubScript(testDir + "../../../commandline/test/helpers.js", this); 1.26 + 1.27 +gDevTools.testing = true; 1.28 +SimpleTest.registerCleanupFunction(() => { 1.29 + gDevTools.testing = false; 1.30 +}); 1.31 + 1.32 +/** 1.33 + * Define an async test based on a generator function 1.34 + */ 1.35 +function asyncTest(generator) { 1.36 + return () => Task.spawn(generator).then(null, ok.bind(null, false)).then(finish); 1.37 +} 1.38 + 1.39 +function* cleanup() 1.40 +{ 1.41 + gPanelWindow = null; 1.42 + while (gBrowser.tabs.length > 1) { 1.43 + let target = TargetFactory.forTab(gBrowser.selectedTab); 1.44 + yield gDevTools.closeToolbox(target); 1.45 + 1.46 + gBrowser.removeCurrentTab(); 1.47 + } 1.48 +} 1.49 + 1.50 +function addTabAndOpenStyleEditors(count, callback, uri) { 1.51 + let deferred = promise.defer(); 1.52 + let currentCount = 0; 1.53 + let panel; 1.54 + addTabAndCheckOnStyleEditorAdded(p => panel = p, function () { 1.55 + currentCount++; 1.56 + info(currentCount + " of " + count + " editors opened"); 1.57 + if (currentCount == count) { 1.58 + if (callback) { 1.59 + callback(panel); 1.60 + } 1.61 + deferred.resolve(panel); 1.62 + } 1.63 + }); 1.64 + 1.65 + if (uri) { 1.66 + content.location = uri; 1.67 + } 1.68 + return deferred.promise; 1.69 +} 1.70 + 1.71 +function addTabAndCheckOnStyleEditorAdded(callbackOnce, callbackOnAdded) { 1.72 + gBrowser.selectedTab = gBrowser.addTab(); 1.73 + gBrowser.selectedBrowser.addEventListener("load", function onLoad() { 1.74 + gBrowser.selectedBrowser.removeEventListener("load", onLoad, true); 1.75 + openStyleEditorInWindow(window, function (panel) { 1.76 + // Execute the individual callback with the panel argument. 1.77 + callbackOnce(panel); 1.78 + // Report editors that already opened while loading. 1.79 + for (let editor of panel.UI.editors) { 1.80 + callbackOnAdded(editor); 1.81 + } 1.82 + // Report new editors added afterwards. 1.83 + panel.UI.on("editor-added", (event, editor) => callbackOnAdded(editor)); 1.84 + }); 1.85 + }, true); 1.86 +} 1.87 + 1.88 +function openStyleEditorInWindow(win, callback) { 1.89 + let target = TargetFactory.forTab(win.gBrowser.selectedTab); 1.90 + win.gDevTools.showToolbox(target, "styleeditor").then(function(toolbox) { 1.91 + let panel = toolbox.getCurrentPanel(); 1.92 + gPanelWindow = panel._panelWin; 1.93 + 1.94 + panel.UI._alwaysDisableAnimations = true; 1.95 + callback(panel); 1.96 + }); 1.97 +} 1.98 + 1.99 +function checkDiskCacheFor(host, done) 1.100 +{ 1.101 + let foundPrivateData = false; 1.102 + 1.103 + Visitor.prototype = { 1.104 + onCacheStorageInfo: function(num, consumption) 1.105 + { 1.106 + info("disk storage contains " + num + " entries"); 1.107 + }, 1.108 + onCacheEntryInfo: function(entry) 1.109 + { 1.110 + info(entry.key); 1.111 + foundPrivateData |= entry.key.contains(host); 1.112 + }, 1.113 + onCacheEntryVisitCompleted: function() 1.114 + { 1.115 + is(foundPrivateData, false, "web content present in disk cache"); 1.116 + done(); 1.117 + } 1.118 + }; 1.119 + function Visitor() {} 1.120 + 1.121 + var storage = cache.diskCacheStorage(LoadContextInfo.default, false); 1.122 + storage.asyncVisitStorage(new Visitor(), true /* Do walk entries */); 1.123 +} 1.124 + 1.125 +registerCleanupFunction(cleanup);