WebKit Bugzilla
Attachment 348174 Details for
Bug 188717
: Web Inspector: provide autocompletion for event breakpoints
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-188717-20180827111841.patch (text/plain), 13.32 KB, created by
Devin Rousso
on 2018-08-27 11:18:41 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Devin Rousso
Created:
2018-08-27 11:18:41 PDT
Size:
13.32 KB
patch
obsolete
>diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index 4dcf16a4470fb9a46f998e5a3d8cbceb3dd4171e..e6270259be37b53600ba81a7c374a840468cc35b 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,13 @@ >+2018-08-27 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: provide autocompletion for event breakpoints >+ https://bugs.webkit.org/show_bug.cgi?id=188717 >+ >+ Reviewed by Brian Burg. >+ >+ * inspector/protocol/DOM.json: >+ Add `getSupportedEventNames` command. >+ > 2018-08-24 Michael Saboff <msaboff@apple.com> > > YARR: Update UCS canonicalization tables for Unicode 11 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 302c942a8cb7e43d5dfc46d5cbb1895e79b4b176..807df8182e276eec2d2b9946358f4f548dd04021 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,16 @@ >+2018-08-27 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: provide autocompletion for event breakpoints >+ https://bugs.webkit.org/show_bug.cgi?id=188717 >+ >+ Reviewed by Brian Burg. >+ >+ Test: inspector/dom/getSupportedEventNames.html >+ >+ * inspector/agents/InspectorDOMAgent.h: >+ * inspector/agents/InspectorDOMAgent.cpp: >+ (WebCore::InspectorDOMAgent::getSupportedEventNames): Added. >+ > 2018-08-24 Ryosuke Niwa <rniwa@webkit.org> > > Click event from click() is not composed >diff --git a/Source/WebInspectorUI/ChangeLog b/Source/WebInspectorUI/ChangeLog >index 434d03e3d059b79b866563566c9d695c244a7a2d..53820c115a134c495e2f06806cf44bae2b5f10f2 100644 >--- a/Source/WebInspectorUI/ChangeLog >+++ b/Source/WebInspectorUI/ChangeLog >@@ -1,3 +1,22 @@ >+2018-08-27 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: provide autocompletion for event breakpoints >+ https://bugs.webkit.org/show_bug.cgi?id=188717 >+ >+ Reviewed by Brian Burg. >+ >+ * UserInterface/Controllers/DOMTreeManager.js: >+ (WI.DOMTreeManager): >+ (WI.DOMTreeManager.prototype.getSupportedEventNames): Added. >+ >+ * UserInterface/Views/EventBreakpointPopover.js: >+ (WI.EventBreakpointPopover): >+ (WI.EventBreakpointPopover.prototype.show): >+ (WI.EventBreakpointPopover.prototype.dismiss): Added. >+ (WI.EventBreakpointPopover.prototype.completionSuggestionsClickedCompletion): Added. >+ (WI.EventBreakpointPopover.prototype._presentOverTargetElement): >+ (WI.EventBreakpointPopover.prototype._showSuggestionsView): Added. >+ > 2018-08-23 Devin Rousso <drousso@apple.com> > > Web Inspector: Color picker: can't enter decimal numbers for opacity >diff --git a/Source/JavaScriptCore/inspector/protocol/DOM.json b/Source/JavaScriptCore/inspector/protocol/DOM.json >index afdf4dbfdade6debf970437cccb5b004191899c3..810b3c650ef6fcbc34d0634f068b18e2883e4382 100644 >--- a/Source/JavaScriptCore/inspector/protocol/DOM.json >+++ b/Source/JavaScriptCore/inspector/protocol/DOM.json >@@ -255,6 +255,13 @@ > { "name": "name", "type": "string", "description": "Name of the attribute to remove." } > ] > }, >+ { >+ "name": "getSupportedEventNames", >+ "description": "Gets the list of builtin DOM event names.", >+ "returns": [ >+ { "name": "eventNames", "type": "array", "items": { "type": "string" } } >+ ] >+ }, > { > "name": "getEventListenersForNode", > "description": "Returns event listeners relevant to the node.", >diff --git a/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp b/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp >index ee2c0d5bea51637c710b45e047fbbadcc166b2bc..af816ad13bccd6938d3f1728a2d6cc5c0ca2ce30 100644 >--- a/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp >+++ b/Source/WebCore/inspector/agents/InspectorDOMAgent.cpp >@@ -56,6 +56,7 @@ > #include "Element.h" > #include "Event.h" > #include "EventListener.h" >+#include "EventNames.h" > #include "Frame.h" > #include "FrameTree.h" > #include "HTMLElement.h" >@@ -829,6 +830,15 @@ void InspectorDOMAgent::setNodeValue(ErrorString& errorString, int nodeId, const > m_domEditor->replaceWholeText(downcast<Text>(*node), value, errorString); > } > >+void InspectorDOMAgent::getSupportedEventNames(ErrorString&, RefPtr<JSON::ArrayOf<String>>& eventNames) >+{ >+ eventNames = JSON::ArrayOf<String>::create(); >+ >+#define DOM_EVENT_NAMES_ADD(name) eventNames->addItem(#name); >+ DOM_EVENT_NAMES_FOR_EACH(DOM_EVENT_NAMES_ADD) >+#undef DOM_EVENT_NAMES_ADD >+} >+ > void InspectorDOMAgent::getEventListenersForNode(ErrorString& errorString, int nodeId, const String* objectGroup, RefPtr<JSON::ArrayOf<Inspector::Protocol::DOM::EventListener>>& listenersArray) > { > listenersArray = JSON::ArrayOf<Inspector::Protocol::DOM::EventListener>::create(); >diff --git a/Source/WebCore/inspector/agents/InspectorDOMAgent.h b/Source/WebCore/inspector/agents/InspectorDOMAgent.h >index a21c8f2cf8f21aa5b5e623aee859b57378ade0aa..93751a22ece7e13255f0d3582b6fd9bb8df303c0 100644 >--- a/Source/WebCore/inspector/agents/InspectorDOMAgent.h >+++ b/Source/WebCore/inspector/agents/InspectorDOMAgent.h >@@ -123,6 +123,7 @@ public: > void setOuterHTML(ErrorString&, int nodeId, const String& outerHTML) override; > void insertAdjacentHTML(ErrorString&, int nodeId, const String& position, const String& html) override; > void setNodeValue(ErrorString&, int nodeId, const String& value) override; >+ void getSupportedEventNames(ErrorString&, RefPtr<JSON::ArrayOf<String>>& eventNames) override; > void getEventListenersForNode(ErrorString&, int nodeId, const WTF::String* objectGroup, RefPtr<JSON::ArrayOf<Inspector::Protocol::DOM::EventListener>>& listenersArray) override; > void setEventListenerDisabled(ErrorString&, int eventListenerId, bool disabled) override; > void setBreakpointForEventListener(ErrorString&, int eventListenerId) override; >diff --git a/Source/WebInspectorUI/UserInterface/Controllers/DOMTreeManager.js b/Source/WebInspectorUI/UserInterface/Controllers/DOMTreeManager.js >index c4c8599c15c9f9c669478199247ead8a014b61d2..fbfda93bc79e909ae0bd35c42e112196d9184c02 100644 >--- a/Source/WebInspectorUI/UserInterface/Controllers/DOMTreeManager.js >+++ b/Source/WebInspectorUI/UserInterface/Controllers/DOMTreeManager.js >@@ -546,6 +546,19 @@ WI.DOMTreeManager = class DOMTreeManager extends WI.Object > DOMAgent.setInspectedNode(node.id, callback); > } > >+ getSupportedEventNames(callback) >+ { >+ if (!DOMAgent.getSupportedEventNames) >+ return Promise.resolve(new Set); >+ >+ if (!this._getSupportedEventNamesPromise) { >+ this._getSupportedEventNamesPromise = DOMAgent.getSupportedEventNames() >+ .then(({eventNames}) => new Set(eventNames)); >+ } >+ >+ return this._getSupportedEventNamesPromise; >+ } >+ > setEventListenerDisabled(eventListener, disabled) > { > DOMAgent.setEventListenerDisabled(eventListener.eventListenerId, disabled, (error) => { >diff --git a/Source/WebInspectorUI/UserInterface/Views/EventBreakpointPopover.js b/Source/WebInspectorUI/UserInterface/Views/EventBreakpointPopover.js >index ad7a92a077bcab059c738d60eeeca65dc93f9e04..ae8b87e6dbaf544bfc9ec02c835e4b1ce4604397 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/EventBreakpointPopover.js >+++ b/Source/WebInspectorUI/UserInterface/Views/EventBreakpointPopover.js >@@ -31,6 +31,9 @@ WI.EventBreakpointPopover = class EventBreakpointPopover extends WI.Popover > > this._breakpoint = null; > >+ this._currentCompletions = []; >+ this._suggestionsView = new WI.CompletionSuggestionsView(this, {preventBlur: true}); >+ > this._targetElement = null; > this._preferredEdges = null; > >@@ -82,10 +85,39 @@ WI.EventBreakpointPopover = class EventBreakpointPopover extends WI.Popover > this._domEventNameInputElement.placeholder = WI.UIString("Example: â%sâ").format("click"); > this._domEventNameInputElement.spellcheck = false; > this._domEventNameInputElement.addEventListener("keydown", (event) => { >- if (!isEnterKey(event)) >- return; >+ if (isEnterKey(event) || event.key === "Tab") { >+ this._result = WI.InputPopover.Result.Committed; >+ >+ if (this._suggestionsView.visible && this._suggestionsView.selectedIndex < this._currentCompletions.length) >+ this._domEventNameInputElement.value = this._currentCompletions[this._suggestionsView.selectedIndex]; > >- this.dismiss(); >+ this.dismiss(); >+ } else if ((event.key === "ArrowUp" || event.key === "ArrowDown") && this._suggestionsView.visible) { >+ event.stop(); >+ >+ if (event.key === "ArrowDown") >+ this._suggestionsView.selectNext(); >+ else >+ this._suggestionsView.selectPrevious(); >+ } >+ }); >+ this._domEventNameInputElement.addEventListener("input", (event) => { >+ WI.domTreeManager.getSupportedEventNames() >+ .then((eventNames) => { >+ this._currentCompletions = []; >+ for (let eventName of eventNames) { >+ if (eventName.toLowerCase().startsWith(this._domEventNameInputElement.value)) >+ this._currentCompletions.push(eventName); >+ } >+ >+ if (!this._currentCompletions.length) { >+ this._suggestionsView.hide(); >+ return; >+ } >+ >+ this._suggestionsView.update(this._currentCompletions); >+ this._showSuggestionsView(); >+ }); > }); > > this.content = contentElement; >@@ -116,6 +148,17 @@ WI.EventBreakpointPopover = class EventBreakpointPopover extends WI.Popover > this._breakpoint = new WI.EventBreakpoint(type, value); > > super.dismiss(); >+ >+ this._suggestionsView.hide(); >+ } >+ >+ // CompletionSuggestionsView delegate >+ >+ completionSuggestionsClickedCompletion(suggestionsView, selectedText) >+ { >+ this._domEventNameInputElement.value = selectedText; >+ >+ this.dismiss(); > } > > // Private >@@ -131,8 +174,22 @@ WI.EventBreakpointPopover = class EventBreakpointPopover extends WI.Popover > > _handleTypeSelectChange(event) > { >- this._domEventNameInputElement.hidden = this._typeSelectElement.value !== WI.EventBreakpoint.Type.Listener; >+ let listenerTypeSelected = this._typeSelectElement.value === WI.EventBreakpoint.Type.Listener; >+ this._domEventNameInputElement.hidden = !listenerTypeSelected; > > this.update(); >+ >+ if (listenerTypeSelected) { >+ this._domEventNameInputElement.focus(); >+ >+ if (this._domEventNameInputElement.value) >+ this._showSuggestionsView(); >+ } else >+ this._suggestionsView.hide(); > } >+ >+ _showSuggestionsView() >+ { >+ this._suggestionsView.show(WI.Rect.rectFromClientRect(this._domEventNameInputElement.getBoundingClientRect())); >+ } > }; >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index ff519068a297bd58d180b0f70dd1dda9c5b69c89..677d8e3f6250f2d5ac4c54dcc5b2cf97c4e99862 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,13 @@ >+2018-08-27 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: provide autocompletion for event breakpoints >+ https://bugs.webkit.org/show_bug.cgi?id=188717 >+ >+ Reviewed by Brian Burg. >+ >+ * inspector/dom/getSupportedEventNames-expected.txt: Added. >+ * inspector/dom/getSupportedEventNames.html: Added. >+ > 2018-08-24 Jer Noble <jer.noble@apple.com> > > Using Touch Bar to scrub video on Youtube results in video playback freeze >diff --git a/LayoutTests/inspector/dom/getSupportedEventNames-expected.txt b/LayoutTests/inspector/dom/getSupportedEventNames-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2cb8771a50c1a42b7929a80abf42b1ae0f7a2181 >--- /dev/null >+++ b/LayoutTests/inspector/dom/getSupportedEventNames-expected.txt >@@ -0,0 +1,4 @@ >+PASS: Should have recieved at least two event names. >+PASS: Should have recieved the "click" event name. >+PASS: Should have recieved the "load" event name. >+ >diff --git a/LayoutTests/inspector/dom/getSupportedEventNames.html b/LayoutTests/inspector/dom/getSupportedEventNames.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4ddcae22a01e448025550b13512b42252d7f247e >--- /dev/null >+++ b/LayoutTests/inspector/dom/getSupportedEventNames.html >@@ -0,0 +1,25 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<script src="../../http/tests/inspector/resources/protocol-test.js"></script> >+<script> >+function test() >+{ >+ InspectorProtocol.sendCommand("DOM.getSupportedEventNames", {}, (messageObject) => { >+ if ("error" in messageObject) >+ ProtocolTest.log(messageObject.error.message); >+ else { >+ let eventNames = messageObject["result"]["eventNames"]; >+ ProtocolTest.expectGreaterThan(eventNames.length, 2, "Should have recieved at least two event names."); >+ ProtocolTest.expectThat(eventNames.includes("click"), "Should have recieved the \"click\" event name."); >+ ProtocolTest.expectThat(eventNames.includes("load"), "Should have recieved the \"load\" event name."); >+ } >+ >+ ProtocolTest.completeTest(); >+ }); >+} >+</script> >+</head> >+<body onload="runTest()"> >+</body> >+</html>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 188717
:
347426
|
347427
|
347430
| 348174