|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 "use strict"; |
|
5 |
|
6 const URL = getRootDirectory(gTestPath) + "browser_pageStyle_sample.html"; |
|
7 const URL_NESTED = getRootDirectory(gTestPath) + "browser_pageStyle_sample_nested.html"; |
|
8 |
|
9 /** |
|
10 * This test ensures that page style information is correctly persisted. |
|
11 */ |
|
12 add_task(function page_style() { |
|
13 let tab = gBrowser.addTab(URL); |
|
14 let browser = tab.linkedBrowser; |
|
15 yield promiseBrowserLoaded(browser); |
|
16 let sheets = yield getStyleSheets(browser); |
|
17 |
|
18 // Enable all style sheets one by one. |
|
19 for (let [title, disabled] of sheets) { |
|
20 yield enableStyleSheetsForSet(browser, title); |
|
21 |
|
22 let tab2 = gBrowser.duplicateTab(tab); |
|
23 yield promiseTabRestored(tab2); |
|
24 |
|
25 let sheets = yield getStyleSheets(tab2.linkedBrowser); |
|
26 let enabled = sheets.filter(([title, disabled]) => !disabled); |
|
27 |
|
28 if (title.startsWith("fail_")) { |
|
29 ok(!enabled.length, "didn't restore " + title); |
|
30 } else { |
|
31 ok(enabled.length == 1 && enabled[0][0] == title, "restored " + title); |
|
32 } |
|
33 |
|
34 gBrowser.removeTab(tab2); |
|
35 } |
|
36 |
|
37 // Disable all styles and verify that this is correctly persisted. |
|
38 yield setAuthorStyleDisabled(browser, true); |
|
39 |
|
40 let tab2 = gBrowser.duplicateTab(tab); |
|
41 yield promiseTabRestored(tab2); |
|
42 |
|
43 let authorStyleDisabled = yield getAuthorStyleDisabled(tab2.linkedBrowser); |
|
44 ok(authorStyleDisabled, "disabled all stylesheets"); |
|
45 |
|
46 // Clean up. |
|
47 gBrowser.removeTab(tab); |
|
48 gBrowser.removeTab(tab2); |
|
49 }); |
|
50 |
|
51 /** |
|
52 * This test ensures that page style notification from nested documents are |
|
53 * received and the page style is persisted correctly. |
|
54 */ |
|
55 add_task(function nested_page_style() { |
|
56 let tab = gBrowser.addTab(URL_NESTED); |
|
57 let browser = tab.linkedBrowser; |
|
58 yield promiseBrowserLoaded(browser); |
|
59 |
|
60 yield enableSubDocumentStyleSheetsForSet(browser, "alternate"); |
|
61 gBrowser.removeTab(tab); |
|
62 |
|
63 let [{state: {pageStyle}}] = JSON.parse(ss.getClosedTabData(window)); |
|
64 let expected = JSON.stringify({children: [{pageStyle: "alternate"}]}); |
|
65 is(JSON.stringify(pageStyle), expected, "correct pageStyle persisted"); |
|
66 }); |
|
67 |
|
68 function getStyleSheets(browser) { |
|
69 return sendMessage(browser, "ss-test:getStyleSheets"); |
|
70 } |
|
71 |
|
72 function enableStyleSheetsForSet(browser, name) { |
|
73 return sendMessage(browser, "ss-test:enableStyleSheetsForSet", name); |
|
74 } |
|
75 |
|
76 function enableSubDocumentStyleSheetsForSet(browser, name) { |
|
77 return sendMessage(browser, "ss-test:enableSubDocumentStyleSheetsForSet", { |
|
78 id: "iframe", set: name |
|
79 }); |
|
80 } |
|
81 |
|
82 function getAuthorStyleDisabled(browser) { |
|
83 return sendMessage(browser, "ss-test:getAuthorStyleDisabled"); |
|
84 } |
|
85 |
|
86 function setAuthorStyleDisabled(browser, val) { |
|
87 return sendMessage(browser, "ss-test:setAuthorStyleDisabled", val) |
|
88 } |