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 380817 309128b2a918c251e27d2d7ca0f3530790af54ac
parent 374045 7195c2ccf18841f933bca6c6b825c4ceaafbf0d1
child 523828 a8aa16eb1bddbf804aa2c2091256b82a8970d01d
push id21334
push userbmo:bennyjr169@gmail.com
push dateThu, 23 Jun 2016 13:17:19 +0000
reviewerswhimboo
bugs1237396
milestone49.0a1
Bug 1237396 - Add safebrowsing test for initial download of files. r?whimboo More adjustment on the if statement within the base class. MozReview-Commit-ID: HjifORUSWXo
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,83 @@
+# 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 firefox_ui_harness.testcases import FirefoxTestCase
+from marionette_driver import Wait
+
+
+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):
+        try:
+            self.restart(clean=True)
+        finally:
+            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,30 +61,35 @@ 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, **kwargs):
         """Restart Firefox and re-initialize data.
 
         :param flags: Specific restart flags for Firefox
         """
+
         # 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"]
-                                     .createInstance(Components.interfaces.nsISupportsPRBool);
-          Services.obs.notifyObservers(cancelQuit, "quit-application-requested", null);
-        """)
-        self.marionette.restart(in_app=True)
+        with self.marionette.using_context('chrome'):
+            self.marionette.execute_script("""
+                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);
+                """)
+        if kwargs.get('clean'):
+            self.marionette.restart(clean=True)
+        else:
+            self.marionette.restart(in_app=True)
 
         # Marionette doesn't keep the former context, so restore to chrome
         self.marionette.set_context('chrome')
 
         # 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):