Changeset 204370 in webkit


Ignore:
Timestamp:
Aug 10, 2016 8:35:01 PM (8 years ago)
Author:
commit-queue@webkit.org
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 <Joseph Pecoraro> 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.

Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r204368 r204370  
     12016-08-10  Joseph Pecoraro  <pecoraro@apple.com>
     2
     3        Web Inspector: Should be able to Edit Node Attributes and Styles for non-UserAgent Shadow DOM nodes
     4        https://bugs.webkit.org/show_bug.cgi?id=160762
     5        <rdar://problem/27798271>
     6
     7        Reviewed by Ryosuke Niwa.
     8
     9        * inspector/dom/shadowRootType-expected.txt:
     10        * inspector/dom/shadowRootType.html:
     11        Add tests for DOMNode.prototype.isInUserAgentShadowTree.
     12
    1132016-08-10  Chris Dumez  <cdumez@apple.com>
    214
  • trunk/LayoutTests/inspector/dom/shadowRootType-expected.txt

    r202634 r204370  
    66PASS: DOMNode has a single shadow root.
    77PASS: DOMNode has UserAgent shadow root type.
     8PASS: DOMNode is in a UserAgent shadow tree.
    89
    910-- Running test case: ShadowRootType.Closed
    1011PASS: DOMNode has a single shadow root.
    1112PASS: DOMNode has Closed shadow root type.
     13PASS: DOMNode is not in a UserAgent shadow tree.
    1214
    1315-- Running test case: ShadowRootType.Open
    1416PASS: DOMNode has a single shadow root.
    1517PASS: DOMNode has Open shadow root type.
     18PASS: DOMNode is not in a UserAgent shadow tree.
    1619
    1720-- Running test case: NoShadowRootType
  • trunk/LayoutTests/inspector/dom/shadowRootType.html

    r202634 r204370  
    1818                InspectorTest.expectThat(domNode.shadowRoots().length === 1, "DOMNode has a single shadow root.");
    1919                InspectorTest.expectThat(domNode.shadowRoots()[0].shadowRootType() === WebInspector.DOMNode.ShadowRootType.UserAgent, "DOMNode has UserAgent shadow root type.");
     20                InspectorTest.expectThat(domNode.shadowRoots()[0].isInUserAgentShadowTree(), "DOMNode is in a UserAgent shadow tree.");
    2021                resolve();
    2122            });
     
    3132                InspectorTest.expectThat(domNode.shadowRoots().length === 1, "DOMNode has a single shadow root.");
    3233                InspectorTest.expectThat(domNode.shadowRoots()[0].shadowRootType() === WebInspector.DOMNode.ShadowRootType.Closed, "DOMNode has Closed shadow root type.");
     34                InspectorTest.expectThat(!domNode.shadowRoots()[0].isInUserAgentShadowTree(), "DOMNode is not in a UserAgent shadow tree.");
    3335                resolve();
    3436            });
     
    4446                InspectorTest.expectThat(domNode.shadowRoots().length === 1, "DOMNode has a single shadow root.");
    4547                InspectorTest.expectThat(domNode.shadowRoots()[0].shadowRootType() === WebInspector.DOMNode.ShadowRootType.Open, "DOMNode has Open shadow root type.");
     48                InspectorTest.expectThat(!domNode.shadowRoots()[0].isInUserAgentShadowTree(), "DOMNode is not in a UserAgent shadow tree.");
    4649                resolve();
    4750            });
  • trunk/Source/WebCore/ChangeLog

    r204368 r204370  
     12016-08-10  Joseph Pecoraro  <pecoraro@apple.com>
     2
     3        Web Inspector: Should be able to Edit Node Attributes and Styles for non-UserAgent Shadow DOM nodes
     4        https://bugs.webkit.org/show_bug.cgi?id=160762
     5        <rdar://problem/27798271>
     6
     7        Reviewed by Ryosuke Niwa.
     8
     9        * inspector/InspectorDOMAgent.cpp:
     10        (WebCore::InspectorDOMAgent::assertEditableNode):
     11        (WebCore::InspectorDOMAgent::assertEditableElement):
     12        * inspector/PageConsoleAgent.cpp:
     13        (WebCore::PageConsoleAgent::addInspectedNode):
     14        Allow editing shadow DOM nodes as long as they are not in a UserAgent shadow tree.
     15
    1162016-08-10  Chris Dumez  <cdumez@apple.com>
    217
  • trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp

    r204114 r204370  
    396396    if (!node)
    397397        return nullptr;
    398     if (node->isInShadowTree()) {
    399         errorString = ASCIILiteral("Cannot edit nodes from shadow trees");
     398    if (node->isInUserAgentShadowTree()) {
     399        errorString = ASCIILiteral("Cannot edit nodes in user agent shadow trees");
    400400        return nullptr;
    401401    }
     
    412412    if (!element)
    413413        return nullptr;
    414     if (element->isInShadowTree()) {
    415         errorString = ASCIILiteral("Cannot edit elements from shadow trees");
     414    if (element->isInUserAgentShadowTree()) {
     415        errorString = ASCIILiteral("Cannot edit elements in user agent shadow trees");
    416416        return nullptr;
    417417    }
  • trunk/Source/WebCore/inspector/PageConsoleAgent.cpp

    r199619 r204370  
    6969{
    7070    Node* node = m_inspectorDOMAgent->nodeForId(nodeId);
    71     if (!node || node->isInShadowTree()) {
     71    if (!node || node->isInUserAgentShadowTree()) {
    7272        errorString = ASCIILiteral("nodeId is not valid");
    7373        return;
  • trunk/Source/WebInspectorUI/ChangeLog

    r204339 r204370  
     12016-08-10  Joseph Pecoraro  <pecoraro@apple.com>
     2
     3        Web Inspector: Should be able to Edit Node Attributes and Styles for non-UserAgent Shadow DOM nodes
     4        https://bugs.webkit.org/show_bug.cgi?id=160762
     5        <rdar://problem/27798271>
     6
     7        Reviewed by Ryosuke Niwa.
     8
     9        * UserInterface/Models/DOMNode.js:
     10        (WebInspector.DOMNode.prototype.isInUserAgentShadowTree):
     11        (WebInspector.DOMNode.prototype.isShadowRoot):
     12        (WebInspector.DOMNode.prototype.isUserAgentShadowRoot):
     13        (WebInspector.DOMNode.prototype.ancestorShadowRoot):
     14        (WebInspector.DOMNode.prototype.ancestorShadowHost):
     15        Add methods for determining the shadow root, host, and easily
     16        checking the type of shadow tree a node is in.
     17
     18        * UserInterface/Models/CSSStyleDeclaration.js:
     19        (WebInspector.CSSStyleDeclaration.prototype.get editable):
     20        * UserInterface/Views/DOMTreeElement.js:
     21        (WebInspector.DOMTreeElement.prototype.get editable):
     22        (WebInspector.DOMTreeElement.prototype._startEditingTarget):
     23        (WebInspector.DOMTreeElement.prototype._populateTagContextMenu):
     24        * UserInterface/Views/RulesStyleDetailsPanel.js:
     25        (WebInspector.RulesStyleDetailsPanel.prototype.newRuleButtonClicked):
     26        * UserInterface/Views/VisualStyleSelectorSection.js:
     27        (WebInspector.VisualStyleSelectorSection.prototype._addNewRule):
     28        Allow editing shadow DOM nodes as long as they are not in a UserAgent shadow tree.
     29
     30        * UserInterface/Views/DOMTreeOutline.js:
     31        (WebInspector.DOMTreeOutline.prototype._populateContextMenu):
     32        Disallow "Log Element" on UserAgent shadow tree nodes.
     33
    1342016-08-10  Nikita Vasilyev  <nvasilyev@apple.com>
    235
  • trunk/Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js

    r202589 r204370  
    8686
    8787        if (this._type === WebInspector.CSSStyleDeclaration.Type.Inline)
    88             return !this._node.isInShadowTree();
     88            return !this._node.isInUserAgentShadowTree();
    8989
    9090        return false;
  • trunk/Source/WebInspectorUI/UserInterface/Models/DOMNode.js

    r204114 r204370  
    257257    {
    258258        return this._isInShadowTree;
     259    }
     260
     261    isInUserAgentShadowTree()
     262    {
     263        return this._isInShadowTree && this.ancestorShadowRoot().isUserAgentShadowRoot();
     264    }
     265
     266    isShadowRoot()
     267    {
     268        return !!this._shadowRootType;
     269    }
     270
     271    isUserAgentShadowRoot()
     272    {
     273        return this._shadowRootType === WebInspector.DOMNode.ShadowRootType.UserAgent;
     274    }
     275
     276    ancestorShadowRoot()
     277    {
     278        if (!this._isInShadowTree)
     279            return null;
     280
     281        let node = this;
     282        while (node && !node.isShadowRoot())
     283            node = node.parentNode;
     284        return node;
     285    }
     286
     287    ancestorShadowHost()
     288    {
     289        let shadowRoot = this.ancestorShadowRoot();
     290        return shadowRoot ? shadowRoot.parentNode : null;
    259291    }
    260292
  • trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js

    r204114 r204370  
    176176    get editable()
    177177    {
    178         var node = this.representedObject;
    179         if (node.isInShadowTree())
     178        let node = this.representedObject;
     179
     180        if (node.isShadowRoot() || node.isInUserAgentShadowTree())
    180181            return false;
     182
    181183        if (node.isPseudoElement())
    182184            return false;
     
    616618            return false;
    617619
    618         if (this.representedObject.isInShadowTree() || this.representedObject.isPseudoElement())
     620        if (this.representedObject.isShadowRoot() || this.representedObject.isInUserAgentShadowTree())
     621            return false;
     622
     623        if (this.representedObject.isPseudoElement())
    619624            return false;
    620625
     
    640645    {
    641646        var node = this.representedObject;
    642         if (!node.isInShadowTree()) {
     647        if (!node.isInUserAgentShadowTree()) {
    643648            var attribute = event.target.enclosingNodeOrSelfWithClass("html-attribute");
    644649
  • trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeOutline.js

    r201840 r204370  
    524524            contextMenu.appendItem(WebInspector.UIString("Reveal in DOM Tree"), revealElement);
    525525
    526         contextMenu.appendItem(WebInspector.UIString("Log Element"), logElement);
     526        if (!domNode.isInUserAgentShadowTree())
     527            contextMenu.appendItem(WebInspector.UIString("Log Element"), logElement);
    527528    }
    528529
  • trunk/Source/WebInspectorUI/UserInterface/Views/RulesStyleDetailsPanel.js

    r201890 r204370  
    381381    newRuleButtonClicked()
    382382    {
    383         if (this.nodeStyles.node.isInShadowTree())
     383        if (this.nodeStyles.node.isInUserAgentShadowTree())
    384384            return;
    385385
  • trunk/Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js

    r195706 r204370  
    260260    _addNewRule(event)
    261261    {
    262         if (!this._nodeStyles || this._nodeStyles.node.isInShadowTree())
     262        if (!this._nodeStyles || this._nodeStyles.node.isInUserAgentShadowTree())
    263263            return;
    264264
Note: See TracChangeset for help on using the changeset viewer.