michael@0: /** michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: var rootDir = getRootDirectory(gTestPath); michael@0: const gHttpTestRoot = rootDir.replace("chrome://mochitests/content/", "http://mochi.test:8888/"); michael@0: michael@0: // Test clearing plugin data using sanitize.js. michael@0: const testURL1 = gHttpTestRoot + "browser_clearplugindata.html"; michael@0: const testURL2 = gHttpTestRoot + "browser_clearplugindata_noage.html"; michael@0: michael@0: let tempScope = {}; michael@0: Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSSubScriptLoader) michael@0: .loadSubScript("chrome://browser/content/sanitize.js", tempScope); michael@0: let Sanitizer = tempScope.Sanitizer; michael@0: michael@0: const pluginHostIface = Ci.nsIPluginHost; michael@0: var pluginHost = Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost); michael@0: pluginHost.QueryInterface(pluginHostIface); michael@0: michael@0: var pluginTag = getTestPlugin(); michael@0: var s; michael@0: michael@0: function stored(needles) { michael@0: var something = pluginHost.siteHasData(this.pluginTag, null); michael@0: if (!needles) michael@0: return something; michael@0: michael@0: if (!something) michael@0: return false; michael@0: michael@0: for (var i = 0; i < needles.length; ++i) { michael@0: if (!pluginHost.siteHasData(this.pluginTag, needles[i])) michael@0: return false; michael@0: } michael@0: return true; michael@0: } michael@0: michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: setTestPluginEnabledState(Ci.nsIPluginTag.STATE_ENABLED); michael@0: michael@0: s = new Sanitizer(); michael@0: s.ignoreTimespan = false; michael@0: s.prefDomain = "privacy.cpd."; michael@0: var itemPrefs = gPrefService.getBranch(s.prefDomain); michael@0: itemPrefs.setBoolPref("history", false); michael@0: itemPrefs.setBoolPref("downloads", false); michael@0: itemPrefs.setBoolPref("cache", false); michael@0: itemPrefs.setBoolPref("cookies", true); // plugin data michael@0: itemPrefs.setBoolPref("formdata", false); michael@0: itemPrefs.setBoolPref("offlineApps", false); michael@0: itemPrefs.setBoolPref("passwords", false); michael@0: itemPrefs.setBoolPref("sessions", false); michael@0: itemPrefs.setBoolPref("siteSettings", false); michael@0: michael@0: executeSoon(test_with_age); michael@0: } michael@0: michael@0: function setFinishedCallback(callback) michael@0: { michael@0: let testPage = gBrowser.selectedBrowser.contentWindow.wrappedJSObject; michael@0: testPage.testFinishedCallback = function() { michael@0: setTimeout(function() { michael@0: info("got finished callback"); michael@0: callback(); michael@0: }, 0); michael@0: } michael@0: } michael@0: michael@0: function test_with_age() michael@0: { michael@0: // Load page to set data for the plugin. michael@0: gBrowser.selectedTab = gBrowser.addTab(); michael@0: gBrowser.selectedBrowser.addEventListener("load", function () { michael@0: gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true); michael@0: michael@0: setFinishedCallback(function() { michael@0: ok(stored(["foo.com","bar.com","baz.com","qux.com"]), michael@0: "Data stored for sites"); michael@0: michael@0: // Clear 20 seconds ago michael@0: var now_uSec = Date.now() * 1000; michael@0: s.range = [now_uSec - 20*1000000, now_uSec]; michael@0: s.sanitize(); michael@0: michael@0: ok(stored(["bar.com","qux.com"]), "Data stored for sites"); michael@0: ok(!stored(["foo.com"]), "Data cleared for foo.com"); michael@0: ok(!stored(["baz.com"]), "Data cleared for baz.com"); michael@0: michael@0: // Clear everything michael@0: s.range = null; michael@0: s.sanitize(); michael@0: michael@0: ok(!stored(null), "All data cleared"); michael@0: michael@0: gBrowser.removeCurrentTab(); michael@0: michael@0: executeSoon(test_without_age); michael@0: }); michael@0: }, true); michael@0: content.location = testURL1; michael@0: } michael@0: michael@0: function test_without_age() michael@0: { michael@0: // Load page to set data for the plugin. michael@0: gBrowser.selectedTab = gBrowser.addTab(); michael@0: gBrowser.selectedBrowser.addEventListener("load", function () { michael@0: gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true); michael@0: michael@0: setFinishedCallback(function() { michael@0: ok(stored(["foo.com","bar.com","baz.com","qux.com"]), michael@0: "Data stored for sites"); michael@0: michael@0: // Attempt to clear 20 seconds ago. The plugin will throw michael@0: // NS_ERROR_PLUGIN_TIME_RANGE_NOT_SUPPORTED, which should result in us michael@0: // clearing all data regardless of age. michael@0: var now_uSec = Date.now() * 1000; michael@0: s.range = [now_uSec - 20*1000000, now_uSec]; michael@0: s.sanitize(); michael@0: michael@0: ok(!stored(null), "All data cleared"); michael@0: michael@0: gBrowser.removeCurrentTab(); michael@0: michael@0: executeSoon(finish); michael@0: }); michael@0: }, true); michael@0: content.location = testURL2; michael@0: } michael@0: