Bug 1237396 - Add safebrowsing test for initial download of files. r?whimboo draft
authorBenjamin Forehand Jr <bennyjr169@gmail.com>
Wed, 09 Mar 2016 17:19:35 -0500
changeset 374046 8a447cb4a8368283196efcf175bc77bf9aa27cb1
parent 374045 7195c2ccf18841f933bca6c6b825c4ceaafbf0d1
child 522533 04b12da360d2457b8e826cf31bcc02a3728545f9
push id19909
push userbmo:bennyjr169@gmail.com
push dateWed, 01 Jun 2016 18:15:58 +0000
reviewerswhimboo
bugs1237396
milestone49.0a1
Bug 1237396 - Add safebrowsing test for initial download of files. r?whimboo Fixed tear down method and Base testclass. MozReview-Commit-ID: 6AaEcCH0dTU
testing/firefox-ui/tests/functional/security/manifest.ini
testing/firefox-ui/tests/functional/security/test_safe_browsing_initial_download.py
testing/puppeteer/firefox/firefox_puppeteer/testcases/base.py
--- a/testing/firefox-ui/tests/functional/security/manifest.ini
+++ b/testing/firefox-ui/tests/functional/security/manifest.ini
@@ -4,16 +4,17 @@ tags = remote
 [test_dv_certificate.py]
 [test_enable_privilege.py]
 tags = local
 [test_ev_certificate.py]
 [test_mixed_content_page.py]
 [test_mixed_script_content_blocking.py]
 [test_no_certificate.py]
 tags = local
+[test_safe_browsing_initial_download.py]
 [test_safe_browsing_notification.py]
 [test_safe_browsing_warning_pages.py]
 [test_security_notification.py]
 [test_ssl_disabled_error_page.py]
 [test_ssl_status_after_restart.py]
 skip-if = (os == "win" && os_version == "5.1") # Bug 1167179: Fails to open popups after restart
 [test_submit_unencrypted_info_warning.py]
 [test_unknown_issuer.py]
new file mode 100644
--- /dev/null
+++ b/testing/firefox-ui/tests/functional/security/test_safe_browsing_initial_download.py
@@ -0,0 +1,81 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import os
+
+from marionette_driver import Wait
+from firefox_ui_harness.testcases import FirefoxTestCase
+
+
+class TestSafeBrowsingInitialDownload(FirefoxTestCase):
+
+    test_data = [{
+            'platforms': ['linux', 'windows_nt', 'darwin'],
+            'files': [
+                # Phishing
+                "goog-badbinurl-shavar.cache",
+                "goog-badbinurl-shavar.pset",
+                "goog-badbinurl-shavar.sbstore",
+                "goog-malware-shavar.cache",
+                "goog-malware-shavar.pset",
+                "goog-malware-shavar.sbstore",
+                "goog-phish-shavar.cache",
+                "goog-phish-shavar.pset",
+                "goog-phish-shavar.sbstore",
+                "goog-unwanted-shavar.cache",
+                "goog-unwanted-shavar.pset",
+                "goog-unwanted-shavar.sbstore",
+
+                # Tracking Protections
+                "mozstd-track-digest256.cache",
+                "mozstd-track-digest256.pset",
+                "mozstd-track-digest256.sbstore",
+                "mozstd-trackwhite-digest256.cache",
+                "mozstd-trackwhite-digest256.pset",
+                "mozstd-trackwhite-digest256.sbstore"
+                ]
+            },
+        {
+            'platforms': ['windows_nt'],
+            'files': [
+                "goog-downloadwhite-digest256.cache",
+                "goog-downloadwhite-digest256.pset",
+                "goog-downloadwhite-digest256.sbstore"
+            ]
+        }
+    ]
+
+    browser_prefs = {
+        'browser.safebrowsing.downloads.enabled': 'true',
+        'browser.safebrowsing.enabled': 'true',
+        'browser.safebrowsing.malware.enabled': 'true',
+        'browser.safebrowsing.provider.google.nextupdatetime': 1,
+        'browser.safebrowsing.provider.mozilla.nextupdatetime': 1,
+        'privacy.trackingprotection.enabled': 'true',
+        'privacy.trackingprotection.pbmode.enabled': 'true'
+    }
+
+    def setUp(self):
+        FirefoxTestCase.setUp(self)
+
+        # Set Browser Preferences
+        self.marionette.enforce_gecko_prefs(self.browser_prefs)
+
+        # Get safebrowsing path where downloaded data gets stored
+        self.sb_files_path = os.path.join(self.marionette.instance.profile.profile, 'safebrowsing')
+
+    def tearDown(self):
+        self.restart(clean=True)
+        FirefoxTestCase.tearDown(self)
+
+    def test_safe_browsing_initial_download(self):
+        wait = Wait(self.marionette, timeout=self.browser.timeout_page_load)
+
+        for data in self.test_data:
+            if self.platform not in data['platforms']:
+                continue
+            for item in data['files']:
+                wait.until(
+                    lambda _: os.path.exists(os.path.join(self.sb_files_path, item)),
+                    message='Safe Browsing File: {} not found!'.format(item))
--- a/testing/puppeteer/firefox/firefox_puppeteer/testcases/base.py
+++ b/testing/puppeteer/firefox/firefox_puppeteer/testcases/base.py
@@ -61,33 +61,34 @@ class BaseFirefoxTestCase(unittest.TestC
             # tests a proper start condition and make them not fail.
             self.windows.close_all([self.browser])
             self.browser.focus()
 
             # Also close all remaining tabs
             self.browser.tabbar.close_all_tabs([self.browser.tabbar.tabs[0]])
             self.browser.tabbar.tabs[0].switch_to()
 
-    def restart(self, flags=None):
+    def restart(self, flags=None, **kwargs):
         """Restart Firefox and re-initialize data.
 
         :param flags: Specific restart flags for Firefox
         """
+
+        # Marionette doesn't keep the former context, so restore to chrome
+        self.marionette.set_context('chrome')
+
         # TODO: Bug 1148220 Marionette's in_app restart has to send 'quit-application-requested'
         # observer notification before an in_app restart
         self.marionette.execute_script("""
-          Components.utils.import("resource://gre/modules/Services.jsm");
-          let cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"]
+            Components.utils.import("resource://gre/modules/Services.jsm");
+            let cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"]
                                      .createInstance(Components.interfaces.nsISupportsPRBool);
-          Services.obs.notifyObservers(cancelQuit, "quit-application-requested", null);
-        """)
-        self.marionette.restart(in_app=True)
-
-        # Marionette doesn't keep the former context, so restore to chrome
-        self.marionette.set_context('chrome')
+            Services.obs.notifyObservers(cancelQuit, "quit-application-requested", null);
+            """)
+        self.marionette.restart(**kwargs)
 
         # Ensure that we always have a valid browser instance available
         self.browser = self.windows.switch_to(lambda win: type(win) is BrowserWindow)
 
     def setUp(self, *args, **kwargs):
         super(BaseFirefoxTestCase, self).setUp(*args, **kwargs)
 
         self._start_handle_count = len(self.marionette.window_handles)