Backed out changeset 7b2ffe9a4d06 (bug 1869605) for causing bc failures on browser_no...
[gecko.git] / browser / components / firefoxview / tests / browser / browser_tab_pickup_visibility.js
blobd9ec59a57fb7436168d12a5a400ec0dcc59b245b
1 /* Any copyright is dedicated to the Public Domain.
2  * http://creativecommons.org/publicdomain/zero/1.0/ */
4 registerCleanupFunction(async function () {
5   Services.prefs.clearUserPref(TAB_PICKUP_STATE_PREF);
6 });
8 async function setup({ open } = {}) {
9   TabsSetupFlowManager.resetInternalState();
10   // sanity check initial values
11   ok(
12     !TabsSetupFlowManager.hasVisibleViews,
13     "Initially hasVisibleViews is false"
14   );
15   is(
16     TabsSetupFlowManager._viewVisibilityStates.size,
17     0,
18     "Initially, there are no visible views"
19   );
20   ok(
21     !isFirefoxViewTabSelected(),
22     "During setup, the about:firefoxview tab is not selected"
23   );
25   if (typeof open == "undefined") {
26     Services.prefs.clearUserPref(TAB_PICKUP_STATE_PREF);
27   } else {
28     await SpecialPowers.pushPrefEnv({
29       set: [[TAB_PICKUP_STATE_PREF, open]],
30     });
31   }
32   const sandbox = sinon.createSandbox();
33   sandbox.stub(TabsSetupFlowManager, "isTabSyncSetupComplete").get(() => true);
34   return sandbox;
37 add_task(async function test_tab_pickup_visibility() {
38   /* Confirm the correct number of tab-pickup views are registered as visible */
39   const sandbox = await setup();
41   await withFirefoxView({ win: window }, async function (browser) {
42     const { document } = browser.contentWindow;
43     let tabPickupContainer = document.querySelector("#tab-pickup-container");
45     ok(tabPickupContainer.open, "Tab Pickup container should be open");
46     ok(isFirefoxViewTabSelected(), "The firefox view tab is selected");
47     ok(TabsSetupFlowManager.hasVisibleViews, "hasVisibleViews");
48     is(TabsSetupFlowManager._viewVisibilityStates.size, 1, "One view");
50     info("Opening and switching to different tab to background fx-view");
51     let newTab = await BrowserTestUtils.openNewForegroundTab(
52       gBrowser,
53       "about:mozilla"
54     );
55     ok(!isFirefoxViewTabSelected(), "The firefox view tab is not selected");
56     ok(
57       !TabsSetupFlowManager.hasVisibleViews,
58       "no view visible when fx-view is not active"
59     );
60     let newWin = await BrowserTestUtils.openNewBrowserWindow();
61     await openFirefoxViewTab(newWin);
63     ok(
64       isFirefoxViewTabSelected(newWin),
65       "The firefox view tab in the new window is selected"
66     );
67     ok(
68       TabsSetupFlowManager.hasVisibleViews,
69       "view registered as visible when fx-view is opened in a new window"
70     );
71     is(TabsSetupFlowManager._viewVisibilityStates.size, 2, "2 tracked views");
73     await BrowserTestUtils.closeWindow(newWin);
75     ok(
76       !isFirefoxViewTabSelected(),
77       "The firefox view tab in the original window is not selected"
78     );
79     ok(
80       !TabsSetupFlowManager.hasVisibleViews,
81       "no visible views when fx-view is not the active tab in the remaining window"
82     );
83     is(
84       TabsSetupFlowManager._viewVisibilityStates.size,
85       1,
86       "Back to one tracked view"
87     );
89     // Switch back to FxView:
90     await BrowserTestUtils.switchTab(
91       gBrowser,
92       gBrowser.getTabForBrowser(browser)
93     );
95     ok(
96       isFirefoxViewTabSelected(),
97       "The firefox view tab in the original window is now selected"
98     );
99     ok(
100       TabsSetupFlowManager.hasVisibleViews,
101       "View visibility updated when we switch tab"
102     );
103     BrowserTestUtils.removeTab(newTab);
104   });
105   sandbox.restore();
106   await SpecialPowers.popPrefEnv();
107   ok(
108     !TabsSetupFlowManager.hasVisibleViews,
109     "View visibility updated after withFirefoxView"
110   );
113 add_task(async function test_instance_closed() {
114   /* Confirm tab-pickup views are correctly accounted for when toggled closed */
115   const sandbox = await setup({ open: false });
116   await withFirefoxView({ win: window }, async function (browser) {
117     const { document } = browser.contentWindow;
118     info(
119       "tab-pickup.open pref: " +
120         Services.prefs.getBoolPref(
121           "browser.tabs.firefox-view.ui-state.tab-pickup.open"
122         )
123     );
124     info(
125       "isTabSyncSetupComplete: " + TabsSetupFlowManager.isTabSyncSetupComplete
126     );
127     let tabPickupContainer = document.querySelector("#tab-pickup-container");
128     ok(!tabPickupContainer.open, "Tab Pickup container should be closed");
129     info(
130       "_viewVisibilityStates" +
131         JSON.stringify(
132           Array.from(TabsSetupFlowManager._viewVisibilityStates.values()),
133           null,
134           2
135         )
136     );
137     ok(!TabsSetupFlowManager.hasVisibleViews, "no visible views");
138     is(
139       TabsSetupFlowManager._viewVisibilityStates.size,
140       1,
141       "One registered view"
142     );
144     tabPickupContainer.open = true;
145     await TestUtils.waitForTick();
146     ok(TabsSetupFlowManager.hasVisibleViews, "view visible");
147   });
148   sandbox.restore();