gecko-dev/devtools/server/actors/style-sheets.js

106 строки
2.7 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/. */
"use strict";
const { Actor } = require("resource://devtools/shared/protocol.js");
const {
styleSheetsSpec,
} = require("resource://devtools/shared/specs/style-sheets.js");
const {
LongStringActor,
} = require("resource://devtools/server/actors/string.js");
loader.lazyRequireGetter(
this,
"UPDATE_GENERAL",
"resource://devtools/server/actors/utils/stylesheets-manager.js",
true
);
/**
* Creates a StyleSheetsActor. StyleSheetsActor provides remote access to the
* stylesheets of a document.
*/
class StyleSheetsActor extends Actor {
constructor(conn, targetActor) {
super(conn, styleSheetsSpec);
this.parentActor = targetActor;
}
/**
* The window we work with, taken from the parent actor.
*/
get window() {
return this.parentActor.window;
}
/**
* The current content document of the window we work with.
*/
get document() {
return this.window.document;
}
getTraits() {
return {
traits: {},
};
}
destroy() {
for (const win of this.parentActor.windows) {
// This flag only exists for devtools, so we are free to clear
// it when we're done.
win.document.styleSheetChangeEventsEnabled = false;
}
super.destroy();
}
/**
* Create a new style sheet in the document with the given text.
* Return an actor for it.
*
* @param {object} request
* Debugging protocol request object, with 'text property'
* @param {string} fileName
* If the stylesheet adding is from file, `fileName` indicates the path.
* @return {object}
* Object with 'styelSheet' property for form on new actor.
*/
async addStyleSheet(text, fileName = null) {
const styleSheetsManager = this._getStyleSheetsManager();
await styleSheetsManager.addStyleSheet(this.document, text, fileName);
}
_getStyleSheetsManager() {
return this.parentActor.getStyleSheetsManager();
}
toggleDisabled(resourceId) {
const styleSheetsManager = this._getStyleSheetsManager();
return styleSheetsManager.toggleDisabled(resourceId);
}
async getText(resourceId) {
const styleSheetsManager = this._getStyleSheetsManager();
const text = await styleSheetsManager.getText(resourceId);
return new LongStringActor(this.conn, text || "");
}
update(resourceId, text, transition, cause = "") {
const styleSheetsManager = this._getStyleSheetsManager();
return styleSheetsManager.setStyleSheetText(resourceId, text, {
transition,
kind: UPDATE_GENERAL,
cause,
});
}
}
exports.StyleSheetsActor = StyleSheetsActor;