summaryrefslogtreecommitdiffstats
path: root/toolkit/components/places/tests/favicons/test_favicons_protocols_ref.js
blob: 4d359f7307dfbe551afccaf7abec1ce6f945ac54 (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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/**
 * This file tests the size ref on the icons protocols.
 */

const PAGE_URL = "http://icon.mozilla.org/";
const ICON16_URL = "http://places.test/favicon-normal16.png";
const ICON32_URL = "http://places.test/favicon-normal32.png";

add_task(async function () {
  await PlacesTestUtils.addVisits(PAGE_URL);
  // Add 2 differently sized favicons for this page.
  let dataURL16 = await readFileDataAsDataURL(
    do_get_file("favicon-normal16.png"),
    "image/png"
  );
  await PlacesTestUtils.setFaviconForPage(PAGE_URL, ICON16_URL, dataURL16);
  let dataURL32 = await readFileDataAsDataURL(
    do_get_file("favicon-normal32.png"),
    "image/png"
  );
  await PlacesTestUtils.setFaviconForPage(PAGE_URL, ICON32_URL, dataURL32);

  const PAGE_ICON_URL = "page-icon:" + PAGE_URL;

  await compareFavicons(
    PAGE_ICON_URL,
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON32_URL)),
    "Not specifying a ref should return the bigger icon"
  );
  // Fake window object.
  let win = { devicePixelRatio: 1.0 };
  await compareFavicons(
    PlacesUtils.urlWithSizeRef(win, PAGE_ICON_URL, 16),
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON16_URL)),
    "Size=16 should return the 16px icon"
  );
  await compareFavicons(
    PlacesUtils.urlWithSizeRef(win, PAGE_ICON_URL, 32),
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON32_URL)),
    "Size=32 should return the 32px icon"
  );
  await compareFavicons(
    PlacesUtils.urlWithSizeRef(win, PAGE_ICON_URL, 33),
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON32_URL)),
    "Size=33 should return the 32px icon"
  );
  await compareFavicons(
    PlacesUtils.urlWithSizeRef(win, PAGE_ICON_URL, 17),
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON32_URL)),
    "Size=17 should return the 32px icon"
  );
  await compareFavicons(
    PlacesUtils.urlWithSizeRef(win, PAGE_ICON_URL, 1),
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON16_URL)),
    "Size=1 should return the 16px icon"
  );
  await compareFavicons(
    PlacesUtils.urlWithSizeRef(win, PAGE_ICON_URL, 0),
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON32_URL)),
    "Size=0 should return the bigger icon"
  );
  await compareFavicons(
    PlacesUtils.urlWithSizeRef(win, PAGE_ICON_URL, -1),
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON32_URL)),
    "Invalid size should return the bigger icon"
  );

  // Add the icon also for the page with ref.
  await PlacesTestUtils.addVisits(PAGE_URL + "#other§=12");
  await setFaviconForPage(PAGE_URL + "#other§=12", ICON16_URL, false);
  await setFaviconForPage(PAGE_URL + "#other§=12", ICON32_URL, false);
  await compareFavicons(
    PlacesUtils.urlWithSizeRef(win, PAGE_ICON_URL + "#other§=12", 16),
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON16_URL)),
    "Pre-existing refs should be retained"
  );
  await compareFavicons(
    PlacesUtils.urlWithSizeRef(win, PAGE_ICON_URL + "#other§=12", 32),
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON32_URL)),
    "Pre-existing refs should be retained"
  );

  // If the ref-ed url is unknown, should still try to fetch icon for the unref-ed url.
  await compareFavicons(
    PlacesUtils.urlWithSizeRef(win, PAGE_ICON_URL + "#randomstuff", 32),
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON32_URL)),
    "Non-existing refs should be ignored"
  );

  win = { devicePixelRatio: 1.1 };
  await compareFavicons(
    PlacesUtils.urlWithSizeRef(win, PAGE_ICON_URL, 16),
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON32_URL)),
    "Size=16 with HIDPI should return the 32px icon"
  );
  await compareFavicons(
    PlacesUtils.urlWithSizeRef(win, PAGE_ICON_URL, 32),
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON32_URL)),
    "Size=32 with HIDPI should return the 32px icon"
  );

  // Check setting a different default preferred size works.
  PlacesUtils.favicons.setDefaultIconURIPreferredSize(16);
  await compareFavicons(
    PAGE_ICON_URL,
    PlacesUtils.favicons.getFaviconLinkForIcon(Services.io.newURI(ICON16_URL)),
    "Not specifying a ref should return the set default size icon"
  );
});