Bug 1360687 - Update puppeteer notification class for webextensions. r=davehunt
authorHenrik Skupin <mail@hskupin.info>
Thu, 29 Jun 2017 15:46:45 -0700
changeset 418267 02f8be2ae22b852901bbac35e94c749c0d31901d
parent 418266 2998d8a553945a6191185c1d50909612fd8317ca
child 418268 ace24caed618ae1c46504720153be808d50a47a6
push id1517
push userjlorenzo@mozilla.com
push dateThu, 14 Sep 2017 16:50:54 +0000
treeherdermozilla-release@3b41fd564418 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdavehunt
bugs1360687
milestone56.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1360687 - Update puppeteer notification class for webextensions. r=davehunt To support webextensions in Puppeteer the current restartless extension gets replaced by a webextension. It allow us to test at least the permission notification. This patch only adds basic support. MozReview-Commit-ID: FKq76qcOxKu
testing/firefox-ui/resources/addons/extensions/restartless_addon_signed.xpi
testing/firefox-ui/resources/addons/extensions/restartless_addon_unsigned.xpi
testing/firefox-ui/resources/addons/extensions/webextension-signed.xpi
testing/firefox-ui/resources/addons/extensions/webextension-unsigned.xpi
testing/firefox-ui/tests/puppeteer/test_notifications.py
testing/marionette/puppeteer/firefox/firefox_puppeteer/ui/browser/notifications.py
testing/marionette/puppeteer/firefox/firefox_puppeteer/ui/browser/window.py
deleted file mode 100644
index ed86213e7917b3eba0816b547759fcc0cbef6157..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d0768103d56491bf9c24f49832b25787be7438e5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5363911af16be0fb2b6aab4c3d31f2f8b6126bbd
GIT binary patch
literal 4221
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cf0fad63b542d37e264cc510dc1f272cf939606b
GIT binary patch
literal 310
zc$^FHW@Zs#U|`^2h|Ij>#Thk&u?@&O2*kV$G7Pzid6{Xc#U*-K#rb)mA)E}%Uc4cZ
z_CQ=(!Og(P@|BT+0jxc@$C0mDLBRF<oFt>ympX2R?eQ@_bYX&)l;T~9cX1b8&F}vG
z`Tp#E76w0&J&$M1laE_GpZQxrJQs(_$GQdlh8HcIZmHUIJk1E(zvS{i<v+^;VplKL
zHq|}-f_Liv9h-SS9DQax|KjaM`P&}02l}0yHG6i>%B!0$_bn}ZJGZ@$Ej-Ze!~|Ed
u_yBK4COKwY-jQGc0icT+8X7??G|#a@Jcs770B=?{h&D!sU?6=KYzP42pk&zq
--- a/testing/firefox-ui/tests/puppeteer/test_notifications.py
+++ b/testing/firefox-ui/tests/puppeteer/test_notifications.py
@@ -1,16 +1,16 @@
 # 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/.
 
 from firefox_puppeteer import PuppeteerMixin
 from firefox_puppeteer.ui.browser.notifications import (
+    AddOnInstallConfirmationNotification,
     AddOnInstallFailedNotification,
-    AddOnInstallConfirmationNotification,
 )
 from marionette_driver import By
 from marionette_driver.errors import TimeoutException
 from marionette_harness import MarionetteTestCase
 
 
 class TestNotifications(PuppeteerMixin, MarionetteTestCase):
 
