summaryrefslogtreecommitdiffstats
path: root/browser/components/migration/tests/unit/test_IE_bookmarks.js
blob: 4055797b1c554a42222ed909ee45762ea62def57 (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
"use strict";

const { CustomizableUI } = ChromeUtils.import(
  "resource:///modules/CustomizableUI.jsm"
);

add_task(async function() {
  let migrator = await MigrationUtils.getMigrator("ie");
  // Sanity check for the source.
  Assert.ok(await migrator.isSourceAvailable(), "Check migrator source");

  // Since this test doesn't mock out the favorites, execution is dependent
  // on the actual favorites stored on the local machine's IE favorites database.
  // As such, we can't assert that bookmarks were migrated to both the bookmarks
  // menu and the bookmarks toolbar.
  let bookmarkRoots = 0;
  let itemCount = 0;
  let listener = events => {
    for (let event of events) {
      if (event.itemType == PlacesUtils.bookmarks.TYPE_BOOKMARK) {
        if (event.parentGuid == PlacesUtils.bookmarks.toolbarGuid) {
          bookmarkRoots |=
            MigrationUtils.SOURCE_BOOKMARK_ROOTS_BOOKMARKS_TOOLBAR;
        } else if (event.parentGuid == PlacesUtils.bookmarks.menuGuid) {
          bookmarkRoots |= MigrationUtils.SOURCE_BOOKMARK_ROOTS_BOOKMARKS_MENU;
        }
        info("bookmark added: " + event.parentGuid);
        itemCount++;
      }
    }
  };
  PlacesUtils.observers.addListener(["bookmark-added"], listener);
  let observerNotified = false;
  Services.obs.addObserver((aSubject, aTopic, aData) => {
    let [toolbar, visibility] = JSON.parse(aData);
    Assert.equal(
      toolbar,
      CustomizableUI.AREA_BOOKMARKS,
      "Notification should be received for bookmarks toolbar"
    );
    Assert.equal(
      visibility,
      "true",
      "Notification should say to reveal the bookmarks toolbar"
    );
    observerNotified = true;
  }, "browser-set-toolbar-visibility");

  await promiseMigration(migrator, MigrationUtils.resourceTypes.BOOKMARKS);
  PlacesUtils.observers.removeListener(["bookmark-added"], listener);
  Assert.equal(
    MigrationUtils._importQuantities.bookmarks,
    itemCount,
    "Ensure telemetry matches actual number of imported items."
  );
  await TestUtils.waitForCondition(() => {
    let snapshot = Services.telemetry.getSnapshotForKeyedHistograms(
      "main",
      false
    ).parent.FX_MIGRATION_BOOKMARKS_ROOTS;
    if (!snapshot || !snapshot.ie) {
      return false;
    }
    info(`Expected ${bookmarkRoots}, got ${snapshot.ie.sum}`);
    return snapshot.ie.sum == bookmarkRoots;
  }, "Wait until telemetry is updated");

  // Check the bookmarks have been imported to all the expected parents.
  Assert.ok(observerNotified, "The observer should be notified upon migration");
});