diff options
Diffstat (limited to 'tests/selenium/service_workers_test.py')
-rw-r--r-- | tests/selenium/service_workers_test.py | 56 |
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() |