@@ -34,17 +34,17 @@ class TestNotifications(PuppeteerMixin, 
             if self.browser.notification:
                 self.browser.notification.close(force=True)
         finally:
             super(TestNotifications, self).tearDown()
 
     def test_open_close_notification(self):
         """Trigger and dismiss a notification"""
         self.assertIsNone(self.browser.notification)
-        self.trigger_addon_notification('restartless_addon_signed.xpi')
+        self.trigger_addon_notification('webextension-signed.xpi')
         self.browser.notification.close()
         self.assertIsNone(self.browser.notification)
 
     def test_wait_for_notification_timeout(self):
         """Wait for a notification when one is not shown"""
         message = 'No notification was shown'
         with self.assertRaisesRegexp(TimeoutException, message):
             self.browser.wait_for_notification()
@@ -53,32 +53,32 @@ class TestNotifications(PuppeteerMixin, 
         """Wait for a notification when one is not shown"""
         message = 'AddOnInstallFailedNotification was not shown'
         with self.assertRaisesRegexp(TimeoutException, message):
             self.browser.wait_for_notification(AddOnInstallFailedNotification)
 
     def test_wait_for_no_notification_timeout(self):
         """Wait for no notification when one is shown"""
         message = 'Unexpected notification shown'
-        self.trigger_addon_notification('restartless_addon_signed.xpi')
+        self.trigger_addon_notification('webextension-signed.xpi')
         with self.assertRaisesRegexp(TimeoutException, message):
             self.browser.wait_for_notification(None)
 
     def test_notification_with_origin(self):
         """Trigger a notification with an origin"""
-        self.trigger_addon_notification('restartless_addon_signed.xpi')
+        self.trigger_addon_notification('webextension-signed.xpi')
         self.assertIn(self.browser.notification.origin, self.marionette.baseurl)
         self.assertIsNotNone(self.browser.notification.label)
 
     def test_addon_install_failed_notification(self):
         """Trigger add-on blocked notification using an unsigned add-on"""
         # Ensure that installing unsigned extensions will fail
         self.marionette.set_pref('xpinstall.signatures.required', True)
 
         self.trigger_addon_notification(
-            'restartless_addon_unsigned.xpi',
+            'webextension-unsigned.xpi',
             notification=AddOnInstallFailedNotification)
 
     def trigger_addon_notification(self, addon, notification=AddOnInstallConfirmationNotification):
         with self.marionette.using_context('content'):
             self.marionette.navigate(self.addons_url)
             self.marionette.find_element(By.LINK_TEXT, addon).click()
         self.browser.wait_for_notification(notification)
--- a/testing/marionette/puppeteer/firefox/firefox_puppeteer/ui/browser/notifications.py
+++ b/testing/marionette/puppeteer/firefox/firefox_puppeteer/ui/browser/notifications.py
@@ -66,41 +66,17 @@ class AddOnInstallBlockedNotification(Ba
         return self.element.find_element(
             By.ANON_ATTRIBUTE, {'anonid': 'button'}).find_element(
             By.ANON_ATTRIBUTE, {'anonid': 'button'})
 
 
 class AddOnInstallConfirmationNotification(BaseNotification):
     """Add-on install confirmation notification."""
 
-    @property
-    def addon_name(self):
-        """Provide access to the add-on name.
-
-        :returns: The add-on name.
-        """
-        label = self.element.find_element(
-            By.CSS_SELECTOR, '#addon-install-confirmation-content label')
-        return label.get_attribute('value')
-
-    def cancel_button(self):
-        """Provide access to the cancel button.
-
-        :returns: The cancel button.
-        """
-        return self.element.find_element(
-            By.ID, 'addon-install-confirmation-cancel')
-
-    def install_button(self):
-        """Provide access to the install button.
-
-        :returns: The install button.
-        """
-        return self.element.find_element(
-            By.ID, 'addon-install-confirmation-accept')
+    pass
 
 
 class AddOnInstallCompleteNotification(BaseNotification):
     """Add-on install complete notification."""
 
     pass
 
 
--- a/testing/marionette/puppeteer/firefox/firefox_puppeteer/ui/browser/window.py
+++ b/testing/marionette/puppeteer/firefox/firefox_puppeteer/ui/browser/window.py
@@ -83,17 +83,17 @@ class BrowserWindow(BaseWindow):
         return self._navbar
 
     @property
     def notification(self):
         """Provides access to the currently displayed notification."""
 
         notifications_map = {
             'addon-install-blocked-notification': AddOnInstallBlockedNotification,
-            'addon-install-confirmation-notification': AddOnInstallConfirmationNotification,
+            'addon-webext-permissions-notification': AddOnInstallConfirmationNotification,
             'addon-install-complete-notification': AddOnInstallCompleteNotification,
             'addon-install-failed-notification': AddOnInstallFailedNotification,
             'addon-progress-notification': AddOnProgressNotification,
         }
 
         try:
             notification = self.window_element.find_element(
                 By.CSS_SELECTOR, '#notification-popup popupnotification')