Title: [204370] trunk
Revision
204370
Author
[email protected]
Date
2016-08-10 20:35:01 -0700 (Wed, 10 Aug 2016)

Log Message

Web Inspector: Should be able to Edit Node Attributes and Styles for non-UserAgent Shadow DOM nodes
https://bugs.webkit.org/show_bug.cgi?id=160762
<rdar://problem/27798271>

Patch by Joseph Pecoraro <[email protected]> on 2016-08-10
Reviewed by Ryosuke Niwa.

Source/WebCore:

* inspector/InspectorDOMAgent.cpp:
(WebCore::InspectorDOMAgent::assertEditableNode):
(WebCore::InspectorDOMAgent::assertEditableElement):
* inspector/PageConsoleAgent.cpp:
(WebCore::PageConsoleAgent::addInspectedNode):
Allow editing shadow DOM nodes as long as they are not in a UserAgent shadow tree.

Source/WebInspectorUI:

* UserInterface/Models/DOMNode.js:
(WebInspector.DOMNode.prototype.isInUserAgentShadowTree):
(WebInspector.DOMNode.prototype.isShadowRoot):
(WebInspector.DOMNode.prototype.isUserAgentShadowRoot):
(WebInspector.DOMNode.prototype.ancestorShadowRoot):
(WebInspector.DOMNode.prototype.ancestorShadowHost):
Add methods for determining the shadow root, host, and easily
checking the type of shadow tree a node is in.

* UserInterface/Models/CSSStyleDeclaration.js:
(WebInspector.CSSStyleDeclaration.prototype.get editable):
* UserInterface/Views/DOMTreeElement.js:
(WebInspector.DOMTreeElement.prototype.get editable):
(WebInspector.DOMTreeElement.prototype._startEditingTarget):
(WebInspector.DOMTreeElement.prototype._populateTagContextMenu):
* UserInterface/Views/RulesStyleDetailsPanel.js:
(WebInspector.RulesStyleDetailsPanel.prototype.newRuleButtonClicked):
* UserInterface/Views/VisualStyleSelectorSection.js:
(WebInspector.VisualStyleSelectorSection.prototype._addNewRule):
Allow editing shadow DOM nodes as long as they are not in a UserAgent shadow tree.

* UserInterface/Views/DOMTreeOutline.js:
(WebInspector.DOMTreeOutline.prototype._populateContextMenu):
Disallow "Log Element" on UserAgent shadow tree nodes.

LayoutTests:

* inspector/dom/shadowRootType-expected.txt:
* inspector/dom/shadowRootType.html:
Add tests for DOMNode.prototype.isInUserAgentShadowTree.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (204369 => 204370)


--- trunk/LayoutTests/ChangeLog	2016-08-11 03:26:55 UTC (rev 204369)
+++ trunk/LayoutTests/ChangeLog	2016-08-11 03:35:01 UTC (rev 204370)
@@ -1,3 +1,15 @@
+2016-08-10  Joseph Pecoraro  <[email protected]>
+
+        Web Inspector: Should be able to Edit Node Attributes and Styles for non-UserAgent Shadow DOM nodes
+        https://bugs.webkit.org/show_bug.cgi?id=160762
+        <rdar://problem/27798271>
+
+        Reviewed by Ryosuke Niwa.
+
+        * inspector/dom/shadowRootType-expected.txt:
+        * inspector/dom/shadowRootType.html:
+        Add tests for DOMNode.prototype.isInUserAgentShadowTree.
+
 2016-08-10  Chris Dumez  <[email protected]>
 
         Optimization in Node.insertBefore() is not spec-compliant

Modified: trunk/LayoutTests/inspector/dom/shadowRootType-expected.txt (204369 => 204370)


--- trunk/LayoutTests/inspector/dom/shadowRootType-expected.txt	2016-08-11 03:26:55 UTC (rev 204369)
+++ trunk/LayoutTests/inspector/dom/shadowRootType-expected.txt	2016-08-11 03:35:01 UTC (rev 204370)
@@ -5,14 +5,17 @@
 -- Running test case: ShadowRootType.UserAgent
 PASS: DOMNode has a single shadow root.
 PASS: DOMNode has UserAgent shadow root type.
+PASS: DOMNode is in a UserAgent shadow tree.
 
 -- Running test case: ShadowRootType.Closed
 PASS: DOMNode has a single shadow root.
 PASS: DOMNode has Closed shadow root type.
