summaryrefslogtreecommitdiff
path: root/Source/WebCore/inspector/InspectorCSSAgent.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/inspector/InspectorCSSAgent.h')
-rw-r--r--Source/WebCore/inspector/InspectorCSSAgent.h159
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)