Bug 1966702 - Implement debugger breakpoints for CloseWatcher events r=nchevobbe,devtools-reviewers
Differential Revision: https://phabricator.services.mozilla.com/D250307
This commit is contained in:
committed by
mozilla@keithcirkel.co.uk
parent
db75ef0ce8
commit
8515aaaac5
@@ -7,6 +7,7 @@
|
||||
add_task(async function () {
|
||||
await pushPref("dom.element.invokers.enabled", true);
|
||||
await pushPref("dom.events.textevent.enabled", true);
|
||||
await pushPref("dom.closewatcher.enabled", true);
|
||||
|
||||
const dbg = await initDebugger(
|
||||
"doc-event-breakpoints.html",
|
||||
@@ -81,6 +82,19 @@ add_task(async function () {
|
||||
await assertPausedAtSourceAndLine(dbg, eventBreakpointsSource.id, 77);
|
||||
await resume(dbg);
|
||||
|
||||
info("Enable closewatcher cancel and close events");
|
||||
await toggleEventBreakpoint(dbg, "CloseWatcher", "event.closewatcher.cancel");
|
||||
await toggleEventBreakpoint(dbg, "CloseWatcher", "event.closewatcher.close");
|
||||
invokeInTab("closeWatcherRequestClose");
|
||||
info("Wait for pause in cancel event listener");
|
||||
await waitForPaused(dbg);
|
||||
await assertPausedAtSourceAndLine(dbg, eventBreakpointsSource.id, 116);
|
||||
await resume(dbg);
|
||||
info("And wait for pause in close event listener after resuming");
|
||||
await waitForPaused(dbg);
|
||||
await assertPausedAtSourceAndLine(dbg, eventBreakpointsSource.id, 120);
|
||||
await resume(dbg);
|
||||
|
||||
info("Enable beforetoggle and toggle events");
|
||||
await toggleEventBreakpoint(dbg, "Control", "event.control.beforetoggle");
|
||||
await toggleEventBreakpoint(dbg, "Control", "event.control.toggle");
|
||||
|
||||
@@ -106,3 +106,16 @@ document.getElementById("pointer-target").addEventListener("pointerrawupdate", o
|
||||
function onPointerRawUpdate() {
|
||||
console.log("pointerrawupdate");
|
||||
}
|
||||
|
||||
const closewatcher = new CloseWatcher();
|
||||
function closeWatcherRequestClose() {
|
||||
closewatcher.requestClose();
|
||||
}
|
||||
closewatcher.addEventListener("cancel", onCancel);
|
||||
function onCancel(event) {
|
||||
console.log("cancel", event);
|
||||
}
|
||||
closewatcher.addEventListener("close", onClose);
|
||||
function onClose(event) {
|
||||
console.log("close", event);
|
||||
}
|
||||
|
||||
@@ -57,6 +57,14 @@ function xhrEvent(groupID, eventType) {
|
||||
};
|
||||
}
|
||||
|
||||
function closeWatcherEvent(groupID, eventType) {
|
||||
return {
|
||||
...generalEvent(groupID, eventType),
|
||||
message: `CloseWatcher '${eventType}' event`,
|
||||
targetTypes: ["closewatcher"],
|
||||
};
|
||||
}
|
||||
|
||||
function webSocketEvent(groupID, eventType) {
|
||||
return {
|
||||
...generalEvent(groupID, eventType),
|
||||
@@ -132,6 +140,17 @@ const AVAILABLE_BREAKPOINTS = [
|
||||
generalEvent("clipboard", "beforepaste"),
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "CloseWatcher",
|
||||
items: [
|
||||
closeWatcherEvent("closewatcher", "cancel", () =>
|
||||
Services.prefs.getBoolPref("dom.closewatcher.enabled")
|
||||
),
|
||||
closeWatcherEvent("closewatcher", "close", () =>
|
||||
Services.prefs.getBoolPref("dom.closewatcher.enabled")
|
||||
),
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Control",
|
||||
items: [
|
||||
|
||||
@@ -48,6 +48,7 @@ enum EventCallbackDebuggerNotificationType {
|
||||
"xhr",
|
||||
"worker",
|
||||
"websocket",
|
||||
"closewatcher",
|
||||
};
|
||||
|
||||
// A notification that about the engine calling a DOM event handler.
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include "mozilla/DOMEventTargetHelper.h"
|
||||
#include "mozilla/dom/CloseWatcherBinding.h"
|
||||
#include "mozilla/dom/DebuggerNotificationBinding.h"
|
||||
|
||||
namespace mozilla::dom {
|
||||
|
||||
@@ -18,6 +19,11 @@ class CloseWatcher : public DOMEventTargetHelper, public AbortFollower {
|
||||
|
||||
nsIGlobalObject* GetParentObject() const { return GetOwnerGlobal(); }
|
||||
|
||||
mozilla::Maybe<EventCallbackDebuggerNotificationType>
|
||||
GetDebuggerNotificationType() const override {
|
||||
return mozilla::Some(EventCallbackDebuggerNotificationType::Closewatcher);
|
||||
}
|
||||
|
||||
JSObject* WrapObject(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aGivenProto) override;
|
||||
|
||||
|
||||
2
tools/@types/generated/lib.gecko.dom.d.ts
vendored
2
tools/@types/generated/lib.gecko.dom.d.ts
vendored
@@ -25711,7 +25711,7 @@ type DistanceModelType = "exponential" | "inverse" | "linear";
|
||||
type EncodedAudioChunkType = "delta" | "key";
|
||||
type EncodedVideoChunkType = "delta" | "key";
|
||||
type EndingType = "native" | "transparent";
|
||||
type EventCallbackDebuggerNotificationType = "global" | "node" | "websocket" | "worker" | "xhr";
|
||||
type EventCallbackDebuggerNotificationType = "global" | "node" | "websocket" | "worker" | "xhr" | "closewatcher";
|
||||
type FetchState = "aborted" | "complete" | "errored" | "requesting" | "responding";
|
||||
type FileSystemHandleKind = "directory" | "file";
|
||||
type FileType = "directory" | "other" | "regular";
|
||||
|
||||
Reference in New Issue
Block a user