+PASS: DOMNode is not in a UserAgent shadow tree.
 
 -- Running test case: ShadowRootType.Open
 PASS: DOMNode has a single shadow root.
 PASS: DOMNode has Open shadow root type.
+PASS: DOMNode is not in a UserAgent shadow tree.
 
 -- Running test case: NoShadowRootType
 PASS: DOMNode has no shadow roots.

Modified: trunk/LayoutTests/inspector/dom/shadowRootType.html (204369 => 204370)


--- trunk/LayoutTests/inspector/dom/shadowRootType.html	2016-08-11 03:26:55 UTC (rev 204369)
+++ trunk/LayoutTests/inspector/dom/shadowRootType.html	2016-08-11 03:35:01 UTC (rev 204370)
@@ -17,6 +17,7 @@
                 InspectorTest.assert(domNode, "Got DOMNode for #host-user-agent");
                 InspectorTest.expectThat(domNode.shadowRoots().length === 1, "DOMNode has a single shadow root.");
                 InspectorTest.expectThat(domNode.shadowRoots()[0].shadowRootType() === WebInspector.DOMNode.ShadowRootType.UserAgent, "DOMNode has UserAgent shadow root type.");
+                InspectorTest.expectThat(domNode.shadowRoots()[0].isInUserAgentShadowTree(), "DOMNode is in a UserAgent shadow tree.");
                 resolve();
             });
         }
@@ -30,6 +31,7 @@
                 InspectorTest.assert(domNode, "Got DOMNode for #host-closed");
                 InspectorTest.expectThat(domNode.shadowRoots().length === 1, "DOMNode has a single shadow root.");
                 InspectorTest.expectThat(domNode.shadowRoots()[0].shadowRootType() === WebInspector.DOMNode.ShadowRootType.Closed, "DOMNode has Closed shadow root type.");
+                InspectorTest.expectThat(!domNode.shadowRoots()[0].isInUserAgentShadowTree(), "DOMNode is not in a UserAgent shadow tree.");
                 resolve();
             });
         }
@@ -43,6 +45,7 @@
                 InspectorTest.assert(domNode, "Got DOMNode for #host-open");
                 InspectorTest.expectThat(domNode.shadowRoots().length === 1, "DOMNode has a single shadow root.");
                 InspectorTest.expectThat(domNode.shadowRoots()[0].shadowRootType() === WebInspector.DOMNode.ShadowRootType.Open, "DOMNode has Open shadow root type.");
+                InspectorTest.expectThat(!domNode.shadowRoots()[0].isInUserAgentShadowTree(), "DOMNode is not in a UserAgent shadow tree.");
                 resolve();
             });
         }

Modified: trunk/Source/WebCore/ChangeLog (204369 => 204370)


--- trunk/Source/WebCore/ChangeLog	2016-08-11 03:26:55 UTC (rev 204369)
+++ trunk/Source/WebCore/ChangeLog	2016-08-11 03:35:01 UTC (rev 204370)
@@ -1,3 +1,18 @@
+2016-08-10  Joseph Pecoraro  <[email protected]>
+
+        Web Inspector: Should be able to Edit Node Attributes and Styles for non-UserAgent Shadow DOM nodes
+        https://bugs.webkit.org/show_bug.cgi?id=160762
+        <rdar://problem/27798271>
+
+        Reviewed by Ryosuke Niwa.
+
+        * inspector/InspectorDOMAgent.cpp:
+        (WebCore::InspectorDOMAgent::assertEditableNode):
+        (WebCore::InspectorDOMAgent::assertEditableElement):
+        * inspector/PageConsoleAgent.cpp:
+        (WebCore::PageConsoleAgent::addInspectedNode):
+        Allow editing shadow DOM nodes as long as they are not in a UserAgent shadow tree.
+
 2016-08-10  Chris Dumez  <[email protected]>
 
         Optimization in Node.insertBefore() is not spec-compliant

Modified: trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp (204369 => 204370)


--- trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp	2016-08-11 03:26:55 UTC (rev 204369)
+++ trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp	2016-08-11 03:35:01 UTC (rev 204370)
@@ -395,8 +395,8 @@
     Node* node = assertNode(errorString, nodeId);
     if (!node)
         return nullptr;
