зеркало из https://github.com/mozilla/gecko-dev.git
73 строки
2.3 KiB
JavaScript
73 строки
2.3 KiB
JavaScript
/* 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;
|
|
}
|
|
}
|