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 () {
|
add_task(async function () {
|
||||||
await pushPref("dom.element.invokers.enabled", true);
|
await pushPref("dom.element.invokers.enabled", true);
|
||||||
await pushPref("dom.events.textevent.enabled", true);
|
await pushPref("dom.events.textevent.enabled", true);
|
||||||
|
await pushPref("dom.closewatcher.enabled", true);
|
||||||
|
|
||||||
const dbg = await initDebugger(
|
const dbg = await initDebugger(
|
||||||
"doc-event-breakpoints.html",
|
"doc-event-breakpoints.html",
|
||||||
@@ -81,6 +82,19 @@ add_task(async function () {
|
|||||||
await assertPausedAtSourceAndLine(dbg, eventBreakpointsSource.id, 77);
|
await assertPausedAtSourceAndLine(dbg, eventBreakpointsSource.id, 77);
|
||||||
await resume(dbg);
|
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");
|
info("Enable beforetoggle and toggle events");
|
||||||
await toggleEventBreakpoint(dbg, "Control", "event.control.beforetoggle");
|
await toggleEventBreakpoint(dbg, "Control", "event.control.beforetoggle");
|
||||||
await toggleEventBreakpoint(dbg, "Control", "event.control.toggle");
|
await toggleEventBreakpoint(dbg, "Control", "event.control.toggle");
|
||||||
|
|||||||
@@ -106,3 +106,16 @@ document.getElementById("pointer-target").addEventListener("pointerrawupdate", o
|
|||||||
function onPointerRawUpdate() {
|
function onPointerRawUpdate() {
|
||||||
console.log("pointerrawupdate");
|
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) {
|
function webSocketEvent(groupID, eventType) {
|
||||||
return {
|
return {
|
||||||
...generalEvent(groupID, eventType),
|
...generalEvent(groupID, eventType),
|
||||||
@@ -132,6 +140,17 @@ const AVAILABLE_BREAKPOINTS = [
|
|||||||
generalEvent("clipboard", "beforepaste"),
|
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",
|
name: "Control",
|
||||||
items: [
|
items: [
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ enum EventCallbackDebuggerNotificationType {
|
|||||||
"xhr",
|
"xhr",
|
||||||
"worker",
|
"worker",
|
||||||
"websocket",
|
"websocket",
|
||||||
|
"closewatcher",
|
||||||
};
|
};
|
||||||
|
|
||||||
// A notification that about the engine calling a DOM event handler.
|
// A notification that about the engine calling a DOM event handler.
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include "mozilla/DOMEventTargetHelper.h"
|
#include "mozilla/DOMEventTargetHelper.h"
|
||||||
#include "mozilla/dom/CloseWatcherBinding.h"
|
#include "mozilla/dom/CloseWatcherBinding.h"
|
||||||
|
#include "mozilla/dom/DebuggerNotificationBinding.h"
|
||||||
|
|
||||||
namespace mozilla::dom {
|
namespace mozilla::dom {
|
||||||
|
|
||||||
@@ -18,6 +19,11 @@ class CloseWatcher : public DOMEventTargetHelper, public AbortFollower {
|
|||||||
|
|
||||||
nsIGlobalObject* GetParentObject() const { return GetOwnerGlobal(); }
|
nsIGlobalObject* GetParentObject() const { return GetOwnerGlobal(); }
|
||||||
|
|
||||||
|
mozilla::Maybe<EventCallbackDebuggerNotificationType>
|
||||||
|
GetDebuggerNotificationType() const override {
|
||||||
|
return mozilla::Some(EventCallbackDebuggerNotificationType::Closewatcher);
|
||||||
|
}
|
||||||
|
|
||||||
JSObject* WrapObject(JSContext* aCx,
|
JSObject* WrapObject(JSContext* aCx,
|
||||||
JS::Handle<JSObject*> aGivenProto) override;
|
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 EncodedAudioChunkType = "delta" | "key";
|
||||||
type EncodedVideoChunkType = "delta" | "key";
|
type EncodedVideoChunkType = "delta" | "key";
|
||||||
type EndingType = "native" | "transparent";
|
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 FetchState = "aborted" | "complete" | "errored" | "requesting" | "responding";
|
||||||
type FileSystemHandleKind = "directory" | "file";
|
type FileSystemHandleKind = "directory" | "file";
|
||||||
type FileType = "directory" | "other" | "regular";
|
type FileType = "directory" | "other" | "regular";
|
||||||
|
|||||||
Reference in New Issue
Block a user