summaryrefslogtreecommitdiffstats
path: root/devtools/client/responsive/test/browser/browser_permission_doorhanger.js
blob: 25c10b9bf52b19a792ac774ca28abc87ae711127 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

// Test that permission popups asking for user approval still appear in RDM
const DUMMY_URL = "http://example.com/";
const TEST_URL = `${URL_ROOT}geolocation.html`;
const TEST_SURL = TEST_URL.replace("http://example.com", "https://example.com");

function waitForGeolocationPrompt(win, browser) {
  return new Promise(resolve => {
    win.PopupNotifications.panel.addEventListener(
      "popupshown",
      function popupShown() {
        const notification = win.PopupNotifications.getNotification(
          "geolocation",
          browser
        );
        if (notification) {
          win.PopupNotifications.panel.removeEventListener(
            "popupshown",
            popupShown
          );
          resolve();
        }
      }
    );
  });
}

addRDMTask(
  null,
  async function () {
    // we want to explicitly tests http and https, hence
    // disabling https-first mode for this test.
    await pushPref("dom.security.https_first", false);

    const tab = await addTab(DUMMY_URL);
    const browser = tab.linkedBrowser;
    const win = browser.ownerGlobal;

    let waitPromptPromise = waitForGeolocationPrompt(win, browser);

    // Checks if a geolocation permission doorhanger appears when openning a page
    // requesting geolocation
    await navigateTo(TEST_SURL);
    await waitPromptPromise;

    ok(true, "Permission doorhanger appeared without RDM enabled");

    // Lets switch back to the dummy website and enable RDM
    await navigateTo(DUMMY_URL);
    const { ui } = await openRDM(tab);
    await waitForDeviceAndViewportState(ui);

    const newBrowser = ui.getViewportBrowser();
    waitPromptPromise = waitForGeolocationPrompt(win, newBrowser);

    // Checks if the doorhanger appeared again when reloading the geolocation
    // page inside RDM
    await navigateTo(TEST_SURL);

    await waitPromptPromise;

    ok(true, "Permission doorhanger appeared inside RDM");

    await closeRDM(tab);
    await removeTab(tab);
  },
  { onlyPrefAndTask: true }
);