This removes the TrackChangeEmitter class and updates all the callsite to emit an event on the targetActor instead. This event is then listened to in CSSChangeWatcher own targetActor, instead of the singleton TrackChangeEmitter, which would cause duplicated resources to be send to the client on pages with multiple targets (and so multiple CSSChangeWatcher instances) Differential Revision: https://phabricator.services.mozilla.com/D265573
41 lines
1.1 KiB
JavaScript
41 lines
1.1 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";
|
|
|
|
class CSSChangeWatcher {
|
|
constructor() {
|
|
this.onTrackChange = this.onTrackChange.bind(this);
|
|
}
|
|
|
|
#targetActor;
|
|
|
|
/**
|
|
* Start watching for all css changes related to a given Target Actor.
|
|
*
|
|
* @param TargetActor targetActor
|
|
* The target actor from which we should observe css changes.
|
|
* @param Object options
|
|
* Dictionary object with following attributes:
|
|
* - onAvailable: mandatory function
|
|
* This will be called for each resource.
|
|
*/
|
|
async watch(targetActor, { onAvailable }) {
|
|
this.#targetActor = targetActor;
|
|
this.onAvailable = onAvailable;
|
|
this.#targetActor.on("track-css-change", this.onTrackChange);
|
|
}
|
|
|
|
onTrackChange(change) {
|
|
this.onAvailable([change]);
|
|
}
|
|
|
|
destroy() {
|
|
this.#targetActor.off("track-css-change", this.onTrackChange);
|
|
this.#targetActor = null;
|
|
}
|
|
}
|
|
|
|
module.exports = CSSChangeWatcher;
|