Bug 1268619 - Add a mozscreenshots configuration for site permission notifications
MozReview-Commit-ID: 8mryMwYOxxn
--- a/browser/tools/mozscreenshots/browser.ini
+++ b/browser/tools/mozscreenshots/browser.ini
@@ -1,6 +1,8 @@
[DEFAULT]
subsuite = screenshots
support-files =
head.js
+ mozscreenshots/extension/lib/notifications.html
+ mozscreenshots/extension/lib/borderify.xpi
[browser_screenshots.js]
--- a/browser/tools/mozscreenshots/moz.build
+++ b/browser/tools/mozscreenshots/moz.build
@@ -4,15 +4,16 @@
# 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/.
BROWSER_CHROME_MANIFESTS += [
# Each test is in it's own directory so it gets run in a clean profile with
# run-by-dir.
'browser.ini',
'devtools/browser.ini',
+ 'permissionPrompts/browser.ini',
'preferences/browser.ini',
'primaryUI/browser.ini',
]
TEST_DIRS += [
'mozscreenshots/extension',
]
new file mode 100644
--- /dev/null
+++ b/browser/tools/mozscreenshots/mozscreenshots/extension/configurations/PermissionPrompts.jsm
@@ -0,0 +1,130 @@
+/* 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/. */
+
+"use strict";
+
+this.EXPORTED_SYMBOLS = ["PermissionPrompts"];
+
+const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
+
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/Task.jsm");
+Cu.import("resource:///modules/E10SUtils.jsm");
+Cu.import("resource://testing-common/ContentTask.jsm");
+Cu.import("resource://testing-common/BrowserTestUtils.jsm");
+
+const URL = "https://example.com/browser/browser/tools/mozscreenshots/mozscreenshots/extension/lib/notifications.html";
+let lastTab = null;
+
+this.PermissionPrompts = {
+ init(libDir) {
+ Services.prefs.setBoolPref("media.navigator.permission.fake", true);
+ Services.prefs.setCharPref("media.getusermedia.screensharing.allowed_domains", "example.com");
+ Services.prefs.setBoolPref("extensions.install.requireBuiltInCerts", false);
+ },
+
+ configurations: {
+ shareDevices: {
+ applyConfig: Task.async(function*() {
+ yield closeLastTab();
+ yield clickOn("#webRTC-shareDevices");
+ }),
+ },
+
+ shareMicrophone: {
+ applyConfig: Task.async(function*() {
+ yield closeLastTab();
+ yield clickOn("#webRTC-shareMicrophone");
+ }),
+ },
+
+ shareVideoAndMicrophone: {
+ applyConfig: Task.async(function*() {
+ yield closeLastTab();
+ yield clickOn("#webRTC-shareDevices2");
+ }),
+ },
+
+ shareScreen: {
+ applyConfig: Task.async(function*() {
+ yield closeLastTab();
+ yield clickOn("#webRTC-shareScreen");
+ }),
+ },
+
+ geo: {
+ applyConfig: Task.async(function*() {
+ yield closeLastTab();
+ yield clickOn("#geo");
+ }),
+ },
+
+ loginCapture: {
+ applyConfig: Task.async(function*() {
+ yield closeLastTab();
+ yield clickOn("#login-capture", URL);
+ }),
+ },
+
+ notifications: {
+ applyConfig: Task.async(function*() {
+ yield closeLastTab();
+ yield clickOn("#web-notifications", URL);
+ }),
+ },
+
+ addons: {
+ applyConfig: Task.async(function*() {
+ Services.prefs.setBoolPref("xpinstall.whitelist.required", true);
+
+ yield closeLastTab();
+ yield clickOn("#addons", URL);
+ }),
+ },
+
+ addonsNoWhitelist: {
+ applyConfig: Task.async(function*() {
+ Services.prefs.setBoolPref("xpinstall.whitelist.required", false);
+
+ let browserWindow = Services.wm.getMostRecentWindow("navigator:browser");
+ let notification = browserWindow.document.getElementById("addon-install-confirmation-notification");
+
+ yield closeLastTab();
+ yield clickOn("#addons", URL);
+
+ // we want to skip the progress-notification, so we wait for
+ // the install-confirmation screen to be "not hidden" = shown
+ yield BrowserTestUtils.waitForCondition(() => !notification.hasAttribute("hidden"),
+ "addon install confirmation did not show", 200);
+ }),
+ },
+ },
+};
+
+function* closeLastTab(selector) {
+ if (lastTab) {
+ let browserWindow = Services.wm.getMostRecentWindow("navigator:browser");
+ yield BrowserTestUtils.removeTab(lastTab);
+ lastTab = null;
+ }
+}
+
+function* clickOn(selector) {
+ let browserWindow = Services.wm.getMostRecentWindow("navigator:browser");
+
+ let tab = yield BrowserTestUtils.openNewForegroundTab(browserWindow.gBrowser, URL);
+
+ // save the tab so we can close it later
+ lastTab = tab;
+
+ yield ContentTask.spawn(tab.linkedBrowser, selector, function* (arg) {
+ E10SUtils.wrapHandlingUserInput(content, true, function() {
+ let element = content.document.querySelector(arg);
+ element.click();
+ });
+ });
+
+ // wait for the popup to actually be shown before making the screenshot
+ yield BrowserTestUtils.waitForEvent(browserWindow.PopupNotifications.panel, "popupshown");
+}
new file mode 100644
index 0000000000000000000000000000000000000000..66ae92ed21152aa799d6d0a273bae874ecb4438f
GIT binary patch
literal 1611
zc$^FHW@h1H0D;TC%RCs602>fzCg<lB>jyy9aDdf(y3;Vjjgf&Nj){SR7bu#Wn3tKB
zT3n)+Rh*v}JJHwguz^79cgxn)ve0B^t)Q!-3SU`7lNwi@*top&VEv}MK`W}tbC$PE
zd0H{=dF|(CA)y?JjE&VV7j0o%FHk3>q|nwB8l=F_wDlVI2aTvBQ=H~su)5~xFw6Cx
z_hrT0{Y!&-BJK-rVRWeN(OaV-TELJhTVXUYz~JlYHnr)uW;w(!jFnfOp-{Zl&giX3
z%j|=}@AiGLQO-(x!snF3_u%k>%6O@^%o7*RU;kw<xleif;plwRluv2zL-YOwl^K2e
zJ*{B%O0l+Oe-l_%J!EoO%)Ve&E62Ql&6903FCPik3fdX*?B&ysi`IyHKk{i0{%@l{
z(fIk4CpzwSKW{Sr-;g|0z1t>hOZA*15o@|NT=Xk*wwO#V`S3{bZLG?3``bsRn022m
zc>m^4n9AbBotjhF<}J-h3!gsw;oBF#>^j`cCdqAEe1F@jb65FM13anpb#ow)mjJ{(
zK%A6cl#*JMnN|r5@ypjAebUm^3-r+R(h2tn@i?XL<*6H_aZ3NJcc8{ek5G@3{(5J9
z&uU-vKIOmi%HvCyo;!(Z>a9HEd9^ufb7+8(?ur17bLUU`1ZsHs25x%B#DHpbwvUPL
zVo=&(fW$Q<J@|M!yZQyY>h?JDH5mxFexH}br?9qDkH>mZr*?Q%W6&|9g(V)=Gj=>y
zsIv4+axMF>{(f(Dx5G5%GnaQiyOE&7=Wfbk?k~T9CCQ5CL&u%wlrM+g*c`gb;btUv
zZpMk$r4s_SB{+TFe5{4HNAbFt_TgHlI-Tbt7ddP{KiGF(Dnx1GtH2KD!ff9or-Iub
zoJ{JQcA<-B>9w-2Z{mYx=Eluj@;ZEC&%M=i!)BwUT-F&nUrzvej=<E*38aHu9bJ4~
z^>R~U`wwOvG2n4||F27N=Tz0b@5@E1!g5ptJ=PrEwA*+8zFRsXyVN;NW>sEJzA|aY
ziISEJ-+#ocaMGHzsrAFgj>i4k>B46tX8$xizE*WxHb=gK%h|eh8zP>B>A(2*r|s%4
z?pK)^|F#vanNzcp>lAyQNwwSQb#B{V_vc9SMm_t^7v<OL*O#=xOzp1cC(k4L6Fpkr
zJySWK5D@tNOUyT+jc?b<xcMIcuztR7)pmF0`2`Eq?{#lgEWEQKV5<H-K9k8d$;)+w
zqrcY8I*jJs{vDTI-v;s?0<kbW@*t^4*Th1vATRwj&xhjYPbWP}N=SI{^-BRK(<L^A
zGY8pJ4$rLH#;iFlN&UP4pTdfV9xoX_S#sMbbxTU@Xmy-1G4YxV=YoXI%e#|3+#cUv
z-B-iQ#dJ<wKkU!-x?2AQsjVMx)!**l^l9Cj)Qk_G>gGM(|NBKx`o`<`U2cCdin)7j
zW_;}GnSbVYrncUEdTh?~O`dPG%x^N^lil&*-LX2hW1+L2@@|qAdLmn9v_CW9@7V$`
zv&PuxYytBQT0LBFw{d5UVg2;`+h4zbaR2au6CWPf-CtGKH^YC{zR3;e5<irDEslIX
z<pK*ZAu}?GFyJoQAV2_0!wNc>9_&RO0;r%DeCS%yGc5v4Wkk)w=sMB!90CY1q2)ky
pt>_6H0q!v&C3kdf=m`Y@&N5?7HUZwOY>;qdV~7FTb(00e0{{{5ZKMDI
new file mode 100644
--- /dev/null
+++ b/browser/tools/mozscreenshots/mozscreenshots/extension/lib/notifications.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Notifications Test</title>
+</head>
+<body>
+ <div>
+ <button id="geo" onclick="toggleGeo()">Geolocation</button>
+ <button id="webRTC-shareDevices" onclick="shareDevice({video: true, fake: true});">Video</button>
+ <button id="webRTC-shareMicrophone" onclick="shareDevice({audio: true, fake: true});">Audio</button>
+ <button id="webRTC-shareDevices2" onclick="shareDevice({audio: true, video: true, fake: true});">Audio and Video</button>
+ <button id="webRTC-shareScreen" onclick="shareDevice({video: {mediaSource: 'screen'}});">Screen</button>
+ <button id="web-notifications" onclick="toggleNotification()">web-notifications</button>
+ <a id="addons" href="borderify.xpi">Install Add-On</a>
+ <form>
+ <input type="email" id="email" value="email@example.com" />
+ <input type="password" id="password" value="123456" />
+ <button type="submit" id="login-capture">Submit</button>
+ </form>
+ </div>
+
+ <script type="application/javascript">
+ function toggleGeo() {
+ navigator.geolocation.getCurrentPosition(() => {});
+ }
+ function toggleNotification() {
+ Notification.requestPermission();
+ }
+ function shareDevice(config) {
+ navigator.mediaDevices.getUserMedia(config);
+ }
+ </script>
+
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/tools/mozscreenshots/permissionPrompts/browser.ini
@@ -0,0 +1,6 @@
+[DEFAULT]
+subsuite = screenshots
+support-files =
+ ../head.js
+
+[browser_permissionPrompts.js]
new file mode 100644
--- /dev/null
+++ b/browser/tools/mozscreenshots/permissionPrompts/browser_permissionPrompts.js
@@ -0,0 +1,14 @@
+/* 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/. */
+
+"use strict";
+
+add_task(function* capture() {
+ if (!shouldCapture()) {
+ return;
+ }
+ let sets = ["LightweightThemes", "PermissionPrompts"];
+
+ yield TestRunner.start(sets);
+});