michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: "use strict"; michael@0: michael@0: const URL = getRootDirectory(gTestPath) + "browser_pageStyle_sample.html"; michael@0: const URL_NESTED = getRootDirectory(gTestPath) + "browser_pageStyle_sample_nested.html"; michael@0: michael@0: /** michael@0: * This test ensures that page style information is correctly persisted. michael@0: */ michael@0: add_task(function page_style() { michael@0: let tab = gBrowser.addTab(URL); michael@0: let browser = tab.linkedBrowser; michael@0: yield promiseBrowserLoaded(browser); michael@0: let sheets = yield getStyleSheets(browser); michael@0: michael@0: // Enable all style sheets one by one. michael@0: for (let [title, disabled] of sheets) { michael@0: yield enableStyleSheetsForSet(browser, title); michael@0: michael@0: let tab2 = gBrowser.duplicateTab(tab); michael@0: yield promiseTabRestored(tab2); michael@0: michael@0: let sheets = yield getStyleSheets(tab2.linkedBrowser); michael@0: let enabled = sheets.filter(([title, disabled]) => !disabled); michael@0: michael@0: if (title.startsWith("fail_")) { michael@0: ok(!enabled.length, "didn't restore " + title); michael@0: } else { michael@0: ok(enabled.length == 1 && enabled[0][0] == title, "restored " + title); michael@0: } michael@0: michael@0: gBrowser.removeTab(tab2); michael@0: } michael@0: michael@0: // Disable all styles and verify that this is correctly persisted. michael@0: yield setAuthorStyleDisabled(browser, true); michael@0: michael@0: let tab2 = gBrowser.duplicateTab(tab); michael@0: yield promiseTabRestored(tab2); michael@0: michael@0: let authorStyleDisabled = yield getAuthorStyleDisabled(tab2.linkedBrowser); michael@0: ok(authorStyleDisabled, "disabled all stylesheets"); michael@0: michael@0: // Clean up. michael@0: gBrowser.removeTab(tab); michael@0: gBrowser.removeTab(tab2); michael@0: }); michael@0: michael@0: /** michael@0: * This test ensures that page style notification from nested documents are michael@0: * received and the page style is persisted correctly. michael@0: */ michael@0: add_task(function nested_page_style() { michael@0: let tab = gBrowser.addTab(URL_NESTED); michael@0: let browser = tab.linkedBrowser; michael@0: yield promiseBrowserLoaded(browser); michael@0: michael@0: yield enableSubDocumentStyleSheetsForSet(browser, "alternate"); michael@0: gBrowser.removeTab(tab); michael@0: michael@0: let [{state: {pageStyle}}] = JSON.parse(ss.getClosedTabData(window)); michael@0: let expected = JSON.stringify({children: [{pageStyle: "alternate"}]}); michael@0: is(JSON.stringify(pageStyle), expected, "correct pageStyle persisted"); michael@0: }); michael@0: michael@0: function getStyleSheets(browser) { michael@0: return sendMessage(browser, "ss-test:getStyleSheets"); michael@0: } michael@0: michael@0: function enableStyleSheetsForSet(browser, name) { michael@0: return sendMessage(browser, "ss-test:enableStyleSheetsForSet", name); michael@0: } michael@0: michael@0: function enableSubDocumentStyleSheetsForSet(browser, name) { michael@0: return sendMessage(browser, "ss-test:enableSubDocumentStyleSheetsForSet", { michael@0: id: "iframe", set: name michael@0: }); michael@0: } michael@0: michael@0: function getAuthorStyleDisabled(browser) { michael@0: return sendMessage(browser, "ss-test:getAuthorStyleDisabled"); michael@0: } michael@0: michael@0: function setAuthorStyleDisabled(browser, val) { michael@0: return sendMessage(browser, "ss-test:setAuthorStyleDisabled", val) michael@0: }