From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- browser/actors/PageStyleParent.sys.mjs | 72 ++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 browser/actors/PageStyleParent.sys.mjs (limited to 'browser/actors/PageStyleParent.sys.mjs') diff --git a/browser/actors/PageStyleParent.sys.mjs b/browser/actors/PageStyleParent.sys.mjs new file mode 100644 index 0000000000..26cf7bbf1a --- /dev/null +++ b/browser/actors/PageStyleParent.sys.mjs @@ -0,0 +1,72 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +export class PageStyleParent extends JSWindowActorParent { + // This has the most recent information about the content stylesheets for + // that actor. It's populated via the PageStyle:Add and PageStyle:Clear + // messages from the content process. It has the following structure: + // + // filteredStyleSheets (Array): + // An Array of objects with a filtered list representing all stylesheets + // that the current page offers. Each object has the following members: + // + // title (String): + // The title of the stylesheet + // + // disabled (bool): + // Whether or not the stylesheet is currently applied + // + // href (String): + // The URL of the stylesheet. Stylesheets loaded via a data URL will + // have this property set to null. + // + // preferredStyleSheetSet (bool): + // Whether or not the user currently has the "Default" style selected + // for the current page. + #styleSheetInfo = null; + + receiveMessage(msg) { + // Check if things are alive: + let browser = this.browsingContext.top.embedderElement; + if (!browser || browser.ownerGlobal.closed) { + return; + } + + // We always store information at the top of the frame tree. + let actor = + this.browsingContext.top.currentWindowGlobal.getActor("PageStyle"); + switch (msg.name) { + case "PageStyle:Add": + actor.addSheetInfo(msg.data); + break; + case "PageStyle:Clear": + if (actor == this) { + this.#styleSheetInfo = null; + } + break; + } + } + + /** + * Add/append styleSheets to the _pageStyleSheets weakmap. + * @param newSheetData + * The stylesheet data, including new stylesheets to add, + * and the preferred stylesheet set for this document. + */ + addSheetInfo(newSheetData) { + let info = this.getSheetInfo(); + info.filteredStyleSheets.push(...newSheetData.filteredStyleSheets); + info.preferredStyleSheetSet ||= newSheetData.preferredStyleSheetSet; + } + + getSheetInfo() { + if (!this.#styleSheetInfo) { + this.#styleSheetInfo = { + filteredStyleSheets: [], + preferredStyleSheetSet: true, + }; + } + return this.#styleSheetInfo; + } +} -- cgit v1.2.3