mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-21 07:47:32 +09:00
waiter waiter more webextensions please
This commit is contained in:
parent
3837792171
commit
bb0adb61ae
10 changed files with 198 additions and 8 deletions
|
|
@ -23,6 +23,55 @@ addMessageListener("Extension:DisableWebNavigation", () => {
|
|||
removeEventListener("DOMContentLoaded", loadListener);
|
||||
});
|
||||
|
||||
var CreatedNavigationTargetListener = {
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
|
||||
|
||||
init() {
|
||||
Services.obs.addObserver(this, "webNavigation-createdNavigationTarget-from-js", false);
|
||||
},
|
||||
uninit() {
|
||||
Services.obs.removeObserver(this, "webNavigation-createdNavigationTarget-from-js");
|
||||
},
|
||||
|
||||
observe(subject, topic, data) {
|
||||
if (!(subject instanceof Ci.nsIPropertyBag2)) {
|
||||
return;
|
||||
}
|
||||
|
||||
let props = subject.QueryInterface(Ci.nsIPropertyBag2);
|
||||
|
||||
const createdDocShell = props.getPropertyAsInterface("createdTabDocShell", Ci.nsIDocShell);
|
||||
const sourceDocShell = props.getPropertyAsInterface("sourceTabDocShell", Ci.nsIDocShell);
|
||||
|
||||
const isSourceTabDescendant = sourceDocShell.sameTypeRootTreeItem === docShell;
|
||||
|
||||
if (docShell !== createdDocShell && docShell !== sourceDocShell &&
|
||||
!isSourceTabDescendant) {
|
||||
// if the createdNavigationTarget is not related to this docShell
|
||||
// (this docShell is not the newly created docShell, it is not the source docShell,
|
||||
// and the source docShell is not a descendant of it)
|
||||
// there is nothing to do here and return early.
|
||||
return;
|
||||
}
|
||||
|
||||
const isSourceTab = docShell === sourceDocShell || isSourceTabDescendant;
|
||||
const sourceWindowId = WebNavigationFrames.getWindowId(sourceDocShell.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindow));
|
||||
const createdWindowId = WebNavigationFrames.getWindowId(createdDocShell.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindow));
|
||||
|
||||
let url = "about:blank";
|
||||
if (props.hasKey("url")) {
|
||||
url = props.getPropertyAsACString("url");
|
||||
}
|
||||
|
||||
sendAsyncMessage("Extension:CreatedNavigationTarget", {
|
||||
url,
|
||||
sourceWindowId,
|
||||
createdWindowId,
|
||||
isSourceTab,
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
var FormSubmitListener = {
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver,
|
||||
Ci.nsIFormSubmitObserver,
|
||||
|
|
@ -256,11 +305,13 @@ var WebProgressListener = {
|
|||
var disabled = false;
|
||||
WebProgressListener.init();
|
||||
FormSubmitListener.init();
|
||||
CreatedNavigationTargetListener.init();
|
||||
addEventListener("unload", () => {
|
||||
if (!disabled) {
|
||||
disabled = true;
|
||||
WebProgressListener.uninit();
|
||||
FormSubmitListener.uninit();
|
||||
CreatedNavigationTargetListener.uninit();
|
||||
}
|
||||
});
|
||||
addMessageListener("Extension:DisableWebNavigation", () => {
|
||||
|
|
@ -268,5 +319,6 @@ addMessageListener("Extension:DisableWebNavigation", () => {
|
|||
disabled = true;
|
||||
WebProgressListener.uninit();
|
||||
FormSubmitListener.uninit();
|
||||
CreatedNavigationTargetListener.uninit();
|
||||
}
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue