Skip to content

Web Inspector: Add Versioned Protocol for iOS 26.0 and macOS 26.0 #46798

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

AnujPanta1
Copy link
Contributor

@AnujPanta1 AnujPanta1 commented Jun 16, 2025

686eff1

Web Inspector: Add Versioned Protocol for iOS 26.0 and macOS 26.0
https://bugs.webkit.org/show_bug.cgi?id=294546
rdar://143587423

Reviewed by NOBODY (OOPS!).

* Source/WebInspectorUI/UserInterface/Controllers/AnimationManager.js:
(WI.AnimationManager.prototype.effectChanged):
* Source/WebInspectorUI/UserInterface/Controllers/TimelineManager.js:
(WI.TimelineManager.prototype.initializeTarget):
(WI.TimelineManager.prototype.disable):
(WI.TimelineManager.prototype._updateAutoCaptureInstruments):
* Source/WebInspectorUI/UserInterface/Models/Animation.js:
(WI.Animation.fromPayload):
(WI.Animation.prototype.effectChanged):
* Source/WebInspectorUI/UserInterface/Models/Instrument.js:
(WI.Instrument.startLegacyTimelineAgent):
(WI.Instrument.stopLegacyTimelineAgent):
* Source/WebInspectorUI/UserInterface/Models/ScriptInstrument.js:
(WI.ScriptInstrument.prototype.startInstrumentation):
(WI.ScriptInstrument.prototype.stopInstrumentation):
(WI.ScriptInstrument):
* Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js:
(WI.SourceMapResource.prototype.get supportsScriptBlackboxing):
* Source/WebInspectorUI/UserInterface/Protocol/AnimationObserver.js:
(WI.AnimationObserver.prototype.effectChanged):
* Source/WebInspectorUI/UserInterface/Protocol/Legacy/iOS/26.0/InspectorBackendCommands.js: Added.
* Source/WebInspectorUI/UserInterface/Protocol/Legacy/macOS/26.0/InspectorBackendCommands.js: Added.
* Source/WebInspectorUI/UserInterface/Views/DOMTreeContentView.js:
(WI.DOMTreeContentView.prototype._populateConfigureDOMTreeBadgesNavigationItemContextMenu):
* Source/WebInspectorUI/Versions/Inspector-iOS-26.0.json: Added.
* Source/WebInspectorUI/Versions/Inspector-macOS-26.0.json: Added.

686eff1

Misc iOS, visionOS, tvOS & watchOS macOS Linux Windows
✅ 🧪 style ✅ 🛠 ios ✅ 🛠 mac ✅ 🛠 wpe ⏳ 🛠 win
✅ 🛠 ios-sim ✅ 🛠 mac-AS-debug ❌ 🧪 wpe-wk2 ⏳ 🧪 win-tests
✅ 🧪 webkitperl loading-orange 🧪 ios-wk2 ✅ 🧪 api-mac ✅ 🧪 api-wpe
⏳ 🧪 ios-wk2-wpt ✅ 🧪 mac-wk1 ✅ 🛠 wpe-cairo
loading-orange 🧪 api-ios loading-orange 🧪 mac-wk2 ✅ 🛠 gtk
✅ 🛠 vision loading 🧪 mac-AS-debug-wk2 loading-orange 🧪 gtk-wk2
✅ 🛠 vision-sim ✅ 🧪 mac-wk2-stress ❌ 🧪 api-gtk
✅ 🧪 vision-wk2 ⏳ 🧪 mac-intel-wk2 🛠 playstation
✅ 🛠 tv ✅ 🛠 mac-safer-cpp
✅ 🛠 tv-sim
✅ 🛠 watch
✅ 🛠 watch-sim

@AnujPanta1 AnujPanta1 self-assigned this Jun 16, 2025
@AnujPanta1 AnujPanta1 added the Web Inspector Bugs related to the WebKit Web Inspector. label Jun 16, 2025
@rcaliman-apple
Copy link
Contributor

  • We typically do a diff between the previous protocol snapshot and the latest one and put it in a comment here for a sanity check.

  • There are some code comments marked COMPATIBILITY (iOS 18.X, macOS 15.X) that need updating to the actual OS version where the feature landed, i.e. iOS 26 and macOS 26 (please verify).

@AnujPanta1
Copy link
Contributor Author

AnujPanta1 commented Jun 20, 2025

Diff against previous protocol #41071

IOS InspectorBackendCommands.js
diff --git a/OpenSource/Source/WebInspectorUI/UserInterface/Protocol/Legacy/iOS/18.4/InspectorBackendCommands.js b/OpenSource/Source/WebInspectorUI/UserInterface/Protocol/Legacy/iOS/26.0/InspectorBackendCommands.js
index de5306b..ba4a3e8 100644
--- a/OpenSource/Source/WebInspectorUI/UserInterface/Protocol/Legacy/iOS/18.4/InspectorBackendCommands.js
+++ b/OpenSource/Source/WebInspectorUI/UserInterface/Protocol/Legacy/iOS/26.0/InspectorBackendCommands.js
@@ -34,13 +34,14 @@ InspectorBackend.registerEnum("Animation.PlaybackDirection", {Normal: "normal",
 InspectorBackend.registerEnum("Animation.FillMode", {None: "none", Forwards: "forwards", Backwards: "backwards", Both: "both", Auto: "auto"});
 InspectorBackend.registerCommand("Animation.enable", null, [], []);
 InspectorBackend.registerCommand("Animation.disable", null, [], []);
+InspectorBackend.registerCommand("Animation.requestEffect", null, [{"name": "animationId", "type": "string"}], ["effect"]);
 InspectorBackend.registerCommand("Animation.requestEffectTarget", null, [{"name": "animationId", "type": "string"}], ["effectTarget"]);
 InspectorBackend.registerCommand("Animation.resolveAnimation", null, [{"name": "animationId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
 InspectorBackend.registerCommand("Animation.startTracking", null, [], []);
 InspectorBackend.registerCommand("Animation.stopTracking", null, [], []);
 InspectorBackend.registerEvent("Animation.animationCreated", null, ["animation"]);
 InspectorBackend.registerEvent("Animation.nameChanged", null, ["animationId", "name"]);
-InspectorBackend.registerEvent("Animation.effectChanged", null, ["animationId", "effect"]);
+InspectorBackend.registerEvent("Animation.effectChanged", null, ["animationId"]);
 InspectorBackend.registerEvent("Animation.targetChanged", null, ["animationId"]);
 InspectorBackend.registerEvent("Animation.animationDestroyed", null, ["animationId"]);
 InspectorBackend.registerEvent("Animation.trackingStart", null, ["timestamp"]);
@@ -84,7 +85,7 @@ InspectorBackend.registerEnum("CSS.PseudoId", {FirstLine: "first-line", FirstLet
 InspectorBackend.registerEnum("CSS.ForceablePseudoClass", {Active: "active", Focus: "focus", FocusVisible: "focus-visible", FocusWithin: "focus-within", Hover: "hover", Target: "target", Visited: "visited"});
 InspectorBackend.registerEnum("CSS.CSSPropertyStatus", {Active: "active", Inactive: "inactive", Disabled: "disabled", Style: "style"});
 InspectorBackend.registerEnum("CSS.GroupingType", {MediaRule: "media-rule", MediaImportRule: "media-import-rule", MediaLinkNode: "media-link-node", MediaStyleNode: "media-style-node", SupportsRule: "supports-rule", LayerRule: "layer-rule", LayerImportRule: "layer-import-rule", ContainerRule: "container-rule", StyleRule: "style-rule"});
-InspectorBackend.registerEnum("CSS.LayoutFlag", {Rendered: "rendered", Scrollable: "scrollable", Flex: "flex", Grid: "grid", Event: "event"});
+InspectorBackend.registerEnum("CSS.LayoutFlag", {Rendered: "rendered", Scrollable: "scrollable", Flex: "flex", Grid: "grid", Event: "event", SlotAssigned: "slot-assigned", SlotFilled: "slot-filled"});
 InspectorBackend.registerEnum("CSS.LayoutContextTypeChangedMode", {Observed: "observed", All: "all"});
 InspectorBackend.registerCommand("CSS.enable", null, [], []);
 InspectorBackend.registerCommand("CSS.disable", null, [], []);
@@ -148,7 +149,7 @@ InspectorBackend.activateDomain("Canvas", ["page", "web-page"]);
 
 // Console
 InspectorBackend.registerDomain("Console", ["itml", "javascript", "page", "service-worker", "worker"]);
-InspectorBackend.registerEnum("Console.ChannelSource", {XML: "xml", JavaScript: "javascript", Network: "network", ConsoleAPI: "console-api", Storage: "storage", Rendering: "rendering", CSS: "css", Security: "security", ContentBlocker: "content-blocker", Media: "media", MediaSource: "mediasource", WebRTC: "webrtc", ITPDebug: "itp-debug", PrivateClickMeasurement: "private-click-measurement", PaymentRequest: "payment-request", Other: "other"});
+InspectorBackend.registerEnum("Console.ChannelSource", {XML: "xml", JavaScript: "javascript", Network: "network", ConsoleAPI: "console-api", Storage: "storage", Appcache: "appcache", Rendering: "rendering", CSS: "css", Accessibility: "accessibility", Security: "security", ContentBlocker: "content-blocker", Media: "media", MediaSource: "mediasource", WebRTC: "webrtc", ITPDebug: "itp-debug", PrivateClickMeasurement: "private-click-measurement", PaymentRequest: "payment-request", Other: "other"});
 InspectorBackend.registerEnum("Console.ChannelLevel", {Off: "off", Basic: "basic", Verbose: "verbose"});
 InspectorBackend.registerEnum("Console.ClearReason", {ConsoleAPI: "console-api", Frontend: "frontend", MainFrameNavigation: "main-frame-navigation"});
 InspectorBackend.registerEnum("Console.ConsoleMessageLevel", {Log: "log", Info: "info", Warning: "warning", Error: "error", Debug: "debug"});
@@ -177,8 +178,11 @@ InspectorBackend.registerEnum("DOM.AccessibilityPropertiesCurrent", {True: "true
 InspectorBackend.registerEnum("DOM.AccessibilityPropertiesInvalid", {True: "true", False: "false", Grammar: "grammar", Spelling: "spelling"});
 InspectorBackend.registerEnum("DOM.AccessibilityPropertiesLiveRegionStatus", {Assertive: "assertive", Polite: "polite", Off: "off"});
 InspectorBackend.registerEnum("DOM.AccessibilityPropertiesSwitchState", {Off: "off", On: "on"});
+InspectorBackend.registerEnum("DOM.VideoProjectionMetadataKind", {Unknown: "unknown", Equirectangular: "equirectangular", HalfEquirectangular: "half-equirectangular", EquiAngularCubemap: "equi-angular-cubemap", Parametric: "parametric", Pyramid: "pyramid", AppleImmersiveVideo: "apple-immersive-video"});
 InspectorBackend.registerCommand("DOM.getDocument", null, [], ["root"]);
 InspectorBackend.registerCommand("DOM.requestChildNodes", null, [{"name": "nodeId", "type": "number"}, {"name": "depth", "type": "number", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.requestAssignedSlot", null, [{"name": "nodeId", "type": "number"}], ["slotElementId"]);
+InspectorBackend.registerCommand("DOM.requestAssignedNodes", null, [{"name": "slotElementId", "type": "number"}], ["assignedNodeIds"]);
 InspectorBackend.registerCommand("DOM.querySelector", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.querySelectorAll", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
 InspectorBackend.registerCommand("DOM.setNodeName", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
@@ -351,14 +355,14 @@ InspectorBackend.registerIndexedDBDispatcher = InspectorBackend.registerDispatch
 InspectorBackend.activateDomain("IndexedDB", ["page", "web-page"]);
 
 // Inspector
-InspectorBackend.registerDomain("Inspector", ["itml", "javascript", "page"]);
+InspectorBackend.registerDomain("Inspector", ["itml", "javascript", "page", "service-worker"]);
 InspectorBackend.registerCommand("Inspector.enable", null, [], []);
 InspectorBackend.registerCommand("Inspector.disable", null, [], []);
 InspectorBackend.registerCommand("Inspector.initialized", null, [], []);
 InspectorBackend.registerEvent("Inspector.evaluateForTestInFrontend", null, ["script"]);
 InspectorBackend.registerEvent("Inspector.inspect", null, ["object", "hints"]);
 InspectorBackend.registerInspectorDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Inspector");
-InspectorBackend.activateDomain("Inspector", ["itml", "javascript", "page", "web-page"]);
+InspectorBackend.activateDomain("Inspector", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // LayerTree
 InspectorBackend.registerDomain("LayerTree", ["page"]);
@@ -509,7 +513,7 @@ InspectorBackend.registerRuntimeDispatcher = InspectorBackend.registerDispatcher
 InspectorBackend.activateDomain("Runtime", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // ScriptProfiler
-InspectorBackend.registerDomain("ScriptProfiler", ["itml", "javascript", "page"]);
+InspectorBackend.registerDomain("ScriptProfiler", ["itml", "javascript", "page", "worker"]);
 InspectorBackend.registerEnum("ScriptProfiler.EventType", {API: "API", Microtask: "Microtask", Other: "Other"});
 InspectorBackend.registerCommand("ScriptProfiler.startTracking", null, [{"name": "includeSamples", "type": "boolean", "optional": true}], []);
 InspectorBackend.registerCommand("ScriptProfiler.stopTracking", null, [], []);
@@ -538,19 +542,19 @@ InspectorBackend.registerTargetDispatcher = InspectorBackend.registerDispatcher.
 InspectorBackend.activateDomain("Target", ["web-page"]);
 
 // Timeline
-InspectorBackend.registerDomain("Timeline", ["page"]);
+InspectorBackend.registerDomain("Timeline", ["page", "worker"]);
 InspectorBackend.registerEnum("Timeline.EventType", {EventDispatch: "EventDispatch", ScheduleStyleRecalculation: "ScheduleStyleRecalculation", RecalculateStyles: "RecalculateStyles", InvalidateLayout: "InvalidateLayout", Layout: "Layout", Paint: "Paint", Composite: "Composite", RenderingFrame: "RenderingFrame", TimerInstall: "TimerInstall", TimerRemove: "TimerRemove", TimerFire: "TimerFire", EvaluateScript: "EvaluateScript", TimeStamp: "TimeStamp", Time: "Time", TimeEnd: "TimeEnd", FunctionCall: "FunctionCall", ProbeSample: "ProbeSample", ConsoleProfile: "ConsoleProfile", RequestAnimationFrame: "RequestAnimationFrame", CancelAnimationFrame: "CancelAnimationFrame", FireAnimationFrame: "FireAnimationFrame", ObserverCallback: "ObserverCallback", Screenshot: "Screenshot"});
 InspectorBackend.registerEnum("Timeline.Instrument", {ScriptProfiler: "ScriptProfiler", Timeline: "Timeline", CPU: "CPU", Memory: "Memory", Heap: "Heap", Animation: "Animation", Screenshot: "Screenshot"});
 InspectorBackend.registerCommand("Timeline.enable", null, [], []);
 InspectorBackend.registerCommand("Timeline.disable", null, [], []);
 InspectorBackend.registerCommand("Timeline.start", null, [{"name": "maxCallStackDepth", "type": "number", "optional": true}], []);
 InspectorBackend.registerCommand("Timeline.stop", null, [], []);
-InspectorBackend.registerCommand("Timeline.setAutoCaptureEnabled", null, [{"name": "enabled", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Timeline.setAutoCaptureEnabled", ["page"], [{"name": "enabled", "type": "boolean"}], []);
 InspectorBackend.registerCommand("Timeline.setInstruments", null, [{"name": "instruments", "type": "object"}], []);
 InspectorBackend.registerEvent("Timeline.eventRecorded", null, ["record"]);
 InspectorBackend.registerEvent("Timeline.recordingStarted", null, ["startTime"]);
 InspectorBackend.registerEvent("Timeline.recordingStopped", null, ["endTime"]);
-InspectorBackend.registerEvent("Timeline.autoCaptureStarted", null, []);
+InspectorBackend.registerEvent("Timeline.autoCaptureStarted", ["page"], []);
 InspectorBackend.registerTimelineDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Timeline");
 InspectorBackend.activateDomain("Timeline", ["page", "web-page"]);
macOs InspectorBackendCommands.js
diff --git a/OpenSource/Source/WebInspectorUI/UserInterface/Protocol/Legacy/macOS/15.4/InspectorBackendCommands.js b/OpenSource/Source/WebInspectorUI/UserInterface/Protocol/Legacy/macOS/26.0/InspectorBackendCommands.js
index 8ec0252..25c9225 100644
--- a/OpenSource/Source/WebInspectorUI/UserInterface/Protocol/Legacy/macOS/15.4/InspectorBackendCommands.js
+++ b/OpenSource/Source/WebInspectorUI/UserInterface/Protocol/Legacy/macOS/26.0/InspectorBackendCommands.js
@@ -34,13 +34,14 @@ InspectorBackend.registerEnum("Animation.PlaybackDirection", {Normal: "normal",
 InspectorBackend.registerEnum("Animation.FillMode", {None: "none", Forwards: "forwards", Backwards: "backwards", Both: "both", Auto: "auto"});
 InspectorBackend.registerCommand("Animation.enable", null, [], []);
 InspectorBackend.registerCommand("Animation.disable", null, [], []);
+InspectorBackend.registerCommand("Animation.requestEffect", null, [{"name": "animationId", "type": "string"}], ["effect"]);
 InspectorBackend.registerCommand("Animation.requestEffectTarget", null, [{"name": "animationId", "type": "string"}], ["effectTarget"]);
 InspectorBackend.registerCommand("Animation.resolveAnimation", null, [{"name": "animationId", "type": "string"}, {"name": "objectGroup", "type": "string", "optional": true}], ["object"]);
 InspectorBackend.registerCommand("Animation.startTracking", null, [], []);
 InspectorBackend.registerCommand("Animation.stopTracking", null, [], []);
 InspectorBackend.registerEvent("Animation.animationCreated", null, ["animation"]);
 InspectorBackend.registerEvent("Animation.nameChanged", null, ["animationId", "name"]);
-InspectorBackend.registerEvent("Animation.effectChanged", null, ["animationId", "effect"]);
+InspectorBackend.registerEvent("Animation.effectChanged", null, ["animationId"]);
 InspectorBackend.registerEvent("Animation.targetChanged", null, ["animationId"]);
 InspectorBackend.registerEvent("Animation.animationDestroyed", null, ["animationId"]);
 InspectorBackend.registerEvent("Animation.trackingStart", null, ["timestamp"]);
@@ -84,7 +85,7 @@ InspectorBackend.registerEnum("CSS.PseudoId", {FirstLine: "first-line", FirstLet
 InspectorBackend.registerEnum("CSS.ForceablePseudoClass", {Active: "active", Focus: "focus", FocusVisible: "focus-visible", FocusWithin: "focus-within", Hover: "hover", Target: "target", Visited: "visited"});
 InspectorBackend.registerEnum("CSS.CSSPropertyStatus", {Active: "active", Inactive: "inactive", Disabled: "disabled", Style: "style"});
 InspectorBackend.registerEnum("CSS.GroupingType", {MediaRule: "media-rule", MediaImportRule: "media-import-rule", MediaLinkNode: "media-link-node", MediaStyleNode: "media-style-node", SupportsRule: "supports-rule", LayerRule: "layer-rule", LayerImportRule: "layer-import-rule", ContainerRule: "container-rule", StyleRule: "style-rule"});
-InspectorBackend.registerEnum("CSS.LayoutFlag", {Rendered: "rendered", Scrollable: "scrollable", Flex: "flex", Grid: "grid", Event: "event"});
+InspectorBackend.registerEnum("CSS.LayoutFlag", {Rendered: "rendered", Scrollable: "scrollable", Flex: "flex", Grid: "grid", Event: "event", SlotAssigned: "slot-assigned", SlotFilled: "slot-filled"});
 InspectorBackend.registerEnum("CSS.LayoutContextTypeChangedMode", {Observed: "observed", All: "all"});
 InspectorBackend.registerCommand("CSS.enable", null, [], []);
 InspectorBackend.registerCommand("CSS.disable", null, [], []);
@@ -148,7 +149,7 @@ InspectorBackend.activateDomain("Canvas", ["page", "web-page"]);
 
 // Console
 InspectorBackend.registerDomain("Console", ["itml", "javascript", "page", "service-worker", "worker"]);
-InspectorBackend.registerEnum("Console.ChannelSource", {XML: "xml", JavaScript: "javascript", Network: "network", ConsoleAPI: "console-api", Storage: "storage", Rendering: "rendering", CSS: "css", Security: "security", ContentBlocker: "content-blocker", Media: "media", MediaSource: "mediasource", WebRTC: "webrtc", ITPDebug: "itp-debug", PrivateClickMeasurement: "private-click-measurement", PaymentRequest: "payment-request", Other: "other"});
+InspectorBackend.registerEnum("Console.ChannelSource", {XML: "xml", JavaScript: "javascript", Network: "network", ConsoleAPI: "console-api", Storage: "storage", Appcache: "appcache", Rendering: "rendering", CSS: "css", Accessibility: "accessibility", Security: "security", ContentBlocker: "content-blocker", Media: "media", MediaSource: "mediasource", WebRTC: "webrtc", ITPDebug: "itp-debug", PrivateClickMeasurement: "private-click-measurement", PaymentRequest: "payment-request", Other: "other"});
 InspectorBackend.registerEnum("Console.ChannelLevel", {Off: "off", Basic: "basic", Verbose: "verbose"});
 InspectorBackend.registerEnum("Console.ClearReason", {ConsoleAPI: "console-api", Frontend: "frontend", MainFrameNavigation: "main-frame-navigation"});
 InspectorBackend.registerEnum("Console.ConsoleMessageLevel", {Log: "log", Info: "info", Warning: "warning", Error: "error", Debug: "debug"});
@@ -177,8 +178,11 @@ InspectorBackend.registerEnum("DOM.AccessibilityPropertiesCurrent", {True: "true
 InspectorBackend.registerEnum("DOM.AccessibilityPropertiesInvalid", {True: "true", False: "false", Grammar: "grammar", Spelling: "spelling"});
 InspectorBackend.registerEnum("DOM.AccessibilityPropertiesLiveRegionStatus", {Assertive: "assertive", Polite: "polite", Off: "off"});
 InspectorBackend.registerEnum("DOM.AccessibilityPropertiesSwitchState", {Off: "off", On: "on"});
+InspectorBackend.registerEnum("DOM.VideoProjectionMetadataKind", {Unknown: "unknown", Equirectangular: "equirectangular", HalfEquirectangular: "half-equirectangular", EquiAngularCubemap: "equi-angular-cubemap", Parametric: "parametric", Pyramid: "pyramid", AppleImmersiveVideo: "apple-immersive-video"});
 InspectorBackend.registerCommand("DOM.getDocument", null, [], ["root"]);
 InspectorBackend.registerCommand("DOM.requestChildNodes", null, [{"name": "nodeId", "type": "number"}, {"name": "depth", "type": "number", "optional": true}], []);
+InspectorBackend.registerCommand("DOM.requestAssignedSlot", null, [{"name": "nodeId", "type": "number"}], ["slotElementId"]);
+InspectorBackend.registerCommand("DOM.requestAssignedNodes", null, [{"name": "slotElementId", "type": "number"}], ["assignedNodeIds"]);
 InspectorBackend.registerCommand("DOM.querySelector", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeId"]);
 InspectorBackend.registerCommand("DOM.querySelectorAll", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "selector", "type": "string"}], ["nodeIds"]);
 InspectorBackend.registerCommand("DOM.setNodeName", ["page"], [{"name": "nodeId", "type": "number"}, {"name": "name", "type": "string"}], ["nodeId"]);
@@ -351,14 +355,14 @@ InspectorBackend.registerIndexedDBDispatcher = InspectorBackend.registerDispatch
 InspectorBackend.activateDomain("IndexedDB", ["page", "web-page"]);
 
 // Inspector
-InspectorBackend.registerDomain("Inspector", ["itml", "javascript", "page"]);
+InspectorBackend.registerDomain("Inspector", ["itml", "javascript", "page", "service-worker"]);
 InspectorBackend.registerCommand("Inspector.enable", null, [], []);
 InspectorBackend.registerCommand("Inspector.disable", null, [], []);
 InspectorBackend.registerCommand("Inspector.initialized", null, [], []);
 InspectorBackend.registerEvent("Inspector.evaluateForTestInFrontend", null, ["script"]);
 InspectorBackend.registerEvent("Inspector.inspect", null, ["object", "hints"]);
 InspectorBackend.registerInspectorDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Inspector");
-InspectorBackend.activateDomain("Inspector", ["itml", "javascript", "page", "web-page"]);
+InspectorBackend.activateDomain("Inspector", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // LayerTree
 InspectorBackend.registerDomain("LayerTree", ["page"]);
@@ -510,7 +514,7 @@ InspectorBackend.registerRuntimeDispatcher = InspectorBackend.registerDispatcher
 InspectorBackend.activateDomain("Runtime", ["itml", "javascript", "page", "service-worker", "web-page"]);
 
 // ScriptProfiler
-InspectorBackend.registerDomain("ScriptProfiler", ["itml", "javascript", "page"]);
+InspectorBackend.registerDomain("ScriptProfiler", ["itml", "javascript", "page", "worker"]);
 InspectorBackend.registerEnum("ScriptProfiler.EventType", {API: "API", Microtask: "Microtask", Other: "Other"});
 InspectorBackend.registerCommand("ScriptProfiler.startTracking", null, [{"name": "includeSamples", "type": "boolean", "optional": true}], []);
 InspectorBackend.registerCommand("ScriptProfiler.stopTracking", null, [], []);
@@ -539,19 +543,19 @@ InspectorBackend.registerTargetDispatcher = InspectorBackend.registerDispatcher.
 InspectorBackend.activateDomain("Target", ["web-page"]);
 
 // Timeline
-InspectorBackend.registerDomain("Timeline", ["page"]);
+InspectorBackend.registerDomain("Timeline", ["page", "worker"]);
 InspectorBackend.registerEnum("Timeline.EventType", {EventDispatch: "EventDispatch", ScheduleStyleRecalculation: "ScheduleStyleRecalculation", RecalculateStyles: "RecalculateStyles", InvalidateLayout: "InvalidateLayout", Layout: "Layout", Paint: "Paint", Composite: "Composite", RenderingFrame: "RenderingFrame", TimerInstall: "TimerInstall", TimerRemove: "TimerRemove", TimerFire: "TimerFire", EvaluateScript: "EvaluateScript", TimeStamp: "TimeStamp", Time: "Time", TimeEnd: "TimeEnd", FunctionCall: "FunctionCall", ProbeSample: "ProbeSample", ConsoleProfile: "ConsoleProfile", RequestAnimationFrame: "RequestAnimationFrame", CancelAnimationFrame: "CancelAnimationFrame", FireAnimationFrame: "FireAnimationFrame", ObserverCallback: "ObserverCallback", Screenshot: "Screenshot"});
 InspectorBackend.registerEnum("Timeline.Instrument", {ScriptProfiler: "ScriptProfiler", Timeline: "Timeline", CPU: "CPU", Memory: "Memory", Heap: "Heap", Animation: "Animation", Screenshot: "Screenshot"});
 InspectorBackend.registerCommand("Timeline.enable", null, [], []);
 InspectorBackend.registerCommand("Timeline.disable", null, [], []);
 InspectorBackend.registerCommand("Timeline.start", null, [{"name": "maxCallStackDepth", "type": "number", "optional": true}], []);
 InspectorBackend.registerCommand("Timeline.stop", null, [], []);
-InspectorBackend.registerCommand("Timeline.setAutoCaptureEnabled", null, [{"name": "enabled", "type": "boolean"}], []);
+InspectorBackend.registerCommand("Timeline.setAutoCaptureEnabled", ["page"], [{"name": "enabled", "type": "boolean"}], []);
 InspectorBackend.registerCommand("Timeline.setInstruments", null, [{"name": "instruments", "type": "object"}], []);
 InspectorBackend.registerEvent("Timeline.eventRecorded", null, ["record"]);
 InspectorBackend.registerEvent("Timeline.recordingStarted", null, ["startTime"]);
 InspectorBackend.registerEvent("Timeline.recordingStopped", null, ["endTime"]);
-InspectorBackend.registerEvent("Timeline.autoCaptureStarted", null, []);
+InspectorBackend.registerEvent("Timeline.autoCaptureStarted", ["page"], []);
 InspectorBackend.registerTimelineDispatcher = InspectorBackend.registerDispatcher.bind(InspectorBackend, "Timeline");
 InspectorBackend.activateDomain("Timeline", ["page", "web-page"]);
Inspector-iOS-26.0.json
diff --git a/OpenSource/Source/WebInspectorUI/Versions/Inspector-iOS-18.4.json b/OpenSource/Source/WebInspectorUI/Versions/Inspector-iOS-26.0.json
index 677d826..fa7516b 100644
--- a/OpenSource/Source/WebInspectorUI/Versions/Inspector-iOS-18.4.json
+++ b/OpenSource/Source/WebInspectorUI/Versions/Inspector-iOS-26.0.json
@@ -33,7 +33,6 @@
                 { "name": "name", "type": "string", "optional": true, "description": "Equal to `Animation.prototype.get id`." },
                 { "name": "cssAnimationName", "type": "string", "optional": true, "description": "Equal to the corresponding `animation-name` CSS property. Should not be provided if `transitionProperty` is also provided." },
                 { "name": "cssTransitionProperty", "type": "string", "optional": true, "description": "Equal to the corresponding `transition-property` CSS property. Should not be provided if `animationName` is also provided." },
-                { "name": "effect", "$ref": "Effect", "optional": true },
                 { "name": "stackTrace", "$ref": "Console.StackTrace", "optional": true, "description": "Backtrace that was captured when this `WebAnimation` was created." }
             ]
         },
@@ -82,6 +81,16 @@
             "name": "disable",
             "description": "Disables Canvas domain events."
         },
+        {
+            "name": "requestEffect",
+            "description": "Gets the `Effect` for the animation with the given `AnimationId`.",
+            "parameters": [
+                { "name": "animationId", "$ref": "AnimationId" }
+            ],
+            "returns": [
+                { "name": "effect", "$ref": "Effect", "optional": true, "description": "This is omitted when there is no effect." }
+            ]
+        },
         {
             "name": "requestEffectTarget",
             "description": "Gets the `DOM.NodeId` for the target of the effect of the animation with the given `AnimationId`.",
@@ -132,8 +141,7 @@
             "name": "effectChanged",
             "description": "Dispatched whenever the effect of any animation is changed in any way.",
             "parameters": [
-                { "name": "animationId", "$ref": "AnimationId" },
-                { "name": "effect", "$ref": "Effect", "optional": true, "description": "This is omitted when the effect is removed without a replacement." }
+                { "name": "animationId", "$ref": "AnimationId" }
             ]
         },
         {
@@ -609,7 +617,9 @@
                 "scrollable",
                 "flex",
                 "grid",
-                "event"
+                "event",
+                "slot-assigned",
+                "slot-filled"
             ],
             "description": "Relevant layout information about the node. Things not in this list are not important to Web Inspector."
         },
@@ -1144,8 +1154,10 @@
                 "network",
                 "console-api",
                 "storage",
+                "appcache",
                 "rendering",
                 "css",
+                "accessibility",
                 "security",
                 "content-blocker",
                 "media",
@@ -1532,7 +1544,9 @@
                 { "name": "colorSpace", "$ref": "VideoColorSpace" },
                 { "name": "framerate", "type": "number", "description": "The nominal frame rate of video track in frames per second." },
                 { "name": "height", "type": "integer", "description": "The native height of the video track in CSS pixels" },
-                { "name": "width", "type": "integer", "description": "The native width of the video track in CSS pixels" }
+                { "name": "width", "type": "integer", "description": "The native width of the video track in CSS pixels" },
+                { "name": "spatialVideoMetadata", "$ref": "SpatialVideoMetadata", "optional": true },
+                { "name": "videoProjectionMetadata", "$ref": "VideoProjectionMetadata", "optional": true }
             ]
         },
         {
@@ -1556,6 +1570,32 @@
                 { "name": "totalVideoFrames", "type": "integer", "description": "The total number of frames enqueued for display by the media element." }
             ]
         },
+        {
+            "id": "SpatialVideoMetadata",
+            "type": "object",
+            "description": "A structure containing metadata describing spatial video properties.",
+            "properties": [
+                { "name": "width", "type": "number" },
+                { "name": "height", "type": "number" },
+                { "name": "horizontalFOVDegrees", "type": "number", "description": "The horizontal field-of-view measurement, in degrees" },
+                { "name": "baseline", "type": "number", "description": "The distance between the centers of the lenses in a camera system, in micrometers" },
+                { "name": "disparityAdjustment", "type": "number", "description": "The relative shift of the left and right eye images, as a percentage." }
+            ]
+        },
+        {
+            "id": "VideoProjectionMetadataKind",
+            "type": "string",
+            "enum": ["unknown", "equirectangular", "half-equirectangular", "equi-angular-cubemap", "parametric", "pyramid", "apple-immersive-video" ],
+            "description": "Video Projection Metadata Kind."
+        },
+        {
+            "id": "VideoProjectionMetadata",
+            "type": "object",
+            "description": "A structure containing metadata describing video projections.",
+            "properties": [
+                { "name": "kind", "$ref": "VideoProjectionMetadataKind", "description": "The kind of video projection." }
+            ]
+        },
         {
             "id": "ViewportSize",
             "type": "object",
@@ -1581,6 +1621,26 @@
                 { "name": "depth", "type": "integer", "optional": true, "description": "The maximum depth at which children should be retrieved, defaults to 1. Use -1 for the entire subtree or provide an integer larger than 0." }
             ]
         },
+        {
+            "name": "requestAssignedSlot",
+            "description": "Requests the <code>HTMLSlotElement</code> that the node with the given id is assigned to.",
+            "parameters": [
+                { "name": "nodeId", "$ref": "NodeId" }
+            ],
+            "returns": [
+                { "name": "slotElementId", "$ref": "NodeId", "optional": true, "description": "Not provided if the given node is not assigned to a <code>HTMLSlotElement</code>." }
+            ]
+        },
+        {
+            "name": "requestAssignedNodes",
+            "description": "Requests the list of assigned nodes for the <code>HTMLSlotElement</code> with the given id.",
+            "parameters": [
+                { "name": "slotElementId", "$ref": "NodeId" }
+            ],
+            "returns": [
+                { "name": "assignedNodeIds", "type": "array", "items": { "$ref": "NodeId" } }
+            ]
+        },
         {
             "name": "querySelector",
             "description": "Executes <code>querySelector</code> on a given node.",
@@ -2767,8 +2827,8 @@
             "parameters": [
                 { "name": "url", "type": "string" },
                 { "name": "shouldBlackbox", "type": "boolean" },
-                { "name": "caseSensitive", "type": "boolean", "optional": true, "description": "If <code>true</code>, <code>url</code> is case sensitive." },
-                { "name": "isRegex", "type": "boolean", "optional": true, "description": "If <code>true</code>, treat <code>url</code> as regular expression." },
+                { "name": "caseSensitive", "type": "boolean", "optional": true, "description": "If <code>true</code>, <code>url</code> is case sensitive. Defaults to true." },
+                { "name": "isRegex", "type": "boolean", "optional": true, "description": "If <code>true</code>, treat <code>url</code> as regular expression. Defaults to false." },
                 { "name": "sourceRanges", "type": "array", "items": { "type": "integer" }, "optional": true, "description": "If provided, limits where in the script the debugger will skip pauses. Expected structure is a repeated <code>[startLine, startColumn, endLine, endColumn]</code>. Ignored if <code>shouldBlackbox</code> is <code>false</code>." }
             ]
         },
@@ -3115,8 +3175,8 @@
 ,
 {
     "domain": "Inspector",
-    "debuggableTypes": ["itml", "javascript", "page", "web-page"],
-    "targetTypes": ["itml", "javascript", "page"],
+    "debuggableTypes": ["itml", "javascript", "page", "service-worker", "web-page"],
+    "targetTypes": ["itml", "javascript", "page", "service-worker"],
     "commands": [
         {
             "name": "enable",
@@ -4742,7 +4802,7 @@
     "domain": "ScriptProfiler",
     "description": "Profiler domain exposes JavaScript evaluation timing and profiling.",
     "debuggableTypes": ["itml", "javascript", "page", "web-page"],
-    "targetTypes": ["itml", "javascript", "page"],
+    "targetTypes": ["itml", "javascript", "page", "worker"],
     "types": [
         {
             "id": "EventType",
@@ -4977,7 +5037,7 @@
     "domain": "Timeline",
     "description": "Timeline provides its clients with instrumentation records that are generated during the page runtime. Timeline instrumentation can be started and stopped using corresponding commands. While timeline is started, it is generating timeline event records.",
     "debuggableTypes": ["page", "web-page"],
-    "targetTypes": ["page"],
+    "targetTypes": ["page", "worker"],
     "types": [
         {
             "id": "EventType",
@@ -5057,6 +5117,7 @@
         {
             "name": "setAutoCaptureEnabled",
             "description": "Toggle auto capture state. If <code>true</code> the backend will disable breakpoints and start capturing on navigation. The backend will fire the <code>autoCaptureStarted</code> event when an auto capture starts. The frontend should stop the auto capture when appropriate and re-enable breakpoints.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "enabled", "type": "boolean", "description": "New auto capture state." }
             ]
@@ -5093,7 +5154,8 @@
         },
         {
             "name": "autoCaptureStarted",
-            "description": "Fired when auto capture started."
+            "description": "Fired when auto capture started.",
+            "targetTypes": ["page"]
         }
     ]
 }
@@ -5116,7 +5178,7 @@
             "description": "Sent after the frontend has sent all initialization messages and can resume this worker. This command is required to allow execution in the worker.",
             "parameters": [
                 { "name": "workerId", "type": "string" }
-            ]
+            ]            
         },
         {
             "name": "sendMessageToWorker",
Inspector-macOS-26.0.json
diff --git a/OpenSource/Source/WebInspectorUI/Versions/Inspector-macOS-15.4.json b/OpenSource/Source/WebInspectorUI/Versions/Inspector-macOS-26.0.json
index e7a0827..fe92dff 100644
--- a/OpenSource/Source/WebInspectorUI/Versions/Inspector-macOS-15.4.json
+++ b/OpenSource/Source/WebInspectorUI/Versions/Inspector-macOS-26.0.json
@@ -33,7 +33,6 @@
                 { "name": "name", "type": "string", "optional": true, "description": "Equal to `Animation.prototype.get id`." },
                 { "name": "cssAnimationName", "type": "string", "optional": true, "description": "Equal to the corresponding `animation-name` CSS property. Should not be provided if `transitionProperty` is also provided." },
                 { "name": "cssTransitionProperty", "type": "string", "optional": true, "description": "Equal to the corresponding `transition-property` CSS property. Should not be provided if `animationName` is also provided." },
-                { "name": "effect", "$ref": "Effect", "optional": true },
                 { "name": "stackTrace", "$ref": "Console.StackTrace", "optional": true, "description": "Backtrace that was captured when this `WebAnimation` was created." }
             ]
         },
@@ -82,6 +81,16 @@
             "name": "disable",
             "description": "Disables Canvas domain events."
         },
+        {
+            "name": "requestEffect",
+            "description": "Gets the `Effect` for the animation with the given `AnimationId`.",
+            "parameters": [
+                { "name": "animationId", "$ref": "AnimationId" }
+            ],
+            "returns": [
+                { "name": "effect", "$ref": "Effect", "optional": true, "description": "This is omitted when there is no effect." }
+            ]
+        },
         {
             "name": "requestEffectTarget",
             "description": "Gets the `DOM.NodeId` for the target of the effect of the animation with the given `AnimationId`.",
@@ -132,8 +141,7 @@
             "name": "effectChanged",
             "description": "Dispatched whenever the effect of any animation is changed in any way.",
             "parameters": [
-                { "name": "animationId", "$ref": "AnimationId" },
-                { "name": "effect", "$ref": "Effect", "optional": true, "description": "This is omitted when the effect is removed without a replacement." }
+                { "name": "animationId", "$ref": "AnimationId" }
             ]
         },
         {
@@ -609,7 +617,9 @@
                 "scrollable",
                 "flex",
                 "grid",
-                "event"
+                "event",
+                "slot-assigned",
+                "slot-filled"
             ],
             "description": "Relevant layout information about the node. Things not in this list are not important to Web Inspector."
         },
@@ -1144,8 +1154,10 @@
                 "network",
                 "console-api",
                 "storage",
+                "appcache",
                 "rendering",
                 "css",
+                "accessibility",
                 "security",
                 "content-blocker",
                 "media",
@@ -1532,7 +1544,9 @@
                 { "name": "colorSpace", "$ref": "VideoColorSpace" },
                 { "name": "framerate", "type": "number", "description": "The nominal frame rate of video track in frames per second." },
                 { "name": "height", "type": "integer", "description": "The native height of the video track in CSS pixels" },
-                { "name": "width", "type": "integer", "description": "The native width of the video track in CSS pixels" }
+                { "name": "width", "type": "integer", "description": "The native width of the video track in CSS pixels" },
+                { "name": "spatialVideoMetadata", "$ref": "SpatialVideoMetadata", "optional": true },
+                { "name": "videoProjectionMetadata", "$ref": "VideoProjectionMetadata", "optional": true }
             ]
         },
         {
@@ -1556,6 +1570,32 @@
                 { "name": "totalVideoFrames", "type": "integer", "description": "The total number of frames enqueued for display by the media element." }
             ]
         },
+        {
+            "id": "SpatialVideoMetadata",
+            "type": "object",
+            "description": "A structure containing metadata describing spatial video properties.",
+            "properties": [
+                { "name": "width", "type": "number" },
+                { "name": "height", "type": "number" },
+                { "name": "horizontalFOVDegrees", "type": "number", "description": "The horizontal field-of-view measurement, in degrees" },
+                { "name": "baseline", "type": "number", "description": "The distance between the centers of the lenses in a camera system, in micrometers" },
+                { "name": "disparityAdjustment", "type": "number", "description": "The relative shift of the left and right eye images, as a percentage." }
+            ]
+        },
+        {
+            "id": "VideoProjectionMetadataKind",
+            "type": "string",
+            "enum": ["unknown", "equirectangular", "half-equirectangular", "equi-angular-cubemap", "parametric", "pyramid", "apple-immersive-video" ],
+            "description": "Video Projection Metadata Kind."
+        },
+        {
+            "id": "VideoProjectionMetadata",
+            "type": "object",
+            "description": "A structure containing metadata describing video projections.",
+            "properties": [
+                { "name": "kind", "$ref": "VideoProjectionMetadataKind", "description": "The kind of video projection." }
+            ]
+        },
         {
             "id": "ViewportSize",
             "type": "object",
@@ -1581,6 +1621,26 @@
                 { "name": "depth", "type": "integer", "optional": true, "description": "The maximum depth at which children should be retrieved, defaults to 1. Use -1 for the entire subtree or provide an integer larger than 0." }
             ]
         },
+        {
+            "name": "requestAssignedSlot",
+            "description": "Requests the <code>HTMLSlotElement</code> that the node with the given id is assigned to.",
+            "parameters": [
+                { "name": "nodeId", "$ref": "NodeId" }
+            ],
+            "returns": [
+                { "name": "slotElementId", "$ref": "NodeId", "optional": true, "description": "Not provided if the given node is not assigned to a <code>HTMLSlotElement</code>." }
+            ]
+        },
+        {
+            "name": "requestAssignedNodes",
+            "description": "Requests the list of assigned nodes for the <code>HTMLSlotElement</code> with the given id.",
+            "parameters": [
+                { "name": "slotElementId", "$ref": "NodeId" }
+            ],
+            "returns": [
+                { "name": "assignedNodeIds", "type": "array", "items": { "$ref": "NodeId" } }
+            ]
+        },
         {
             "name": "querySelector",
             "description": "Executes <code>querySelector</code> on a given node.",
@@ -2767,8 +2827,8 @@
             "parameters": [
                 { "name": "url", "type": "string" },
                 { "name": "shouldBlackbox", "type": "boolean" },
-                { "name": "caseSensitive", "type": "boolean", "optional": true, "description": "If <code>true</code>, <code>url</code> is case sensitive." },
-                { "name": "isRegex", "type": "boolean", "optional": true, "description": "If <code>true</code>, treat <code>url</code> as regular expression." },
+                { "name": "caseSensitive", "type": "boolean", "optional": true, "description": "If <code>true</code>, <code>url</code> is case sensitive. Defaults to true." },
+                { "name": "isRegex", "type": "boolean", "optional": true, "description": "If <code>true</code>, treat <code>url</code> as regular expression. Defaults to false." },
                 { "name": "sourceRanges", "type": "array", "items": { "type": "integer" }, "optional": true, "description": "If provided, limits where in the script the debugger will skip pauses. Expected structure is a repeated <code>[startLine, startColumn, endLine, endColumn]</code>. Ignored if <code>shouldBlackbox</code> is <code>false</code>." }
             ]
         },
@@ -3115,8 +3175,8 @@
 ,
 {
     "domain": "Inspector",
-    "debuggableTypes": ["itml", "javascript", "page", "web-page"],
-    "targetTypes": ["itml", "javascript", "page"],
+    "debuggableTypes": ["itml", "javascript", "page", "service-worker", "web-page"],
+    "targetTypes": ["itml", "javascript", "page", "service-worker"],
     "commands": [
         {
             "name": "enable",
@@ -4742,7 +4802,7 @@
     "domain": "ScriptProfiler",
     "description": "Profiler domain exposes JavaScript evaluation timing and profiling.",
     "debuggableTypes": ["itml", "javascript", "page", "web-page"],
-    "targetTypes": ["itml", "javascript", "page"],
+    "targetTypes": ["itml", "javascript", "page", "worker"],
     "types": [
         {
             "id": "EventType",
@@ -4977,7 +5037,7 @@
     "domain": "Timeline",
     "description": "Timeline provides its clients with instrumentation records that are generated during the page runtime. Timeline instrumentation can be started and stopped using corresponding commands. While timeline is started, it is generating timeline event records.",
     "debuggableTypes": ["page", "web-page"],
-    "targetTypes": ["page"],
+    "targetTypes": ["page", "worker"],
     "types": [
         {
             "id": "EventType",
@@ -5057,6 +5117,7 @@
         {
             "name": "setAutoCaptureEnabled",
             "description": "Toggle auto capture state. If <code>true</code> the backend will disable breakpoints and start capturing on navigation. The backend will fire the <code>autoCaptureStarted</code> event when an auto capture starts. The frontend should stop the auto capture when appropriate and re-enable breakpoints.",
+            "targetTypes": ["page"],
             "parameters": [
                 { "name": "enabled", "type": "boolean", "description": "New auto capture state." }
             ]
@@ -5093,7 +5154,8 @@
         },
         {
             "name": "autoCaptureStarted",
-            "description": "Fired when auto capture started."
+            "description": "Fired when auto capture started.",
+            "targetTypes": ["page"]
         }
     ]
 }
@@ -5116,7 +5178,7 @@
             "description": "Sent after the frontend has sent all initialization messages and can resume this worker. This command is required to allow execution in the worker.",
             "parameters": [
                 { "name": "workerId", "type": "string" }
-            ]
+            ]            
         },
         {
             "name": "sendMessageToWorker",

@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jun 20, 2025
@@ -126,7 +126,7 @@ WI.AnimationManager = class AnimationManager
if (!animation)
return;

// COMPATIBILITY (iOS 18.X, macOS 15.X): `Animation.effectChanged` removed the `effect` parameter in favor of `Animation.requestEffect`.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there's also a lot more changes for COMPATIBILITY (iOS X.Y, macOS X.Y) that need to be updated


// Console
InspectorBackend.registerDomain("Console", ["itml", "javascript", "page", "service-worker", "worker"]);
InspectorBackend.registerEnum("Console.ChannelSource", {XML: "xml", JavaScript: "javascript", Network: "network", ConsoleAPI: "console-api", Storage: "storage", Appcache: "appcache", Rendering: "rendering", CSS: "css", Accessibility: "accessibility", Security: "security", ContentBlocker: "content-blocker", Media: "media", MediaSource: "mediasource", WebRTC: "webrtc", ITPDebug: "itp-debug", PrivateClickMeasurement: "private-click-measurement", PaymentRequest: "payment-request", Other: "other"});
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh hmm apparently MessageSource::AppCache is still in use. i think we may need to add this back to all the old protocol .js/.json in that case (i.e. undo these changes from 289820@main)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AppCache has been marked for deprecation in Safari since 2018:
https://bugs.webkit.org/show_bug.cgi?id=181764

Both Chrome and Firefox have deprecated the feature:
https://web.dev/articles/appcache-removal

We intentionally rewrote the older protocol snapshots to remove AppCache to prevent issues where Web Inspector doesn't have the frontend required to inspect an older device that happens to still use the deprecated feature: #39648 (comment)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@AnujPanta1 there are some references to appcache that should be manually removed, like we did for the previous snapshot patch

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so even though we removed support for inspecting AppCache in 289820@main there are still uses of MessageSource::AppCache inside WebCore. as such, we need to keep around Console.ChannelSource.AppCache in order for the frontend to support those console logs

if we are OK with removing it because AppCache is deprecated (which was the logic behind prematurely removing frontend support in 289820@main) then we'd need to change those cases in WebCore to use MessageSource::Other

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch! We should replace MessageSource::AppCache with MessageSource:: Other in WebCore so that we can also remove the "appcache"channel source type from Console.json and avoid having to do this manual rewrite again.

That can be a separate patch. Filed: https://bugs.webkit.org/show_bug.cgi?id=294907

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR to replace MessageSource::AppCache: #47122

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed the references to appcache and got those other COMPATIBILITY (iOS X.Y, macOS X.Y) I didn't know those were apart of the PR as well thank you !

@AnujPanta1 AnujPanta1 removed the merging-blocked Applied to prevent a change from being merged label Jun 24, 2025
Copy link
Member

@dcrousso dcrousso left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there's actually one more comment

// COMPATIBILITY (macOS X.Y, iOS X.Y): Debugger.setShouldBlackboxURL.sourceRanges did not exist yet.

that needs to be changed to

// COMPATIBILITY (macOS 15.0, iOS 18.0): Debugger.setShouldBlackboxURL.sourceRanges did not exist yet.

if you dont mind doing that as well


// Console
InspectorBackend.registerDomain("Console", ["itml", "javascript", "page", "service-worker", "worker"]);
InspectorBackend.registerEnum("Console.ChannelLevel", {Off: "off", Basic: "basic", Verbose: "verbose"});
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there should still be a ChannelSource here, just without any mention of AppCache

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, the latest change was too broad: diff

@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jun 25, 2025
@AnujPanta1 AnujPanta1 removed the merging-blocked Applied to prevent a change from being merged label Jun 25, 2025
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Jun 26, 2025
@AnujPanta1 AnujPanta1 added merge-queue Applied to send a pull request to merge-queue and removed merging-blocked Applied to prevent a change from being merged labels Jun 26, 2025
@rcaliman-apple rcaliman-apple added merge-queue Applied to send a pull request to merge-queue and removed merge-queue Applied to send a pull request to merge-queue labels Jun 30, 2025
@webkit-commit-queue webkit-commit-queue added merging-blocked Applied to prevent a change from being merged and removed merge-queue Applied to send a pull request to merge-queue labels Jun 30, 2025
@AnujPanta1 AnujPanta1 removed the merging-blocked Applied to prevent a change from being merged label Jul 1, 2025
https://bugs.webkit.org/show_bug.cgi?id=294546
rdar://143587423

Reviewed by NOBODY (OOPS!).

* Source/WebInspectorUI/UserInterface/Controllers/AnimationManager.js:
(WI.AnimationManager.prototype.effectChanged):
* Source/WebInspectorUI/UserInterface/Controllers/TimelineManager.js:
(WI.TimelineManager.prototype.initializeTarget):
(WI.TimelineManager.prototype.disable):
(WI.TimelineManager.prototype._updateAutoCaptureInstruments):
* Source/WebInspectorUI/UserInterface/Models/Animation.js:
(WI.Animation.fromPayload):
(WI.Animation.prototype.effectChanged):
* Source/WebInspectorUI/UserInterface/Models/Instrument.js:
(WI.Instrument.startLegacyTimelineAgent):
(WI.Instrument.stopLegacyTimelineAgent):
* Source/WebInspectorUI/UserInterface/Models/ScriptInstrument.js:
(WI.ScriptInstrument.prototype.startInstrumentation):
(WI.ScriptInstrument.prototype.stopInstrumentation):
(WI.ScriptInstrument):
* Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js:
(WI.SourceMapResource.prototype.get supportsScriptBlackboxing):
* Source/WebInspectorUI/UserInterface/Protocol/AnimationObserver.js:
(WI.AnimationObserver.prototype.effectChanged):
* Source/WebInspectorUI/UserInterface/Protocol/Legacy/iOS/26.0/InspectorBackendCommands.js: Added.
* Source/WebInspectorUI/UserInterface/Protocol/Legacy/macOS/26.0/InspectorBackendCommands.js: Added.
* Source/WebInspectorUI/UserInterface/Views/DOMTreeContentView.js:
(WI.DOMTreeContentView.prototype._populateConfigureDOMTreeBadgesNavigationItemContextMenu):
* Source/WebInspectorUI/Versions/Inspector-iOS-26.0.json: Added.
* Source/WebInspectorUI/Versions/Inspector-macOS-26.0.json: Added.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Web Inspector Bugs related to the WebKit Web Inspector.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants