Source code
Revision control
Copy as Markdown
Other Tools
/* 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
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
findCandidates: "moz-src:///browser/components/tabnotes/CanonicalURL.sys.mjs",
pickCanonicalUrl:
"moz-src:///browser/components/tabnotes/CanonicalURL.sys.mjs",
});
/**
* Identifies the canonical URL in a top-level content frame, if possible,
* and notifies the parent process about it.
*/
export class CanonicalURLChild extends JSWindowActorChild {
/**
* @param {Event} event
*/
handleEvent(event) {
switch (event.type) {
case "DOMContentLoaded":
case "pageshow":
this.#discoverCanonicalUrl();
}
}
/**
* Called when a message is received from the parent process.
*
* @param {ReceiveMessageArgument} msg
*/
receiveMessage(msg) {
switch (msg.name) {
case "CanonicalURL:Detect":
this.#discoverCanonicalUrl();
break;
}
}
/**
* Find a canonical URL in the document and tell the parent about it.
*/
#discoverCanonicalUrl() {
const candidates = lazy.findCandidates(this.document);
const canonicalUrl = lazy.pickCanonicalUrl(candidates);
const canonicalUrlSources = Object.keys(candidates).filter(
candidate => candidates[candidate]
);
this.sendAsyncMessage("CanonicalURL:Identified", {
canonicalUrl,
canonicalUrlSources,
});
}
}