-    if (node->isInShadowTree()) {
-        errorString = ASCIILiteral("Cannot edit nodes from shadow trees");
+    if (node->isInUserAgentShadowTree()) {
+        errorString = ASCIILiteral("Cannot edit nodes in user agent shadow trees");
         return nullptr;
     }
     if (node->isPseudoElement()) {
@@ -411,8 +411,8 @@
     Element* element = assertElement(errorString, nodeId);
     if (!element)
         return nullptr;
-    if (element->isInShadowTree()) {
-        errorString = ASCIILiteral("Cannot edit elements from shadow trees");
+    if (element->isInUserAgentShadowTree()) {
+        errorString = ASCIILiteral("Cannot edit elements in user agent shadow trees");
         return nullptr;
     }
     if (element->isPseudoElement()) {

Modified: trunk/Source/WebCore/inspector/PageConsoleAgent.cpp (204369 => 204370)


--- trunk/Source/WebCore/inspector/PageConsoleAgent.cpp	2016-08-11 03:26:55 UTC (rev 204369)
+++ trunk/Source/WebCore/inspector/PageConsoleAgent.cpp	2016-08-11 03:35:01 UTC (rev 204370)
@@ -68,7 +68,7 @@
 void PageConsoleAgent::addInspectedNode(ErrorString& errorString, int nodeId)
 {
     Node* node = m_inspectorDOMAgent->nodeForId(nodeId);
-    if (!node || node->isInShadowTree()) {
+    if (!node || node->isInUserAgentShadowTree()) {
         errorString = ASCIILiteral("nodeId is not valid");
         return;
     }

Modified: trunk/Source/WebInspectorUI/ChangeLog (204369 => 204370)


--- trunk/Source/WebInspectorUI/ChangeLog	2016-08-11 03:26:55 UTC (rev 204369)
+++ trunk/Source/WebInspectorUI/ChangeLog	2016-08-11 03:35:01 UTC (rev 204370)
@@ -1,3 +1,36 @@
+2016-08-10  Joseph Pecoraro  <[email protected]>
+
+        Web Inspector: Should be able to Edit Node Attributes and Styles for non-UserAgent Shadow DOM nodes
+        https://bugs.webkit.org/show_bug.cgi?id=160762
+        <rdar://problem/27798271>
+
+        Reviewed by Ryosuke Niwa.
+
+        * UserInterface/Models/DOMNode.js:
+        (WebInspector.DOMNode.prototype.isInUserAgentShadowTree):
+        (WebInspector.DOMNode.prototype.isShadowRoot):
+        (WebInspector.DOMNode.prototype.isUserAgentShadowRoot):
+        (WebInspector.DOMNode.prototype.ancestorShadowRoot):
+        (WebInspector.DOMNode.prototype.ancestorShadowHost):
+        Add methods for determining the shadow root, host, and easily
+        checking the type of shadow tree a node is in.
+
+        * UserInterface/Models/CSSStyleDeclaration.js:
+        (WebInspector.CSSStyleDeclaration.prototype.get editable):
+        * UserInterface/Views/DOMTreeElement.js:
+        (WebInspector.DOMTreeElement.prototype.get editable):
+        (WebInspector.DOMTreeElement.prototype._startEditingTarget):
+        (WebInspector.DOMTreeElement.prototype._populateTagContextMenu):
+        * UserInterface/Views/RulesStyleDetailsPanel.js:
+        (WebInspector.RulesStyleDetailsPanel.prototype.newRuleButtonClicked):
+        * UserInterface/Views/VisualStyleSelectorSection.js:
+        (WebInspector.VisualStyleSelectorSection.prototype._addNewRule):
+        Allow editing shadow DOM nodes as long as they are not in a UserAgent shadow tree.
+
+        * UserInterface/Views/DOMTreeOutline.js:
+        (WebInspector.DOMTreeOutline.prototype._populateContextMenu):
+        Disallow "Log Element" on UserAgent shadow tree nodes.
+
 2016-08-10  Nikita Vasilyev  <[email protected]>
 
         Web Inspector: Can't click on the lower half of "S" icon in _javascript_ Allocations timeline

Modified: trunk/Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js (204369 => 204370)


--- trunk/Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js	2016-08-11 03:26:55 UTC (rev 204369)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js	2016-08-11 03:35:01 UTC (rev 204370)
@@ -85,7 +85,7 @@
             return this._ownerRule && this._ownerRule.editable;
 
         if (this._type === WebInspector.CSSStyleDeclaration.Type.Inline)
-            return !this._node.isInShadowTree();
+            return !this._node.isInUserAgentShadowTree();
 
         return false;
     }

Modified: trunk/Source/WebInspectorUI/UserInterface/Models/DOMNode.js (204369 => 204370)


--- trunk/Source/WebInspectorUI/UserInterface/Models/DOMNode.js	2016-08-11 03:26:55 UTC (rev 204369)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/DOMNode.js	2016-08-11 03:35:01 UTC (rev 204370)
@@ -258,6 +258,38 @@
         return this._isInShadowTree;
     }
 
+    isInUserAgentShadowTree()
+    {
+        return this._isInShadowTree && this.ancestorShadowRoot().isUserAgentShadowRoot();
+    }
+
+    isShadowRoot()
+    {
+        return !!this._shadowRootType;
+    }
+
+    isUserAgentShadowRoot()
+    {
+        return this._shadowRootType === WebInspector.DOMNode.ShadowRootType.UserAgent;
+    }
+
+    ancestorShadowRoot()
+    {
+        if (!this._isInShadowTree)
+            return null;
+
+        let node = this;
+        while (node && !node.isShadowRoot())
+            node = node.parentNode;
+        return node;
+    }
+
+    ancestorShadowHost()
+    {
+        let shadowRoot = this.ancestorShadowRoot();
+        return shadowRoot ? shadowRoot.parentNode : null;
+    }
+
     isPseudoElement()
     {
         return this._pseudoType !== undefined;

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js (204369 => 204370)


--- trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js	2016-08-11 03:26:55 UTC (rev 204369)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js	2016-08-11 03:35:01 UTC (rev 204370)
@@ -175,9 +175,11 @@
 
     get editable()
     {
-        var node = this.representedObject;
-        if (node.isInShadowTree())
+        let node = this.representedObject;
+
+        if (node.isShadowRoot() || node.isInUserAgentShadowTree())
             return false;
+
         if (node.isPseudoElement())
             return false;
 
@@ -615,9 +617,12 @@
         if (this.treeOutline.selectedDOMNode() !== this.representedObject)
             return false;
 
-        if (this.representedObject.isInShadowTree() || this.representedObject.isPseudoElement())
+        if (this.representedObject.isShadowRoot() || this.representedObject.isInUserAgentShadowTree())
             return false;
 
+        if (this.representedObject.isPseudoElement())
+            return false;
+
         if (this.representedObject.nodeType() !== Node.ELEMENT_NODE && this.representedObject.nodeType() !== Node.TEXT_NODE)
             return false;
 
@@ -639,7 +644,7 @@
     _populateTagContextMenu(contextMenu, event)
     {
         var node = this.representedObject;
-        if (!node.isInShadowTree()) {
+        if (!node.isInUserAgentShadowTree()) {
             var attribute = event.target.enclosingNodeOrSelfWithClass("html-attribute");
 
             // Add attribute-related actions.

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeOutline.js (204369 => 204370)


--- trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeOutline.js	2016-08-11 03:26:55 UTC (rev 204369)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeOutline.js	2016-08-11 03:35:01 UTC (rev 204370)
@@ -523,7 +523,8 @@
         if (!this._excludeRevealElementContextMenu)
             contextMenu.appendItem(WebInspector.UIString("Reveal in DOM Tree"), revealElement);
 
-        contextMenu.appendItem(WebInspector.UIString("Log Element"), logElement);
+        if (!domNode.isInUserAgentShadowTree())
+            contextMenu.appendItem(WebInspector.UIString("Log Element"), logElement);
     }
 
     _showShadowDOMSettingChanged(event)

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/RulesStyleDetailsPanel.js (204369 => 204370)


--- trunk/Source/WebInspectorUI/UserInterface/Views/RulesStyleDetailsPanel.js	2016-08-11 03:26:55 UTC (rev 204369)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/RulesStyleDetailsPanel.js	2016-08-11 03:35:01 UTC (rev 204370)
@@ -380,7 +380,7 @@
 
     newRuleButtonClicked()
     {
-        if (this.nodeStyles.node.isInShadowTree())
+        if (this.nodeStyles.node.isInUserAgentShadowTree())
             return;
 
         for (let existingRule of this.nodeStyles.rulesForSelector()) {

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js (204369 => 204370)


--- trunk/Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js	2016-08-11 03:26:55 UTC (rev 204369)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js	2016-08-11 03:35:01 UTC (rev 204370)
@@ -259,7 +259,7 @@
 
     _addNewRule(event)
     {
-        if (!this._nodeStyles || this._nodeStyles.node.isInShadowTree())
+        if (!this._nodeStyles || this._nodeStyles.node.isInUserAgentShadowTree())
             return;
 
         let selector = this.currentStyle().selectorText;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to