summaryrefslogtreecommitdiffstats
path: root/tests/selenium/service_workers_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/selenium/service_workers_test.py')
-rw-r--r--tests/selenium/service_workers_test.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/selenium/service_workers_test.py b/tests/selenium/service_workers_test.py
new file mode 100644
index 0000000..00da1f5
--- /dev/null
+++ b/tests/selenium/service_workers_test.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+
+import unittest
+
+import pbtest
+
+
+class ServiceWorkersTest(pbtest.PBSeleniumTest):
+ """Verifies interaction with sites that use Service Worker caches"""
+
+ def get_tab_data_domains(self):
+ domains = self.js(
+ "let tabData = chrome.extension.getBackgroundPage().badger.tabData;"
+ "return (Object.keys(tabData).map(tab_id => {"
+ " return tabData[tab_id].frames[0].host;"
+ "}));"
+ )
+ return domains
+
+ def test_returning_to_sw_cached_page(self):
+ FIXTURE_URL = (
+ "https://efforg.github.io/privacybadger-test-fixtures/html/"
+ "service_workers.html"
+ )
+
+ # visit the Service Worker page to activate the worker
+ self.load_url(FIXTURE_URL)
+
+ # Service Workers are off by default in Firefox 60 ESR
+ if not self.js("return 'serviceWorker' in navigator;"):
+ self.skipTest("Service Workers are disabled")
+
+ # wait for the worker to initialize its cache
+ self.wait_for_script("return window.WORKER_READY;")
+
+ # visit a different site (doesn't matter what it is,
+ # just needs to be an http site with a different domain)
+ self.load_url("https://dnt-test.trackersimulator.org/")
+
+ # return to the SW page
+ self.driver.back()
+
+ # now open a new window (to avoid clearing badger.tabData)
+ # and verify results
+ self.open_window()
+ self.load_url(self.options_url)
+ domains = self.get_tab_data_domains()
+ self.assertIn("efforg.github.io", domains,
+ "SW page URL was not correctly attributed")
+ self.assertEqual(len(domains), 1,
+ "tabData contains an unexpected number of entries")
+
+
+if __name__ == "__main__":
+ unittest.main()