diff options
Diffstat (limited to 'Source/WebCore/inspector/InspectorCSSAgent.h')
-rw-r--r-- | Source/WebCore/inspector/InspectorCSSAgent.h | 159 |
1 files changed, 76 insertions, 83 deletions
diff --git a/Source/WebCore/inspector/InspectorCSSAgent.h b/Source/WebCore/inspector/InspectorCSSAgent.h index 10b4fe91f..78ebca7a0 100644 --- a/Source/WebCore/inspector/InspectorCSSAgent.h +++ b/Source/WebCore/inspector/InspectorCSSAgent.h @@ -1,5 +1,6 @@ /* - * Copyright (C) 2010, Google Inc. All rights reserved. + * Copyright (C) 2010 Google Inc. All rights reserved. + * Copyright (C) 2015-2016 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -22,60 +23,51 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef InspectorCSSAgent_h -#define InspectorCSSAgent_h +#pragma once #include "CSSSelector.h" #include "ContentSecurityPolicy.h" #include "InspectorDOMAgent.h" #include "InspectorStyleSheet.h" #include "InspectorWebAgentBase.h" -#include "InspectorWebBackendDispatchers.h" #include "SecurityContext.h" +#include <inspector/InspectorBackendDispatchers.h> #include <inspector/InspectorValues.h> #include <wtf/HashMap.h> #include <wtf/HashSet.h> -#include <wtf/PassRefPtr.h> #include <wtf/RefPtr.h> #include <wtf/text/WTFString.h> namespace Inspector { -class InspectorCSSFrontendDispatcher; +class CSSFrontendDispatcher; } namespace WebCore { class CSSRule; -class CSSRuleList; -class CSSStyleDeclaration; class CSSStyleRule; class CSSStyleSheet; +class ChangeRegionOversetTask; class Document; -class DocumentStyleSheetCollection; class Element; -class InspectorCSSOMWrappers; -class InstrumentingAgents; -class NameNodeMap; class Node; class NodeList; class StyleResolver; class StyleRule; -class UpdateRegionLayoutTask; -class ChangeRegionOversetTask; - -#if ENABLE(INSPECTOR) +class WebKitNamedFlow; -class InspectorCSSAgent +class InspectorCSSAgent final : public InspectorAgentBase , public InspectorDOMAgent::DOMListener - , public Inspector::InspectorCSSBackendDispatcherHandler + , public Inspector::CSSBackendDispatcherHandler , public InspectorStyleSheet::Listener { WTF_MAKE_NONCOPYABLE(InspectorCSSAgent); + WTF_MAKE_FAST_ALLOCATED; public: class InlineStyleOverrideScope { public: - InlineStyleOverrideScope(SecurityContext* context) - : m_contentSecurityPolicy(context->contentSecurityPolicy()) + InlineStyleOverrideScope(SecurityContext& context) + : m_contentSecurityPolicy(context.contentSecurityPolicy()) { m_contentSecurityPolicy->setOverrideAllowInlineStyle(true); } @@ -89,106 +81,107 @@ public: ContentSecurityPolicy* m_contentSecurityPolicy; }; - InspectorCSSAgent(InstrumentingAgents*, InspectorDOMAgent*); - ~InspectorCSSAgent(); + InspectorCSSAgent(WebAgentContext&, InspectorDOMAgent*); + virtual ~InspectorCSSAgent(); - static CSSStyleRule* asCSSStyleRule(CSSRule*); + static CSSStyleRule* asCSSStyleRule(CSSRule&); - bool forcePseudoState(Element*, CSSSelector::PseudoType); - virtual void didCreateFrontendAndBackend(Inspector::InspectorFrontendChannel*, Inspector::InspectorBackendDispatcher*) override; - virtual void willDestroyFrontendAndBackend(Inspector::InspectorDisconnectReason) override; - virtual void discardAgent() override; - virtual void enable(ErrorString*) override; - virtual void disable(ErrorString*) override; + void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override; + void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override; + void discardAgent() override; + void enable(ErrorString&) override; + void disable(ErrorString&) override; + void regionOversetChanged(WebKitNamedFlow*, int documentNodeId); void reset(); + + // InspectorInstrumentation + void documentDetached(Document&); void mediaQueryResultChanged(); - void didCreateNamedFlow(Document*, WebKitNamedFlow*); - void willRemoveNamedFlow(Document*, WebKitNamedFlow*); - void didUpdateRegionLayout(Document*, WebKitNamedFlow*); - void regionLayoutUpdated(WebKitNamedFlow*, int documentNodeId); - void didChangeRegionOverset(Document*, WebKitNamedFlow*); - void regionOversetChanged(WebKitNamedFlow*, int documentNodeId); - void didRegisterNamedFlowContentElement(Document*, WebKitNamedFlow*, Node* contentElement, Node* nextContentElement = nullptr); - void didUnregisterNamedFlowContentElement(Document*, WebKitNamedFlow*, Node* contentElement); - - virtual void getComputedStyleForNode(ErrorString*, int nodeId, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::CSS::CSSComputedStyleProperty>>&) override; - virtual void getInlineStylesForNode(ErrorString*, int nodeId, RefPtr<Inspector::TypeBuilder::CSS::CSSStyle>& inlineStyle, RefPtr<Inspector::TypeBuilder::CSS::CSSStyle>& attributes) override; - virtual void getMatchedStylesForNode(ErrorString*, int nodeId, const bool* includePseudo, const bool* includeInherited, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::CSS::RuleMatch>>& matchedCSSRules, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::CSS::PseudoIdMatches>>& pseudoIdMatches, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::CSS::InheritedStyleEntry>>& inheritedEntries) override; - virtual void getAllStyleSheets(ErrorString*, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::CSS::CSSStyleSheetHeader>>& styleSheetInfos) override; - virtual void getStyleSheet(ErrorString*, const String& styleSheetId, RefPtr<Inspector::TypeBuilder::CSS::CSSStyleSheetBody>& result) override; - virtual void getStyleSheetText(ErrorString*, const String& styleSheetId, String* result) override; - virtual void setStyleSheetText(ErrorString*, const String& styleSheetId, const String& text) override; - virtual void setStyleText(ErrorString*, const RefPtr<Inspector::InspectorObject>& styleId, const String& text, RefPtr<Inspector::TypeBuilder::CSS::CSSStyle>& result) override; - virtual void setPropertyText(ErrorString*, const RefPtr<Inspector::InspectorObject>& styleId, int propertyIndex, const String& text, bool overwrite, RefPtr<Inspector::TypeBuilder::CSS::CSSStyle>& result) override; - virtual void toggleProperty(ErrorString*, const RefPtr<Inspector::InspectorObject>& styleId, int propertyIndex, bool disable, RefPtr<Inspector::TypeBuilder::CSS::CSSStyle>& result) override; - virtual void setRuleSelector(ErrorString*, const RefPtr<Inspector::InspectorObject>& ruleId, const String& selector, RefPtr<Inspector::TypeBuilder::CSS::CSSRule>& result) override; - virtual void addRule(ErrorString*, int contextNodeId, const String& selector, RefPtr<Inspector::TypeBuilder::CSS::CSSRule>& result) override; - virtual void getSupportedCSSProperties(ErrorString*, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::CSS::CSSPropertyInfo>>& result) override; - virtual void forcePseudoState(ErrorString*, int nodeId, const RefPtr<Inspector::InspectorArray>& forcedPseudoClasses) override; - virtual void getNamedFlowCollection(ErrorString*, int documentNodeId, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::CSS::NamedFlow>>& result) override; + void activeStyleSheetsUpdated(Document&); + void didCreateNamedFlow(Document&, WebKitNamedFlow&); + void willRemoveNamedFlow(Document&, WebKitNamedFlow&); + void didChangeRegionOverset(Document&, WebKitNamedFlow&); + void didRegisterNamedFlowContentElement(Document&, WebKitNamedFlow&, Node& contentElement, Node* nextContentElement = nullptr); + void didUnregisterNamedFlowContentElement(Document&, WebKitNamedFlow&, Node& contentElement); + bool forcePseudoState(const Element&, CSSSelector::PseudoClassType); + + void getComputedStyleForNode(ErrorString&, int nodeId, RefPtr<Inspector::Protocol::Array<Inspector::Protocol::CSS::CSSComputedStyleProperty>>&) override; + void getInlineStylesForNode(ErrorString&, int nodeId, RefPtr<Inspector::Protocol::CSS::CSSStyle>& inlineStyle, RefPtr<Inspector::Protocol::CSS::CSSStyle>& attributes) override; + void getMatchedStylesForNode(ErrorString&, int nodeId, const bool* const includePseudo, const bool* const includeInherited, RefPtr<Inspector::Protocol::Array<Inspector::Protocol::CSS::RuleMatch>>& matchedCSSRules, RefPtr<Inspector::Protocol::Array<Inspector::Protocol::CSS::PseudoIdMatches>>&, RefPtr<Inspector::Protocol::Array<Inspector::Protocol::CSS::InheritedStyleEntry>>& inheritedEntries) override; + void getAllStyleSheets(ErrorString&, RefPtr<Inspector::Protocol::Array<Inspector::Protocol::CSS::CSSStyleSheetHeader>>& styleSheetInfos) override; + void getStyleSheet(ErrorString&, const String& styleSheetId, RefPtr<Inspector::Protocol::CSS::CSSStyleSheetBody>& result) override; + void getStyleSheetText(ErrorString&, const String& styleSheetId, String* result) override; + void setStyleSheetText(ErrorString&, const String& styleSheetId, const String& text) override; + void setStyleText(ErrorString&, const Inspector::InspectorObject& styleId, const String& text, RefPtr<Inspector::Protocol::CSS::CSSStyle>& result) override; + void setRuleSelector(ErrorString&, const Inspector::InspectorObject& ruleId, const String& selector, RefPtr<Inspector::Protocol::CSS::CSSRule>& result) override; + void createStyleSheet(ErrorString&, const String& frameId, String* styleSheetId) override; + void addRule(ErrorString&, const String& styleSheetId, const String& selector, RefPtr<Inspector::Protocol::CSS::CSSRule>& result) override; + void getSupportedCSSProperties(ErrorString&, RefPtr<Inspector::Protocol::Array<Inspector::Protocol::CSS::CSSPropertyInfo>>& result) override; + void getSupportedSystemFontFamilyNames(ErrorString&, RefPtr<Inspector::Protocol::Array<String>>& result) override; + void forcePseudoState(ErrorString&, int nodeId, const Inspector::InspectorArray& forcedPseudoClasses) override; + void getNamedFlowCollection(ErrorString&, int documentNodeId, RefPtr<Inspector::Protocol::Array<Inspector::Protocol::CSS::NamedFlow>>& result) override; private: class StyleSheetAction; class SetStyleSheetTextAction; class SetStyleTextAction; - class SetPropertyTextAction; - class TogglePropertyAction; class SetRuleSelectorAction; class AddRuleAction; typedef HashMap<String, RefPtr<InspectorStyleSheet>> IdToInspectorStyleSheet; typedef HashMap<CSSStyleSheet*, RefPtr<InspectorStyleSheet>> CSSStyleSheetToInspectorStyleSheet; typedef HashMap<Node*, RefPtr<InspectorStyleSheetForInlineStyle>> NodeToInspectorStyleSheet; // bogus "stylesheets" with elements' inline styles - typedef HashMap<RefPtr<Document>, RefPtr<InspectorStyleSheet>> DocumentToViaInspectorStyleSheet; // "via inspector" stylesheets + typedef HashMap<RefPtr<Document>, Vector<RefPtr<InspectorStyleSheet>>> DocumentToViaInspectorStyleSheet; // "via inspector" stylesheets typedef HashMap<int, unsigned> NodeIdToForcedPseudoState; void resetNonPersistentData(); InspectorStyleSheetForInlineStyle* asInspectorStyleSheet(Element* element); - Element* elementForId(ErrorString*, int nodeId); + Element* elementForId(ErrorString&, int nodeId); int documentNodeWithRequestedFlowsId(Document*); - void collectStyleSheets(CSSStyleSheet*, Inspector::TypeBuilder::Array<Inspector::TypeBuilder::CSS::CSSStyleSheetHeader>*); + void collectAllStyleSheets(Vector<InspectorStyleSheet*>&); + void collectAllDocumentStyleSheets(Document&, Vector<CSSStyleSheet*>&); + void collectStyleSheets(CSSStyleSheet*, Vector<CSSStyleSheet*>&); + void setActiveStyleSheetsForDocument(Document&, Vector<CSSStyleSheet*>& activeStyleSheets); + + String unbindStyleSheet(InspectorStyleSheet*); InspectorStyleSheet* bindStyleSheet(CSSStyleSheet*); - InspectorStyleSheet* viaInspectorStyleSheet(Document*, bool createIfAbsent); - InspectorStyleSheet* assertStyleSheetForId(ErrorString*, const String&); - Inspector::TypeBuilder::CSS::StyleSheetOrigin::Enum detectOrigin(CSSStyleSheet* pageStyleSheet, Document* ownerDocument); - - PassRefPtr<Inspector::TypeBuilder::CSS::CSSRule> buildObjectForRule(StyleRule*, StyleResolver&); - PassRefPtr<Inspector::TypeBuilder::CSS::CSSRule> buildObjectForRule(CSSStyleRule*); - PassRefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::CSS::CSSRule>> buildArrayForRuleList(CSSRuleList*); - PassRefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::CSS::RuleMatch>> buildArrayForMatchedRuleList(const Vector<RefPtr<StyleRuleBase>>&, StyleResolver&, Element*); - PassRefPtr<Inspector::TypeBuilder::CSS::CSSStyle> buildObjectForAttributesStyle(Element*); - PassRefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::CSS::Region>> buildArrayForRegions(ErrorString*, PassRefPtr<NodeList>, int documentNodeId); - PassRefPtr<Inspector::TypeBuilder::CSS::NamedFlow> buildObjectForNamedFlow(ErrorString*, WebKitNamedFlow*, int documentNodeId); + InspectorStyleSheet* assertStyleSheetForId(ErrorString&, const String&); + InspectorStyleSheet* createInspectorStyleSheetForDocument(Document&); + Inspector::Protocol::CSS::StyleSheetOrigin detectOrigin(CSSStyleSheet* pageStyleSheet, Document* ownerDocument); + + RefPtr<Inspector::Protocol::CSS::CSSRule> buildObjectForRule(StyleRule*, StyleResolver&, Element&); + RefPtr<Inspector::Protocol::CSS::CSSRule> buildObjectForRule(CSSStyleRule*); + RefPtr<Inspector::Protocol::Array<Inspector::Protocol::CSS::RuleMatch>> buildArrayForMatchedRuleList(const Vector<RefPtr<StyleRule>>&, StyleResolver&, Element&, PseudoId); + RefPtr<Inspector::Protocol::CSS::CSSStyle> buildObjectForAttributesStyle(Element*); + RefPtr<Inspector::Protocol::Array<Inspector::Protocol::CSS::Region>> buildArrayForRegions(ErrorString&, RefPtr<NodeList>&&, int documentNodeId); + RefPtr<Inspector::Protocol::CSS::NamedFlow> buildObjectForNamedFlow(ErrorString&, WebKitNamedFlow*, int documentNodeId); // InspectorDOMAgent::DOMListener implementation - virtual void didRemoveDocument(Document*) override; - virtual void didRemoveDOMNode(Node*) override; - virtual void didModifyDOMAttr(Element*) override; + void didRemoveDOMNode(Node&, int nodeId) override; + void didModifyDOMAttr(Element&) override; // InspectorCSSAgent::Listener implementation - virtual void styleSheetChanged(InspectorStyleSheet*) override; + void styleSheetChanged(InspectorStyleSheet*) override; void resetPseudoStates(); - std::unique_ptr<Inspector::InspectorCSSFrontendDispatcher> m_frontendDispatcher; - RefPtr<Inspector::InspectorCSSBackendDispatcher> m_backendDispatcher; - InspectorDOMAgent* m_domAgent; + std::unique_ptr<Inspector::CSSFrontendDispatcher> m_frontendDispatcher; + RefPtr<Inspector::CSSBackendDispatcher> m_backendDispatcher; + InspectorDOMAgent* m_domAgent { nullptr }; IdToInspectorStyleSheet m_idToInspectorStyleSheet; CSSStyleSheetToInspectorStyleSheet m_cssStyleSheetToInspectorStyleSheet; NodeToInspectorStyleSheet m_nodeToInspectorStyleSheet; DocumentToViaInspectorStyleSheet m_documentToInspectorStyleSheet; + HashMap<Document*, HashSet<CSSStyleSheet*>> m_documentToKnownCSSStyleSheets; NodeIdToForcedPseudoState m_nodeIdToForcedPseudoState; + HashSet<Document*> m_documentsWithForcedPseudoStates; HashSet<int> m_namedFlowCollectionsRequested; - OwnPtr<UpdateRegionLayoutTask> m_updateRegionLayoutTask; - OwnPtr<ChangeRegionOversetTask> m_changeRegionOversetTask; + std::unique_ptr<ChangeRegionOversetTask> m_changeRegionOversetTask; - int m_lastStyleSheetId; + int m_lastStyleSheetId { 1 }; + bool m_creatingViaInspectorStyleSheet { false }; }; -#endif - } // namespace WebCore - -#endif // !defined(InspectorCSSAgent_h) |