90 lines
2.3 KiB
JavaScript
90 lines
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 https://mozilla.org/MPL/2.0/. */
|
|
|
|
const lazy = {};
|
|
|
|
ChromeUtils.defineLazyGetter(lazy, "console", () => {
|
|
return console.createInstance({
|
|
prefix: "CaptchaDetectionCommunicationChild",
|
|
maxLogLevelPref: "captchadetection.loglevel",
|
|
});
|
|
});
|
|
|
|
/**
|
|
* This actor may run in anywhere the parent actor wants to communicate with.
|
|
* Only created with getActor() method.
|
|
*/
|
|
export class CaptchaDetectionCommunicationChild extends JSWindowActorChild {
|
|
actorCreated() {
|
|
lazy.console.debug("actorCreated()");
|
|
this.addedMessageListener = false;
|
|
}
|
|
|
|
actorDestroy() {
|
|
lazy.console.debug("actorDestroy()");
|
|
}
|
|
|
|
#datadomeAddMessageListener() {
|
|
if (this.addedMessageListener) {
|
|
return;
|
|
}
|
|
this.addedMessageListener = true;
|
|
|
|
this.contentWindow.addEventListener("message", event => {
|
|
if (
|
|
event.origin !== "https://geo.captcha-delivery.com" &&
|
|
!Cu.isInAutomation
|
|
) {
|
|
return;
|
|
}
|
|
|
|
let data = null;
|
|
try {
|
|
data = JSON.parse(event.data);
|
|
if (!data) {
|
|
return;
|
|
}
|
|
} catch (e) {
|
|
return;
|
|
}
|
|
|
|
if (data.eventType === "load" && data.hasOwnProperty("responseType")) {
|
|
this.sendAsyncMessage("CaptchaState:Update", {
|
|
type: "datadome",
|
|
event: "load",
|
|
captchaShown: data.responseType === "captcha",
|
|
blocked: data.responseType === "hardblock",
|
|
});
|
|
} else if (data.eventType === "passed") {
|
|
this.sendAsyncMessage("CaptchaState:Update", {
|
|
type: "datadome",
|
|
event: "passed",
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
#testingMetricIsSet() {
|
|
if (!Cu.isInAutomation) {
|
|
throw new Error("This method is only for testing.");
|
|
}
|
|
|
|
this.contentWindow.postMessage(
|
|
"Testing:MetricIsSet",
|
|
this.contentWindow.location.origin
|
|
);
|
|
}
|
|
|
|
receiveMessage(message) {
|
|
lazy.console.debug("Received message", message);
|
|
switch (message.name) {
|
|
case "Datadome:AddMessageListener":
|
|
this.#datadomeAddMessageListener();
|
|
break;
|
|
case "Testing:MetricIsSet":
|
|
this.#testingMetricIsSet();
|
|
break;
|
|
}
|
|
}
|
|
}
|