std::unique_ptr<protocol::DictionaryValue> LayoutEditor::currentSelectorInfo( CSSStyleDeclaration* style) const { std::unique_ptr<protocol::DictionaryValue> object = protocol::DictionaryValue::create(); CSSStyleRule* rule = style->parentRule() ? toCSSStyleRule(style->parentRule()) : nullptr; String currentSelectorText = rule ? rule->selectorText() : "element.style"; object->setString("selector", currentSelectorText); Document* ownerDocument = m_element->ownerDocument(); if (!ownerDocument->isActive() || !rule) return object; Vector<String> medias; buildMediaListChain(rule, medias); std::unique_ptr<protocol::ListValue> mediaListValue = protocol::ListValue::create(); for (size_t i = 0; i < medias.size(); ++i) mediaListValue->pushValue(protocol::StringValue::create(medias[i])); object->setArray("medias", std::move(mediaListValue)); TrackExceptionState exceptionState; StaticElementList* elements = ownerDocument->querySelectorAll( AtomicString(currentSelectorText), exceptionState); if (!elements || exceptionState.hadException()) return object; std::unique_ptr<protocol::ListValue> highlights = protocol::ListValue::create(); InspectorHighlightConfig config = affectedNodesHighlightConfig(); for (unsigned i = 0; i < elements->length(); ++i) { Element* element = elements->item(i); if (element == m_element) continue; InspectorHighlight highlight(element, config, false); highlights->pushValue(highlight.asProtocolValue()); } object->setArray("nodes", std::move(highlights)); return object; }
PassRefPtr<JSONObject> LayoutEditor::currentSelectorInfo(CSSStyleDeclaration* style) const { RefPtr<JSONObject> object = JSONObject::create(); CSSStyleRule* rule = style->parentRule() ? toCSSStyleRule(style->parentRule()) : nullptr; String currentSelectorText = rule ? rule->selectorText() : "element.style"; object->setString("selector", currentSelectorText); Document* ownerDocument = m_element->ownerDocument(); if (!ownerDocument->isActive() || !rule) return object.release(); Vector<String> medias; buildMediaListChain(rule, medias); RefPtr<JSONArray> mediasJSONArray = JSONArray::create(); for (size_t i = 0; i < medias.size(); ++i) mediasJSONArray->pushString(medias[i]); object->setArray("medias", mediasJSONArray.release()); TrackExceptionState exceptionState; RefPtrWillBeRawPtr<StaticElementList> elements = ownerDocument->querySelectorAll(AtomicString(currentSelectorText), exceptionState); if (!elements || exceptionState.hadException()) return object.release(); RefPtr<JSONArray> highlights = JSONArray::create(); InspectorHighlightConfig config = affectedNodesHighlightConfig(); for (unsigned i = 0; i < elements->length(); ++i) { Element* element = elements->item(i); if (element == m_element) continue; InspectorHighlight highlight(element, config, false); highlights->pushObject(highlight.asJSONObject()); } object->setArray("nodes", highlights.release()); return object.release(); }