Bug 1360687 - Update puppeteer notification class for webextensions. draft
authorHenrik Skupin <mail@hskupin.info>
Thu, 29 Jun 2017 15:46:45 -0700
changeset 602349 0e1ee64152fb957ae9732b5b2a186289adad0a6f
parent 601255 cc903e3f61894e60c3b0efaf05e9a446d1d85888
child 602350 18509848b93ff38e17db82f24f6295493b0c95be
push id66394
push userbmo:hskupin@gmail.com
push dateThu, 29 Jun 2017 22:49:16 +0000
bugs1360687
milestone56.0a1
Bug 1360687 - Update puppeteer notification class for webextensions. 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..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d0768103d56491bf9c24f49832b25787be7438e5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
new file mode 100644
index 0000000000000000000000000000000000000000..5363911af16be0fb2b6aab4c3d31f2f8b6126bbd
GIT binary patch
literal 4221
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
new file mode 100644
index 0000000000000000000000000000000000000000..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')