summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/sync/browser_synced_tabs_view.js
blob: eb1203825e568a7f9161f644909465aa307c7381 (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
73
74
75
76
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

function promiseLayout() {
  // Wait for layout to have happened.
  return new Promise(resolve =>
    requestAnimationFrame(() => requestAnimationFrame(resolve))
  );
}

add_setup(async function () {
  registerCleanupFunction(() => CustomizableUI.reset());
});

async function withOpenSyncPanel(cb) {
  let promise = BrowserTestUtils.waitForEvent(
    window,
    "ViewShown",
    true,
    e => e.target.id == "PanelUI-remotetabs"
  ).then(e => e.target.closest("panel"));

  let panel;
  try {
    gSync.openSyncedTabsPanel();
    panel = await promise;
    is(panel.state, "open", "Panel should have opened.");
    await cb(panel);
  } finally {
    panel?.hidePopup();
  }
}

add_task(async function test_button_in_bookmarks_toolbar() {
  CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_BOOKMARKS);
  CustomizableUI.setToolbarVisibility(CustomizableUI.AREA_BOOKMARKS, "never");
  await promiseLayout();

  await withOpenSyncPanel(async panel => {
    is(
      panel.anchorNode.closest("toolbarbutton"),
      PanelUI.menuButton,
      "Should have anchored on the menu button because the sync button isn't visible."
    );
  });
});

add_task(async function test_button_in_navbar() {
  CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_NAVBAR, 0);
  await promiseLayout();
  await withOpenSyncPanel(async panel => {
    is(
      panel.anchorNode.closest("toolbarbutton").id,
      "sync-button",
      "Should have anchored on the sync button itself."
    );
  });
});

add_task(async function test_button_in_overflow() {
  CustomizableUI.addWidgetToArea(
    "sync-button",
    CustomizableUI.AREA_FIXED_OVERFLOW_PANEL,
    0
  );
  await promiseLayout();
  await withOpenSyncPanel(async panel => {
    is(
      panel.anchorNode.closest("toolbarbutton").id,
      "nav-bar-overflow-button",
      "Should have anchored on the overflow button."
    );
  });
});