summaryrefslogtreecommitdiffstats
path: root/dom/plugins/test/mochitest/test_clear_site_data.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/plugins/test/mochitest/test_clear_site_data.html')
-rw-r--r--dom/plugins/test/mochitest/test_clear_site_data.html242
1 files changed, 242 insertions, 0 deletions
diff --git a/dom/plugins/test/mochitest/test_clear_site_data.html b/dom/plugins/test/mochitest/test_clear_site_data.html
new file mode 100644
index 000000000..88ba937d5
--- /dev/null
+++ b/dom/plugins/test/mochitest/test_clear_site_data.html
@@ -0,0 +1,242 @@
+<html>
+<head>
+ <title>NPAPI ClearSiteData/GetSitesWithData Functionality</title>
+ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
+ <script type="application/javascript" src="plugin-utils.js"></script>
+</head>
+<body>
+ <script type="application/javascript">
+ setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED);
+ </script>
+
+ <embed id="plugin1" type="application/x-test" width="200" height="200"></embed>
+
+ <script class="testbody" type="application/javascript">
+ SimpleTest.waitForExplicitFinish();
+
+ const pluginHostIface = Components.interfaces.nsIPluginHost;
+ var pluginHost = Components.classes["@mozilla.org/plugin/host;1"].
+ getService(pluginHostIface);
+ const FLAG_CLEAR_ALL = pluginHostIface.FLAG_CLEAR_ALL;
+ const FLAG_CLEAR_CACHE = pluginHostIface.FLAG_CLEAR_CACHE;
+
+ var p = document.getElementById("plugin1");
+
+ // Since we're running with chrome permissions, accessing the plugin wont
+ // synchronously spawn it -- wait for the async spawning to finish.
+ SimpleTest.executeSoon(function() {
+ // Make sure clearing by timerange is supported.
+ p.setSitesWithDataCapabilities(true);
+ ok(PluginUtils.withTestPlugin(runTest), "Test plugin found");
+ });
+
+ function stored(needles) {
+ var something = pluginHost.siteHasData(this.pluginTag, null);
+ if (!needles)
+ return something;
+
+ if (!something)
+ return false;
+
+ for (var i = 0; i < needles.length; ++i) {
+ if (!pluginHost.siteHasData(this.pluginTag, needles[i]))
+ return false;
+ }
+ return true;
+ }
+
+ function checkThrows(fn, result) {
+ try {
+ fn();
+ throw new Error("bad exception");
+ } catch (e) {
+ is(e.result, result, "Correct exception thrown");
+ }
+ }
+
+ function runTest(pluginTag) {
+ this.pluginTag = pluginTag;
+ p.setSitesWithData(
+ "foo.com:0:5," +
+ "foo.com:0:7," +
+ "bar.com:0:10," +
+ "baz.com:0:10," +
+ "foo.com:1:7," +
+ "qux.com:1:5," +
+ "quz.com:1:8"
+ );
+ ok(stored(["foo.com","bar.com","baz.com","qux.com","quz.com"]),
+ "Data stored for sites");
+
+ // Clear nothing.
+ pluginHost.clearSiteData(pluginTag, null, FLAG_CLEAR_ALL, 4, {callback: function() { test1(); }});
+ }
+ function test1() {
+ ok(stored(["foo.com","bar.com","baz.com","qux.com","quz.com"]),
+ "Data stored for sites");
+
+ pluginHost.clearSiteData(pluginTag, null, FLAG_CLEAR_CACHE, 4, {callback: function() { test2(); }});
+ }
+ function test2() {
+ ok(stored(["foo.com","bar.com","baz.com","qux.com","quz.com"]),
+ "Data stored for sites");
+
+ // Clear cache data 5 seconds or older.
+ pluginHost.clearSiteData(pluginTag, null, FLAG_CLEAR_CACHE, 5, {callback: function() { test3(); }});
+ }
+ function test3() {
+ ok(stored(["foo.com","bar.com","baz.com","quz.com"]),
+ "Data stored for sites");
+ ok(!stored(["qux.com"]), "Data cleared for qux.com");
+ // Clear cache data for foo.com, but leave non-cache data.
+ pluginHost.clearSiteData(pluginTag, "foo.com", FLAG_CLEAR_CACHE, 20, {callback: function() { test4(); }});
+ }
+ function test4() {
+ ok(stored(["foo.com","bar.com","baz.com","quz.com"]),
+ "Data stored for sites");
+
+ // Clear all data 7 seconds or older.
+ pluginHost.clearSiteData(pluginTag, null, FLAG_CLEAR_ALL, 7, {callback: function() { test5(); }});
+ }
+ function test5() {
+ ok(stored(["bar.com","baz.com","quz.com"]), "Data stored for sites");
+ ok(!stored(["foo.com"]), "Data cleared for foo.com");
+ ok(!stored(["qux.com"]), "Data cleared for qux.com");
+
+ // Clear all cache data.
+ pluginHost.clearSiteData(pluginTag, null, FLAG_CLEAR_CACHE, 20, {callback: function() { test6(); }});
+ }
+ function test6() {
+ ok(stored(["bar.com","baz.com"]), "Data stored for sites");
+ ok(!stored(["quz.com"]), "Data cleared for quz.com");
+
+ // Clear all data for bar.com.
+ pluginHost.clearSiteData(pluginTag, "bar.com", FLAG_CLEAR_ALL, 20, {callback: function(rv) { test7(rv); }});
+ }
+ function test7(rv) {
+ ok(stored(["baz.com"]), "Data stored for baz.com");
+ ok(!stored(["bar.com"]), "Data cleared for bar.com");
+
+ // Disable clearing by age.
+ p.setSitesWithDataCapabilities(false);
+
+ pluginHost.clearSiteData(pluginTag, null, FLAG_CLEAR_ALL, 20, {callback: function(rv) {
+ is(rv, Components.results.NS_ERROR_PLUGIN_TIME_RANGE_NOT_SUPPORTED);
+ test8(rv);
+ }});
+ }
+ function test8(rv) {
+ pluginHost.clearSiteData(pluginTag, null, FLAG_CLEAR_CACHE, 20, {callback: function(rv) {
+ is(rv, Components.results.NS_ERROR_PLUGIN_TIME_RANGE_NOT_SUPPORTED);
+ test9(rv);
+ }});
+ }
+ function test9(rv) {
+ pluginHost.clearSiteData(pluginTag, "baz.com", FLAG_CLEAR_ALL, 20, {callback: function(rv) {
+ is(rv, Components.results.NS_ERROR_PLUGIN_TIME_RANGE_NOT_SUPPORTED);
+ test10(rv);
+ }});
+ }
+ function test10(rv) {
+ pluginHost.clearSiteData(pluginTag, "baz.com", FLAG_CLEAR_CACHE, 20, {callback: function(rv) {
+ is(rv, Components.results.NS_ERROR_PLUGIN_TIME_RANGE_NOT_SUPPORTED);
+ test11();
+ }});
+ }
+ function test11() {
+ // Clear cache for baz.com and globally for all ages.
+ pluginHost.clearSiteData(pluginTag, "baz.com", FLAG_CLEAR_CACHE, -1, {callback: function(rv) { test12()}});
+ }
+ function test12() {
+ pluginHost.clearSiteData(pluginTag, null, FLAG_CLEAR_CACHE, -1, {callback: function(rv) { test13()}});
+ }
+ function test13() {
+ // Check that all of the above were no-ops.
+ ok(stored(["baz.com"]), "Data stored for baz.com");
+
+ // Clear everything for baz.com.
+ pluginHost.clearSiteData(pluginTag, "baz.com", FLAG_CLEAR_ALL, -1, {callback: function(rv) { test14()}});
+ }
+ function test14() {
+ ok(!stored(["baz.com"]), "Data cleared for baz.com");
+ ok(!stored(null), "All data cleared");
+
+ // Set data to test subdomains, IP literals, and 'localhost'-like hosts.
+ p.setSitesWithData(
+ "foo.com:0:0," +
+ "bar.foo.com:0:0," +
+ "baz.foo.com:0:0," +
+ "bar.com:0:0," +
+ "[192.168.1.1]:0:0," +
+ "localhost:0:0"
+ );
+ ok(stored(["foo.com","nonexistent.foo.com","bar.com","192.168.1.1","localhost"]),
+ "Data stored for sites");
+
+ // Clear data for "foo.com" and its subdomains.
+ pluginHost.clearSiteData(pluginTag, "foo.com", FLAG_CLEAR_ALL, -1, {callback: function(rv) { test15()}});
+ }
+ function test15() {
+ ok(stored(["bar.com","192.168.1.1","localhost"]), "Data stored for sites");
+ ok(!stored(["foo.com"]), "Data cleared for foo.com");
+ ok(!stored(["bar.foo.com"]), "Data cleared for subdomains of foo.com");
+
+ // Clear data for "bar.com" using a subdomain.
+ pluginHost.clearSiteData(pluginTag, "foo.bar.com", FLAG_CLEAR_ALL, -1, {callback: function(rv) { test16()}});
+ }
+ function test16() {
+ ok(!stored(["bar.com"]), "Data cleared for bar.com");
+
+ // Clear data for "192.168.1.1".
+ pluginHost.clearSiteData(pluginTag, "192.168.1.1", FLAG_CLEAR_ALL, -1, {callback: function(rv) { test17()}});
+ }
+ function test17() {
+ ok(!stored(["192.168.1.1"]), "Data cleared for 192.168.1.1");
+
+ // Clear data for "localhost".
+ pluginHost.clearSiteData(pluginTag, "localhost", FLAG_CLEAR_ALL, -1, {callback: function(rv) { test18()}});
+ }
+ function test18() {
+ ok(!stored(null), "All data cleared");
+
+ // Set data to test international domains.
+ p.setSitesWithData(
+ "b\u00FCcher.es:0:0," +
+ "b\u00FCcher.uk:0:0," +
+ "xn--bcher-kva.NZ:0:0"
+ );
+ // Check that both the ACE and UTF-8 representations register.
+ ok(stored(["b\u00FCcher.es","xn--bcher-kva.es","b\u00FCcher.uk","xn--bcher-kva.uk"]),
+ "Data stored for sites");
+
+ // Clear data for the UTF-8 version.
+ pluginHost.clearSiteData(pluginTag, "b\u00FCcher.es", FLAG_CLEAR_ALL, -1, {callback: function(rv) { test19()}});
+ }
+ function test19() {
+ ok(!stored(["b\u00FCcher.es"]), "Data cleared for UTF-8 representation");
+ ok(!stored(["xn--bcher-kva.es"]), "Data cleared for ACE representation");
+
+ // Clear data for the ACE version.
+ pluginHost.clearSiteData(pluginTag, "xn--bcher-kva.uk", FLAG_CLEAR_ALL, -1, {callback: function(rv) { test20()}});
+ }
+ function test20() {
+ ok(!stored(["b\u00FCcher.uk"]), "Data cleared for UTF-8 representation");
+ ok(!stored(["xn--bcher-kva.uk"]), "Data cleared for ACE representation");
+
+ // The NPAPI spec requires that the plugin report sites in normalized
+ // UTF-8. We do happen to normalize the result anyway, so while that's not
+ // strictly required, we test it here.
+ ok(stored(["b\u00FCcher.nz","xn--bcher-kva.nz"]),
+ "Data stored for sites");
+ pluginHost.clearSiteData(pluginTag, "b\u00FCcher.nz", FLAG_CLEAR_ALL, -1, {callback: function(rv) { test21()}});
+ }
+ function test21() {
+ ok(!stored(["b\u00FCcher.nz"]), "Data cleared for UTF-8 representation");
+ ok(!stored(["xn--bcher-kva.nz"]), "Data cleared for ACE representation");
+ ok(!stored(null), "All data cleared");
+ SimpleTest.finish();
+ }
+ </script>
+</body>
+</html>