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);
8 async function setup({ open } = {}) {
9 TabsSetupFlowManager.resetInternalState();
10 // sanity check initial values
12 !TabsSetupFlowManager.hasVisibleViews,
13 "Initially hasVisibleViews is false"
16 TabsSetupFlowManager._viewVisibilityStates.size,
18 "Initially, there are no visible views"
21 !isFirefoxViewTabSelected(),
22 "During setup, the about:firefoxview tab is not selected"
25 if (typeof open == "undefined") {
26 Services.prefs.clearUserPref(TAB_PICKUP_STATE_PREF);
28 await SpecialPowers.pushPrefEnv({
29 set: [[TAB_PICKUP_STATE_PREF, open]],
32 const sandbox = sinon.createSandbox();
33 sandbox.stub(TabsSetupFlowManager, "isTabSyncSetupComplete").get(() => true);
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(
55 ok(!isFirefoxViewTabSelected(), "The firefox view tab is not selected");
57 !TabsSetupFlowManager.hasVisibleViews,
58 "no view visible when fx-view is not active"
60 let newWin = await BrowserTestUtils.openNewBrowserWindow();
61 await openFirefoxViewTab(newWin);
64 isFirefoxViewTabSelected(newWin),
65 "The firefox view tab in the new window is selected"
68 TabsSetupFlowManager.hasVisibleViews,
69 "view registered as visible when fx-view is opened in a new window"
71 is(TabsSetupFlowManager._viewVisibilityStates.size, 2, "2 tracked views");
73 await BrowserTestUtils.closeWindow(newWin);
76 !isFirefoxViewTabSelected(),
77 "The firefox view tab in the original window is not selected"
80 !TabsSetupFlowManager.hasVisibleViews,
81 "no visible views when fx-view is not the active tab in the remaining window"
84 TabsSetupFlowManager._viewVisibilityStates.size,
86 "Back to one tracked view"
89 // Switch back to FxView:
90 await BrowserTestUtils.switchTab(
92 gBrowser.getTabForBrowser(browser)
96 isFirefoxViewTabSelected(),
97 "The firefox view tab in the original window is now selected"
100 TabsSetupFlowManager.hasVisibleViews,
101 "View visibility updated when we switch tab"
103 BrowserTestUtils.removeTab(newTab);
106 await SpecialPowers.popPrefEnv();
108 !TabsSetupFlowManager.hasVisibleViews,
109 "View visibility updated after withFirefoxView"
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;
119 "tab-pickup.open pref: " +
120 Services.prefs.getBoolPref(
121 "browser.tabs.firefox-view.ui-state.tab-pickup.open"
125 "isTabSyncSetupComplete: " + TabsSetupFlowManager.isTabSyncSetupComplete
127 let tabPickupContainer = document.querySelector("#tab-pickup-container");
128 ok(!tabPickupContainer.open, "Tab Pickup container should be closed");
130 "_viewVisibilityStates" +
132 Array.from(TabsSetupFlowManager._viewVisibilityStates.values()),
137 ok(!TabsSetupFlowManager.hasVisibleViews, "no visible views");
139 TabsSetupFlowManager._viewVisibilityStates.size,
141 "One registered view"
144 tabPickupContainer.open = true;
145 await TestUtils.waitForTick();
146 ok(TabsSetupFlowManager.hasVisibleViews, "view visible");