diff options
Diffstat (limited to 'Source/WebCore/inspector/InspectorStyleSheet.h')
-rw-r--r-- | Source/WebCore/inspector/InspectorStyleSheet.h | 166 |
1 files changed, 65 insertions, 101 deletions
diff --git a/Source/WebCore/inspector/InspectorStyleSheet.h b/Source/WebCore/inspector/InspectorStyleSheet.h index bc1f1ac79..df95d1ce5 100644 --- a/Source/WebCore/inspector/InspectorStyleSheet.h +++ b/Source/WebCore/inspector/InspectorStyleSheet.h @@ -22,27 +22,21 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef InspectorStyleSheet_h -#define InspectorStyleSheet_h +#pragma once #include "CSSPropertySourceData.h" #include "CSSStyleDeclaration.h" -#include "ExceptionCode.h" -#include "InspectorStyleTextEditor.h" -#include "InspectorWebTypeBuilders.h" +#include <inspector/InspectorProtocolObjects.h> #include <inspector/InspectorValues.h> #include <wtf/HashMap.h> -#include <wtf/HashSet.h> -#include <wtf/PassRefPtr.h> -#include <wtf/RefPtr.h> #include <wtf/Vector.h> -#include <wtf/text/WTFString.h> class ParsedStyleSheet; namespace WebCore { class CSSRuleList; +class CSSSelector; class CSSStyleDeclaration; class CSSStyleRule; class CSSStyleSheet; @@ -50,27 +44,20 @@ class Document; class Element; class InspectorPageAgent; class InspectorStyleSheet; -class Node; - -#if ENABLE(INSPECTOR) typedef String ErrorString; class InspectorCSSId { public: - InspectorCSSId() - : m_ordinal(0) - { - } + InspectorCSSId() { } - explicit InspectorCSSId(RefPtr<Inspector::InspectorObject> value) + explicit InspectorCSSId(const Inspector::InspectorObject& value) { - if (!value->getString("styleSheetId", &m_styleSheetId)) + if (!value.getString(ASCIILiteral("styleSheetId"), m_styleSheetId)) return; - - RefPtr<Inspector::InspectorValue> ordinalValue = value->get("ordinal"); - if (!ordinalValue || !ordinalValue->asNumber(&m_ordinal)) - m_styleSheetId = ""; + + if (!value.getInteger(ASCIILiteral("ordinal"), m_ordinal)) + m_styleSheetId = String(); } InspectorCSSId(const String& styleSheetId, unsigned ordinal) @@ -84,22 +71,22 @@ public: const String& styleSheetId() const { return m_styleSheetId; } unsigned ordinal() const { return m_ordinal; } - // ID type is either Inspector::TypeBuilder::CSS::CSSStyleId or Inspector::TypeBuilder::CSS::CSSRuleId. + // ID type is either Inspector::Protocol::CSS::CSSStyleId or Inspector::Protocol::CSS::CSSRuleId. template<typename ID> - PassRefPtr<ID> asProtocolValue() const + RefPtr<ID> asProtocolValue() const { if (isEmpty()) return nullptr; - RefPtr<ID> result = ID::create() + return ID::create() .setStyleSheetId(m_styleSheetId) - .setOrdinal(m_ordinal); - return result.release(); + .setOrdinal(m_ordinal) + .release(); } private: String m_styleSheetId; - unsigned m_ordinal; + unsigned m_ordinal = {0}; }; struct InspectorStyleProperty { @@ -133,42 +120,31 @@ struct InspectorStyleProperty { String rawText; }; -class InspectorStyle : public RefCounted<InspectorStyle> { +class InspectorStyle final : public RefCounted<InspectorStyle> { public: - static PassRefPtr<InspectorStyle> create(const InspectorCSSId& styleId, PassRefPtr<CSSStyleDeclaration> style, InspectorStyleSheet* parentStyleSheet); - virtual ~InspectorStyle(); + static Ref<InspectorStyle> create(const InspectorCSSId& styleId, RefPtr<CSSStyleDeclaration>&&, InspectorStyleSheet* parentStyleSheet); + ~InspectorStyle(); CSSStyleDeclaration* cssStyle() const { return m_style.get(); } - PassRefPtr<Inspector::TypeBuilder::CSS::CSSStyle> buildObjectForStyle() const; - PassRefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::CSS::CSSComputedStyleProperty>> buildArrayForComputedStyle() const; - bool hasDisabledProperties() const { return !m_disabledProperties.isEmpty(); } - bool setPropertyText(unsigned index, const String& text, bool overwrite, String* oldText, ExceptionCode&); - bool toggleProperty(unsigned index, bool disable, ExceptionCode&); + RefPtr<Inspector::Protocol::CSS::CSSStyle> buildObjectForStyle() const; + Ref<Inspector::Protocol::Array<Inspector::Protocol::CSS::CSSComputedStyleProperty>> buildArrayForComputedStyle() const; - bool getText(String* result) const; - bool setText(const String&, ExceptionCode&); + ExceptionOr<String> text() const; + ExceptionOr<void> setText(const String&); private: - InspectorStyle(const InspectorCSSId& styleId, PassRefPtr<CSSStyleDeclaration> style, InspectorStyleSheet* parentStyleSheet); + InspectorStyle(const InspectorCSSId& styleId, RefPtr<CSSStyleDeclaration>&&, InspectorStyleSheet* parentStyleSheet); - // FIXME: Remove these aliases and update all the current call sites to use the new public methods. - bool styleText(String* result) const { return getText(result); } - bool applyStyleText(const String& text) { ExceptionCode ec = 0; return setText(text, ec); } - - bool populateAllProperties(Vector<InspectorStyleProperty>* result) const; - PassRefPtr<Inspector::TypeBuilder::CSS::CSSStyle> styleWithProperties() const; - PassRefPtr<CSSRuleSourceData> extractSourceData() const; + void populateAllProperties(Vector<InspectorStyleProperty>* result) const; + Ref<Inspector::Protocol::CSS::CSSStyle> styleWithProperties() const; + RefPtr<CSSRuleSourceData> extractSourceData() const; String shorthandValue(const String& shorthandProperty) const; String shorthandPriority(const String& shorthandProperty) const; Vector<String> longhandProperties(const String& shorthandProperty) const; - NewLineAndWhitespace& newLineAndWhitespaceDelimiters() const; InspectorCSSId m_styleId; RefPtr<CSSStyleDeclaration> m_style; InspectorStyleSheet* m_parentStyleSheet; - Vector<InspectorStyleProperty> m_disabledProperties; - mutable std::pair<String, String> m_format; - mutable bool m_formatAcquired; }; class InspectorStyleSheet : public RefCounted<InspectorStyleSheet> { @@ -181,7 +157,7 @@ public: }; typedef HashMap<CSSStyleDeclaration*, RefPtr<InspectorStyle>> InspectorStyleMap; - static PassRefPtr<InspectorStyleSheet> create(InspectorPageAgent*, const String& id, PassRefPtr<CSSStyleSheet> pageStyleSheet, Inspector::TypeBuilder::CSS::StyleSheetOrigin::Enum, const String& documentURL, Listener*); + static Ref<InspectorStyleSheet> create(InspectorPageAgent*, const String& id, RefPtr<CSSStyleSheet>&& pageStyleSheet, Inspector::Protocol::CSS::StyleSheetOrigin, const String& documentURL, Listener*); static String styleSheetURL(CSSStyleSheet* pageStyleSheet); virtual ~InspectorStyleSheet(); @@ -190,21 +166,19 @@ public: String finalURL() const; CSSStyleSheet* pageStyleSheet() const { return m_pageStyleSheet.get(); } void reparseStyleSheet(const String&); - bool setText(const String&, ExceptionCode&); - String ruleSelector(const InspectorCSSId&, ExceptionCode&); - bool setRuleSelector(const InspectorCSSId&, const String& selector, ExceptionCode&); - CSSStyleRule* addRule(const String& selector, ExceptionCode&); - bool deleteRule(const InspectorCSSId&, ExceptionCode&); + ExceptionOr<void> setText(const String&); + ExceptionOr<String> ruleSelector(const InspectorCSSId&); + ExceptionOr<void> setRuleSelector(const InspectorCSSId&, const String& selector); + ExceptionOr<CSSStyleRule*> addRule(const String& selector); + ExceptionOr<void> deleteRule(const InspectorCSSId&); CSSStyleRule* ruleForId(const InspectorCSSId&) const; - PassRefPtr<Inspector::TypeBuilder::CSS::CSSStyleSheetBody> buildObjectForStyleSheet(); - PassRefPtr<Inspector::TypeBuilder::CSS::CSSStyleSheetHeader> buildObjectForStyleSheetInfo(); - PassRefPtr<Inspector::TypeBuilder::CSS::CSSRule> buildObjectForRule(CSSStyleRule*); - PassRefPtr<Inspector::TypeBuilder::CSS::CSSStyle> buildObjectForStyle(CSSStyleDeclaration*); - bool setStyleText(const InspectorCSSId&, const String& text, String* oldText, ExceptionCode&); - bool setPropertyText(const InspectorCSSId&, unsigned propertyIndex, const String& text, bool overwrite, String* oldPropertyText, ExceptionCode&); - bool toggleProperty(const InspectorCSSId&, unsigned propertyIndex, bool disable, ExceptionCode&); - - virtual bool getText(String* result) const; + RefPtr<Inspector::Protocol::CSS::CSSStyleSheetBody> buildObjectForStyleSheet(); + RefPtr<Inspector::Protocol::CSS::CSSStyleSheetHeader> buildObjectForStyleSheetInfo(); + RefPtr<Inspector::Protocol::CSS::CSSRule> buildObjectForRule(CSSStyleRule*, Element*); + RefPtr<Inspector::Protocol::CSS::CSSStyle> buildObjectForStyle(CSSStyleDeclaration*); + ExceptionOr<void> setStyleText(const InspectorCSSId&, const String& text, String* oldText); + + virtual ExceptionOr<String> text() const; virtual CSSStyleDeclaration* styleForId(const InspectorCSSId&) const; void fireStyleSheetChanged(); @@ -212,78 +186,72 @@ public: InspectorCSSId styleId(CSSStyleDeclaration* style) const { return ruleOrStyleId(style); } protected: - InspectorStyleSheet(InspectorPageAgent*, const String& id, PassRefPtr<CSSStyleSheet> pageStyleSheet, Inspector::TypeBuilder::CSS::StyleSheetOrigin::Enum, const String& documentURL, Listener*); + InspectorStyleSheet(InspectorPageAgent*, const String& id, RefPtr<CSSStyleSheet>&& pageStyleSheet, Inspector::Protocol::CSS::StyleSheetOrigin, const String& documentURL, Listener*); - bool canBind() const { return m_origin != Inspector::TypeBuilder::CSS::StyleSheetOrigin::UserAgent && m_origin != Inspector::TypeBuilder::CSS::StyleSheetOrigin::User; } - InspectorCSSId ruleOrStyleId(CSSStyleDeclaration* style) const; + bool canBind() const { return m_origin != Inspector::Protocol::CSS::StyleSheetOrigin::UserAgent && m_origin != Inspector::Protocol::CSS::StyleSheetOrigin::User; } + InspectorCSSId ruleOrStyleId(CSSStyleDeclaration*) const; virtual Document* ownerDocument() const; - virtual RefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration* style) const; + virtual RefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration*) const; virtual unsigned ruleIndexByStyle(CSSStyleDeclaration*) const; virtual bool ensureParsedDataReady(); - virtual PassRefPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId&); - virtual void rememberInspectorStyle(RefPtr<InspectorStyle> inspectorStyle); - virtual void forgetInspectorStyle(CSSStyleDeclaration* style); + virtual RefPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId&); // Also accessed by friend class InspectorStyle. - virtual bool setStyleText(CSSStyleDeclaration*, const String&, ExceptionCode&); - virtual PassOwnPtr<Vector<size_t>> lineEndings() const; + virtual ExceptionOr<void> setStyleText(CSSStyleDeclaration*, const String&); + virtual std::unique_ptr<Vector<size_t>> lineEndings() const; private: typedef Vector<RefPtr<CSSStyleRule>> CSSStyleRuleVector; friend class InspectorStyle; - static void collectFlatRules(PassRefPtr<CSSRuleList>, CSSStyleRuleVector* result); - bool checkPageStyleSheet(ExceptionCode&) const; + static void collectFlatRules(RefPtr<CSSRuleList>&&, CSSStyleRuleVector* result); + bool styleSheetMutated() const; bool ensureText() const; bool ensureSourceData(); void ensureFlatRules() const; bool styleSheetTextWithChangedStyle(CSSStyleDeclaration*, const String& newStyleText, String* result); - void revalidateStyle(CSSStyleDeclaration*); bool originalStyleSheetText(String* result) const; bool resourceStyleSheetText(String* result) const; bool inlineStyleSheetText(String* result) const; - PassRefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::CSS::CSSRule>> buildArrayForRuleList(CSSRuleList*); - PassRefPtr<Inspector::TypeBuilder::CSS::SelectorList> buildObjectForSelectorList(CSSStyleRule*); + Ref<Inspector::Protocol::Array<Inspector::Protocol::CSS::CSSRule>> buildArrayForRuleList(CSSRuleList*); + Ref<Inspector::Protocol::CSS::CSSSelector> buildObjectForSelector(const CSSSelector*, Element*); + Ref<Inspector::Protocol::CSS::SelectorList> buildObjectForSelectorList(CSSStyleRule*, Element*, int& endingLine); InspectorPageAgent* m_pageAgent; String m_id; RefPtr<CSSStyleSheet> m_pageStyleSheet; - Inspector::TypeBuilder::CSS::StyleSheetOrigin::Enum m_origin; + Inspector::Protocol::CSS::StyleSheetOrigin m_origin; String m_documentURL; - bool m_isRevalidating; ParsedStyleSheet* m_parsedStyleSheet; - InspectorStyleMap m_inspectorStyles; mutable CSSStyleRuleVector m_flatRules; Listener* m_listener; }; -class InspectorStyleSheetForInlineStyle : public InspectorStyleSheet { +class InspectorStyleSheetForInlineStyle final : public InspectorStyleSheet { public: - static PassRefPtr<InspectorStyleSheetForInlineStyle> create(InspectorPageAgent*, const String& id, PassRefPtr<Element>, Inspector::TypeBuilder::CSS::StyleSheetOrigin::Enum, Listener*); + static Ref<InspectorStyleSheetForInlineStyle> create(InspectorPageAgent*, const String& id, RefPtr<Element>&&, Inspector::Protocol::CSS::StyleSheetOrigin, Listener*); void didModifyElementAttribute(); - virtual bool getText(String* result) const override; - virtual CSSStyleDeclaration* styleForId(const InspectorCSSId& id) const override { ASSERT_UNUSED(id, !id.ordinal()); return inlineStyle(); } + ExceptionOr<String> text() const final; + CSSStyleDeclaration* styleForId(const InspectorCSSId& id) const final { ASSERT_UNUSED(id, !id.ordinal()); return inlineStyle(); } protected: - InspectorStyleSheetForInlineStyle(InspectorPageAgent*, const String& id, PassRefPtr<Element>, Inspector::TypeBuilder::CSS::StyleSheetOrigin::Enum, Listener*); + InspectorStyleSheetForInlineStyle(InspectorPageAgent*, const String& id, RefPtr<Element>&&, Inspector::Protocol::CSS::StyleSheetOrigin, Listener*); - virtual Document* ownerDocument() const override; - virtual RefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration* style) const override { ASSERT_UNUSED(style, style == inlineStyle()); return m_ruleSourceData; } - virtual unsigned ruleIndexByStyle(CSSStyleDeclaration*) const override { return 0; } - virtual bool ensureParsedDataReady() override; - virtual PassRefPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId&) override; - virtual void rememberInspectorStyle(RefPtr<InspectorStyle>) override { } - virtual void forgetInspectorStyle(CSSStyleDeclaration*) override { } + Document* ownerDocument() const final; + RefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration* style) const final { ASSERT_UNUSED(style, style == inlineStyle()); return m_ruleSourceData; } + unsigned ruleIndexByStyle(CSSStyleDeclaration*) const final { return 0; } + bool ensureParsedDataReady() final; + RefPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId&) final; // Also accessed by friend class InspectorStyle. - virtual bool setStyleText(CSSStyleDeclaration*, const String&, ExceptionCode&) override; - virtual PassOwnPtr<Vector<size_t>> lineEndings() const override; + ExceptionOr<void> setStyleText(CSSStyleDeclaration*, const String&) final; + std::unique_ptr<Vector<size_t>> lineEndings() const final; private: CSSStyleDeclaration* inlineStyle() const; const String& elementStyleText() const; - bool getStyleAttributeRanges(CSSRuleSourceData* result) const; + Ref<CSSRuleSourceData> ruleSourceData() const; RefPtr<Element> m_element; RefPtr<CSSRuleSourceData> m_ruleSourceData; @@ -294,8 +262,4 @@ private: mutable bool m_isStyleTextValid; }; -#endif - } // namespace WebCore - -#endif // !defined(InspectorStyleSheet_h) |