Index: third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp |
diff --git a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp |
index 1d366dd242374e8f133a1cd2c1aaf046061144fb..32a79edb4fb79cafe687e354afbf527c0322bfa0 100644 |
--- a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp |
+++ b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp |
@@ -354,8 +354,8 @@ class InspectorCSSAgent::StyleSheetAction : public InspectorHistory::Action { |
struct InspectorCSSAgent::VectorStringHashTraits |
: public WTF::GenericHashTraits<Vector<String>> { |
static unsigned hash(const Vector<String>& vec) { |
- unsigned h = DefaultHash<String>::Hash::hash(vec[0]); |
- for (size_t i = 1; i < vec.size(); i++) { |
+ unsigned h = DefaultHash<size_t>::Hash::hash(vec.size()); |
+ for (size_t i = 0; i < vec.size(); i++) { |
h = WTF::hashInts(h, DefaultHash<String>::Hash::hash(vec[i])); |
} |
return h; |
@@ -2374,10 +2374,18 @@ int InspectorCSSAgent::getStyleIndexForNode( |
CSSComputedStyleDeclaration::create(node, true); |
Vector<String> style; |
+ bool allPropertiesEmpty = true; |
for (const auto& pair : cssPropertyWhitelist) { |
- style.append(computedStyleInfo->getPropertyValue(pair.second)); |
+ String value = computedStyleInfo->getPropertyValue(pair.second); |
+ if (!value.isEmpty()) |
+ allPropertiesEmpty = false; |
+ style.append(value); |
} |
+ // -1 means an empty style. |
+ if (allPropertiesEmpty) |
+ return -1; |
+ |
ComputedStylesMap::iterator it = styleToIndexMap.find(style); |
if (it != styleToIndexMap.end()) |
return it->value; |
@@ -2386,7 +2394,10 @@ int InspectorCSSAgent::getStyleIndexForNode( |
std::unique_ptr<protocol::Array<protocol::CSS::CSSComputedStyleProperty>> |
styleProperties = |
protocol::Array<protocol::CSS::CSSComputedStyleProperty>::create(); |
+ |
for (size_t i = 0; i < style.size(); i++) { |
+ if (style[i].isEmpty()) |
+ continue; |
styleProperties->addItem(protocol::CSS::CSSComputedStyleProperty::create() |
.setName(cssPropertyWhitelist[i].first) |
.setValue(style[i]) |
@@ -2433,17 +2444,22 @@ void InspectorCSSAgent::visitLayoutTreeNodes( |
if (!layoutObject) |
continue; |
- int backendNodeId = DOMNodeIds::idForNode(node); |
+ int nodeId = m_domAgent->boundNodeId(node); |
+ if (!nodeId) |
+ continue; |
+ |
std::unique_ptr<protocol::CSS::LayoutTreeNode> layoutTreeNode = |
protocol::CSS::LayoutTreeNode::create() |
- .setBackendNodeId(backendNodeId) |
- .setStyleIndex(getStyleIndexForNode( |
- node, cssPropertyWhitelist, styleToIndexMap, computedStyles)) |
+ .setNodeId(nodeId) |
.setBoundingBox(buildRectForFloatRect( |
node->isElementNode() |
? FloatRect(toElement(node)->boundsInViewport()) |
: layoutObject->absoluteBoundingBoxRect())) |
.build(); |
+ int styleIndex = getStyleIndexForNode(node, cssPropertyWhitelist, |
+ styleToIndexMap, computedStyles); |
+ if (styleIndex != -1) |
+ layoutTreeNode->setStyleIndex(styleIndex); |
if (layoutObject->isText()) { |
LayoutText* layoutText = toLayoutText(layoutObject); |