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;