DevTools: refactor InspectorStyleSheet

Introduce InspectorStyleSheetBase, inherit InspectorStyleSheet and InspectorStyleSheetForInlineStyle from it.

BUG=341506

Review URL: https://codereview.chromium.org/202103002

git-svn-id: svn://svn.chromium.org/blink/trunk@169550 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 91fae4bb
...@@ -121,14 +121,10 @@ static unsigned computePseudoClassMask(JSONArray* pseudoClassArray) ...@@ -121,14 +121,10 @@ static unsigned computePseudoClassMask(JSONArray* pseudoClassArray)
class InspectorCSSAgent::StyleSheetAction : public InspectorHistory::Action { class InspectorCSSAgent::StyleSheetAction : public InspectorHistory::Action {
WTF_MAKE_NONCOPYABLE(StyleSheetAction); WTF_MAKE_NONCOPYABLE(StyleSheetAction);
public: public:
StyleSheetAction(const String& name, InspectorStyleSheet* styleSheet) StyleSheetAction(const String& name)
: InspectorHistory::Action(name) : InspectorHistory::Action(name)
, m_styleSheet(styleSheet)
{ {
} }
protected:
RefPtr<InspectorStyleSheet> m_styleSheet;
}; };
class InspectorCSSAgent::EnableResourceClient FINAL : public StyleSheetResourceClient { class InspectorCSSAgent::EnableResourceClient FINAL : public StyleSheetResourceClient {
...@@ -175,8 +171,9 @@ void InspectorCSSAgent::EnableResourceClient::setCSSStyleSheet(const String&, co ...@@ -175,8 +171,9 @@ void InspectorCSSAgent::EnableResourceClient::setCSSStyleSheet(const String&, co
class InspectorCSSAgent::SetStyleSheetTextAction FINAL : public InspectorCSSAgent::StyleSheetAction { class InspectorCSSAgent::SetStyleSheetTextAction FINAL : public InspectorCSSAgent::StyleSheetAction {
WTF_MAKE_NONCOPYABLE(SetStyleSheetTextAction); WTF_MAKE_NONCOPYABLE(SetStyleSheetTextAction);
public: public:
SetStyleSheetTextAction(InspectorStyleSheet* styleSheet, const String& text) SetStyleSheetTextAction(InspectorStyleSheetBase* styleSheet, const String& text)
: InspectorCSSAgent::StyleSheetAction("SetStyleSheetText", styleSheet) : InspectorCSSAgent::StyleSheetAction("SetStyleSheetText")
, m_styleSheet(styleSheet)
, m_text(text) , m_text(text)
{ {
} }
...@@ -220,6 +217,7 @@ public: ...@@ -220,6 +217,7 @@ public:
} }
private: private:
RefPtr<InspectorStyleSheetBase> m_styleSheet;
String m_text; String m_text;
String m_oldText; String m_oldText;
}; };
...@@ -227,8 +225,9 @@ private: ...@@ -227,8 +225,9 @@ private:
class InspectorCSSAgent::SetPropertyTextAction FINAL : public InspectorCSSAgent::StyleSheetAction { class InspectorCSSAgent::SetPropertyTextAction FINAL : public InspectorCSSAgent::StyleSheetAction {
WTF_MAKE_NONCOPYABLE(SetPropertyTextAction); WTF_MAKE_NONCOPYABLE(SetPropertyTextAction);
public: public:
SetPropertyTextAction(InspectorStyleSheet* styleSheet, const InspectorCSSId& cssId, unsigned propertyIndex, const String& text, bool overwrite) SetPropertyTextAction(InspectorStyleSheetBase* styleSheet, const InspectorCSSId& cssId, unsigned propertyIndex, const String& text, bool overwrite)
: InspectorCSSAgent::StyleSheetAction("SetPropertyText", styleSheet) : InspectorCSSAgent::StyleSheetAction("SetPropertyText")
, m_styleSheet(styleSheet)
, m_cssId(cssId) , m_cssId(cssId)
, m_propertyIndex(propertyIndex) , m_propertyIndex(propertyIndex)
, m_text(text) , m_text(text)
...@@ -274,6 +273,7 @@ public: ...@@ -274,6 +273,7 @@ public:
} }
private: private:
RefPtr<InspectorStyleSheetBase> m_styleSheet;
InspectorCSSId m_cssId; InspectorCSSId m_cssId;
unsigned m_propertyIndex; unsigned m_propertyIndex;
String m_text; String m_text;
...@@ -285,7 +285,8 @@ class InspectorCSSAgent::SetRuleSelectorAction FINAL : public InspectorCSSAgent: ...@@ -285,7 +285,8 @@ class InspectorCSSAgent::SetRuleSelectorAction FINAL : public InspectorCSSAgent:
WTF_MAKE_NONCOPYABLE(SetRuleSelectorAction); WTF_MAKE_NONCOPYABLE(SetRuleSelectorAction);
public: public:
SetRuleSelectorAction(InspectorStyleSheet* styleSheet, const InspectorCSSId& cssId, const String& selector) SetRuleSelectorAction(InspectorStyleSheet* styleSheet, const InspectorCSSId& cssId, const String& selector)
: InspectorCSSAgent::StyleSheetAction("SetRuleSelector", styleSheet) : InspectorCSSAgent::StyleSheetAction("SetRuleSelector")
, m_styleSheet(styleSheet)
, m_cssId(cssId) , m_cssId(cssId)
, m_selector(selector) , m_selector(selector)
{ {
...@@ -310,6 +311,7 @@ public: ...@@ -310,6 +311,7 @@ public:
} }
private: private:
RefPtr<InspectorStyleSheet> m_styleSheet;
InspectorCSSId m_cssId; InspectorCSSId m_cssId;
String m_selector; String m_selector;
String m_oldSelector; String m_oldSelector;
...@@ -319,7 +321,8 @@ class InspectorCSSAgent::AddRuleAction FINAL : public InspectorCSSAgent::StyleSh ...@@ -319,7 +321,8 @@ class InspectorCSSAgent::AddRuleAction FINAL : public InspectorCSSAgent::StyleSh
WTF_MAKE_NONCOPYABLE(AddRuleAction); WTF_MAKE_NONCOPYABLE(AddRuleAction);
public: public:
AddRuleAction(InspectorStyleSheet* styleSheet, const String& selector) AddRuleAction(InspectorStyleSheet* styleSheet, const String& selector)
: InspectorCSSAgent::StyleSheetAction("AddRule", styleSheet) : InspectorCSSAgent::StyleSheetAction("AddRule")
, m_styleSheet(styleSheet)
, m_selector(selector) , m_selector(selector)
{ {
} }
...@@ -346,6 +349,7 @@ public: ...@@ -346,6 +349,7 @@ public:
InspectorCSSId newRuleId() { return m_newId; } InspectorCSSId newRuleId() { return m_newId; }
private: private:
RefPtr<InspectorStyleSheet> m_styleSheet;
InspectorCSSId m_newId; InspectorCSSId m_newId;
String m_selector; String m_selector;
String m_oldSelector; String m_oldSelector;
...@@ -444,6 +448,7 @@ void InspectorCSSAgent::flushPendingFrontendMessages() ...@@ -444,6 +448,7 @@ void InspectorCSSAgent::flushPendingFrontendMessages()
void InspectorCSSAgent::reset() void InspectorCSSAgent::reset()
{ {
m_idToInspectorStyleSheet.clear(); m_idToInspectorStyleSheet.clear();
m_idToInspectorStyleSheetForInlineStyle.clear();
m_cssStyleSheetToInspectorStyleSheet.clear(); m_cssStyleSheetToInspectorStyleSheet.clear();
m_documentToCSSStyleSheets.clear(); m_documentToCSSStyleSheets.clear();
m_invalidatedDocuments.clear(); m_invalidatedDocuments.clear();
...@@ -819,7 +824,7 @@ void InspectorCSSAgent::getPlatformFontsForNode(ErrorString* errorString, int no ...@@ -819,7 +824,7 @@ void InspectorCSSAgent::getPlatformFontsForNode(ErrorString* errorString, int no
void InspectorCSSAgent::getStyleSheetText(ErrorString* errorString, const String& styleSheetId, String* result) void InspectorCSSAgent::getStyleSheetText(ErrorString* errorString, const String& styleSheetId, String* result)
{ {
InspectorStyleSheet* inspectorStyleSheet = assertStyleSheetForId(errorString, styleSheetId); InspectorStyleSheetBase* inspectorStyleSheet = assertStyleSheetForId(errorString, styleSheetId);
if (!inspectorStyleSheet) if (!inspectorStyleSheet)
return; return;
...@@ -828,7 +833,7 @@ void InspectorCSSAgent::getStyleSheetText(ErrorString* errorString, const String ...@@ -828,7 +833,7 @@ void InspectorCSSAgent::getStyleSheetText(ErrorString* errorString, const String
void InspectorCSSAgent::setStyleSheetText(ErrorString* errorString, const String& styleSheetId, const String& text) void InspectorCSSAgent::setStyleSheetText(ErrorString* errorString, const String& styleSheetId, const String& text)
{ {
InspectorStyleSheet* inspectorStyleSheet = assertStyleSheetForId(errorString, styleSheetId); InspectorStyleSheetBase* inspectorStyleSheet = assertStyleSheetForId(errorString, styleSheetId);
if (!inspectorStyleSheet) { if (!inspectorStyleSheet) {
*errorString = "Style sheet with id " + styleSheetId + " not found."; *errorString = "Style sheet with id " + styleSheetId + " not found.";
return; return;
...@@ -844,7 +849,7 @@ void InspectorCSSAgent::setPropertyText(ErrorString* errorString, const RefPtr<J ...@@ -844,7 +849,7 @@ void InspectorCSSAgent::setPropertyText(ErrorString* errorString, const RefPtr<J
InspectorCSSId compoundId(fullStyleId); InspectorCSSId compoundId(fullStyleId);
ASSERT(!compoundId.isEmpty()); ASSERT(!compoundId.isEmpty());
InspectorStyleSheet* inspectorStyleSheet = assertStyleSheetForId(errorString, compoundId.styleSheetId()); InspectorStyleSheetBase* inspectorStyleSheet = assertStyleSheetForId(errorString, compoundId.styleSheetId());
if (!inspectorStyleSheet) if (!inspectorStyleSheet)
return; return;
...@@ -860,7 +865,7 @@ void InspectorCSSAgent::setRuleSelector(ErrorString* errorString, const RefPtr<J ...@@ -860,7 +865,7 @@ void InspectorCSSAgent::setRuleSelector(ErrorString* errorString, const RefPtr<J
InspectorCSSId compoundId(fullRuleId); InspectorCSSId compoundId(fullRuleId);
ASSERT(!compoundId.isEmpty()); ASSERT(!compoundId.isEmpty());
InspectorStyleSheet* inspectorStyleSheet = assertStyleSheetForId(errorString, compoundId.styleSheetId()); InspectorStyleSheet* inspectorStyleSheet = assertInspectorStyleSheetForId(errorString, compoundId.styleSheetId());
if (!inspectorStyleSheet) if (!inspectorStyleSheet)
return; return;
...@@ -901,7 +906,7 @@ void InspectorCSSAgent::createStyleSheet(ErrorString* errorString, const String& ...@@ -901,7 +906,7 @@ void InspectorCSSAgent::createStyleSheet(ErrorString* errorString, const String&
void InspectorCSSAgent::addRule(ErrorString* errorString, const String& styleSheetId, const String& selector, RefPtr<TypeBuilder::CSS::CSSRule>& result) void InspectorCSSAgent::addRule(ErrorString* errorString, const String& styleSheetId, const String& selector, RefPtr<TypeBuilder::CSS::CSSRule>& result)
{ {
InspectorStyleSheet* inspectorStyleSheet = assertStyleSheetForId(errorString, styleSheetId); InspectorStyleSheet* inspectorStyleSheet = assertInspectorStyleSheetForId(errorString, styleSheetId);
if (!inspectorStyleSheet) if (!inspectorStyleSheet)
return; return;
...@@ -1056,8 +1061,8 @@ InspectorStyleSheetForInlineStyle* InspectorCSSAgent::asInspectorStyleSheet(Elem ...@@ -1056,8 +1061,8 @@ InspectorStyleSheetForInlineStyle* InspectorCSSAgent::asInspectorStyleSheet(Elem
return 0; return 0;
String newStyleSheetId = String::number(m_lastStyleSheetId++); String newStyleSheetId = String::number(m_lastStyleSheetId++);
RefPtr<InspectorStyleSheetForInlineStyle> inspectorStyleSheet = InspectorStyleSheetForInlineStyle::create(m_pageAgent, m_resourceAgent, newStyleSheetId, element, this); RefPtr<InspectorStyleSheetForInlineStyle> inspectorStyleSheet = InspectorStyleSheetForInlineStyle::create(newStyleSheetId, element, this);
m_idToInspectorStyleSheet.set(newStyleSheetId, inspectorStyleSheet); m_idToInspectorStyleSheetForInlineStyle.set(newStyleSheetId, inspectorStyleSheet);
m_nodeToInspectorStyleSheet.set(element, inspectorStyleSheet); m_nodeToInspectorStyleSheet.set(element, inspectorStyleSheet);
return inspectorStyleSheet.get(); return inspectorStyleSheet.get();
} }
...@@ -1174,7 +1179,7 @@ InspectorStyleSheet* InspectorCSSAgent::viaInspectorStyleSheet(Document* documen ...@@ -1174,7 +1179,7 @@ InspectorStyleSheet* InspectorCSSAgent::viaInspectorStyleSheet(Document* documen
return m_documentToViaInspectorStyleSheet.get(document); return m_documentToViaInspectorStyleSheet.get(document);
} }
InspectorStyleSheet* InspectorCSSAgent::assertStyleSheetForId(ErrorString* errorString, const String& styleSheetId) InspectorStyleSheet* InspectorCSSAgent::assertInspectorStyleSheetForId(ErrorString* errorString, const String& styleSheetId)
{ {
IdToInspectorStyleSheet::iterator it = m_idToInspectorStyleSheet.find(styleSheetId); IdToInspectorStyleSheet::iterator it = m_idToInspectorStyleSheet.find(styleSheetId);
if (it == m_idToInspectorStyleSheet.end()) { if (it == m_idToInspectorStyleSheet.end()) {
...@@ -1184,6 +1189,20 @@ InspectorStyleSheet* InspectorCSSAgent::assertStyleSheetForId(ErrorString* error ...@@ -1184,6 +1189,20 @@ InspectorStyleSheet* InspectorCSSAgent::assertStyleSheetForId(ErrorString* error
return it->value.get(); return it->value.get();
} }
InspectorStyleSheetBase* InspectorCSSAgent::assertStyleSheetForId(ErrorString* errorString, const String& styleSheetId)
{
String placeholder;
InspectorStyleSheetBase* result = assertInspectorStyleSheetForId(&placeholder, styleSheetId);
if (result)
return result;
IdToInspectorStyleSheetForInlineStyle::iterator it = m_idToInspectorStyleSheetForInlineStyle.find(styleSheetId);
if (it == m_idToInspectorStyleSheetForInlineStyle.end()) {
*errorString = "No style sheet with given id found";
return 0;
}
return it->value.get();
}
TypeBuilder::CSS::StyleSheetOrigin::Enum InspectorCSSAgent::detectOrigin(CSSStyleSheet* pageStyleSheet, Document* ownerDocument) TypeBuilder::CSS::StyleSheetOrigin::Enum InspectorCSSAgent::detectOrigin(CSSStyleSheet* pageStyleSheet, Document* ownerDocument)
{ {
if (m_creatingViaInspectorStyleSheet) if (m_creatingViaInspectorStyleSheet)
...@@ -1298,7 +1317,7 @@ void InspectorCSSAgent::didRemoveDOMNode(Node* node) ...@@ -1298,7 +1317,7 @@ void InspectorCSSAgent::didRemoveDOMNode(Node* node)
if (it == m_nodeToInspectorStyleSheet.end()) if (it == m_nodeToInspectorStyleSheet.end())
return; return;
m_idToInspectorStyleSheet.remove(it->value->id()); m_idToInspectorStyleSheetForInlineStyle.remove(it->value->id());
m_nodeToInspectorStyleSheet.remove(node); m_nodeToInspectorStyleSheet.remove(node);
} }
...@@ -1314,7 +1333,7 @@ void InspectorCSSAgent::didModifyDOMAttr(Element* element) ...@@ -1314,7 +1333,7 @@ void InspectorCSSAgent::didModifyDOMAttr(Element* element)
it->value->didModifyElementAttribute(); it->value->didModifyElementAttribute();
} }
void InspectorCSSAgent::styleSheetChanged(InspectorStyleSheet* styleSheet) void InspectorCSSAgent::styleSheetChanged(InspectorStyleSheetBase* styleSheet)
{ {
flushPendingFrontendMessages(); flushPendingFrontendMessages();
m_frontend->styleSheetChanged(styleSheet->id()); m_frontend->styleSheetChanged(styleSheet->id());
......
...@@ -63,7 +63,7 @@ class InspectorCSSAgent FINAL ...@@ -63,7 +63,7 @@ class InspectorCSSAgent FINAL
: public InspectorBaseAgent<InspectorCSSAgent> : public InspectorBaseAgent<InspectorCSSAgent>
, public InspectorDOMAgent::DOMListener , public InspectorDOMAgent::DOMListener
, public InspectorBackendDispatcher::CSSCommandHandler , public InspectorBackendDispatcher::CSSCommandHandler
, public InspectorStyleSheet::Listener { , public InspectorStyleSheetBase::Listener {
WTF_MAKE_NONCOPYABLE(InspectorCSSAgent); WTF_MAKE_NONCOPYABLE(InspectorCSSAgent);
public: public:
enum MediaListSource { enum MediaListSource {
...@@ -148,6 +148,7 @@ private: ...@@ -148,6 +148,7 @@ private:
InspectorCSSAgent(InspectorDOMAgent*, InspectorPageAgent*, InspectorResourceAgent*); InspectorCSSAgent(InspectorDOMAgent*, InspectorPageAgent*, InspectorResourceAgent*);
typedef HashMap<String, RefPtr<InspectorStyleSheet> > IdToInspectorStyleSheet; typedef HashMap<String, RefPtr<InspectorStyleSheet> > IdToInspectorStyleSheet;
typedef HashMap<String, RefPtr<InspectorStyleSheetForInlineStyle> > IdToInspectorStyleSheetForInlineStyle;
typedef HashMap<Node*, RefPtr<InspectorStyleSheetForInlineStyle> > NodeToInspectorStyleSheet; // bogus "stylesheets" with elements' inline styles typedef HashMap<Node*, RefPtr<InspectorStyleSheetForInlineStyle> > NodeToInspectorStyleSheet; // bogus "stylesheets" with elements' inline styles
typedef HashMap<int, unsigned> NodeIdToForcedPseudoState; typedef HashMap<int, unsigned> NodeIdToForcedPseudoState;
...@@ -167,7 +168,8 @@ private: ...@@ -167,7 +168,8 @@ private:
InspectorStyleSheet* bindStyleSheet(CSSStyleSheet*); InspectorStyleSheet* bindStyleSheet(CSSStyleSheet*);
String unbindStyleSheet(InspectorStyleSheet*); String unbindStyleSheet(InspectorStyleSheet*);
InspectorStyleSheet* viaInspectorStyleSheet(Document*, bool createIfAbsent); InspectorStyleSheet* viaInspectorStyleSheet(Document*, bool createIfAbsent);
InspectorStyleSheet* assertStyleSheetForId(ErrorString*, const String&); InspectorStyleSheet* assertInspectorStyleSheetForId(ErrorString*, const String&);
InspectorStyleSheetBase* assertStyleSheetForId(ErrorString*, const String&);
TypeBuilder::CSS::StyleSheetOrigin::Enum detectOrigin(CSSStyleSheet* pageStyleSheet, Document* ownerDocument); TypeBuilder::CSS::StyleSheetOrigin::Enum detectOrigin(CSSStyleSheet* pageStyleSheet, Document* ownerDocument);
bool styleSheetEditInProgress() const { return m_styleSheetsPendingMutation || m_styleDeclarationPendingMutation || m_isSettingStyleSheetText; } bool styleSheetEditInProgress() const { return m_styleSheetsPendingMutation || m_styleDeclarationPendingMutation || m_isSettingStyleSheetText; }
...@@ -181,7 +183,7 @@ private: ...@@ -181,7 +183,7 @@ private:
virtual void didModifyDOMAttr(Element*) OVERRIDE; virtual void didModifyDOMAttr(Element*) OVERRIDE;
// InspectorStyleSheet::Listener implementation // InspectorStyleSheet::Listener implementation
virtual void styleSheetChanged(InspectorStyleSheet*) OVERRIDE; virtual void styleSheetChanged(InspectorStyleSheetBase*) OVERRIDE;
virtual void willReparseStyleSheet() OVERRIDE; virtual void willReparseStyleSheet() OVERRIDE;
virtual void didReparseStyleSheet() OVERRIDE; virtual void didReparseStyleSheet() OVERRIDE;
...@@ -193,6 +195,7 @@ private: ...@@ -193,6 +195,7 @@ private:
InspectorResourceAgent* m_resourceAgent; InspectorResourceAgent* m_resourceAgent;
IdToInspectorStyleSheet m_idToInspectorStyleSheet; IdToInspectorStyleSheet m_idToInspectorStyleSheet;
IdToInspectorStyleSheetForInlineStyle m_idToInspectorStyleSheetForInlineStyle;
HashMap<CSSStyleSheet*, RefPtr<InspectorStyleSheet> > m_cssStyleSheetToInspectorStyleSheet; HashMap<CSSStyleSheet*, RefPtr<InspectorStyleSheet> > m_cssStyleSheetToInspectorStyleSheet;
typedef HashMap<Document*, OwnPtr<HashSet<CSSStyleSheet*> > > DocumentStyleSheets; typedef HashMap<Document*, OwnPtr<HashSet<CSSStyleSheet*> > > DocumentStyleSheets;
DocumentStyleSheets m_documentToCSSStyleSheets; DocumentStyleSheets m_documentToCSSStyleSheets;
......
...@@ -504,12 +504,12 @@ static PassRefPtrWillBeRawPtr<CSSRuleList> asCSSRuleList(CSSRule* rule) ...@@ -504,12 +504,12 @@ static PassRefPtrWillBeRawPtr<CSSRuleList> asCSSRuleList(CSSRule* rule)
return nullptr; return nullptr;
} }
PassRefPtr<InspectorStyle> InspectorStyle::create(const InspectorCSSId& styleId, PassRefPtr<CSSStyleDeclaration> style, InspectorStyleSheet* parentStyleSheet) PassRefPtr<InspectorStyle> InspectorStyle::create(const InspectorCSSId& styleId, PassRefPtr<CSSStyleDeclaration> style, InspectorStyleSheetBase* parentStyleSheet)
{ {
return adoptRef(new InspectorStyle(styleId, style, parentStyleSheet)); return adoptRef(new InspectorStyle(styleId, style, parentStyleSheet));
} }
InspectorStyle::InspectorStyle(const InspectorCSSId& styleId, PassRefPtr<CSSStyleDeclaration> style, InspectorStyleSheet* parentStyleSheet) InspectorStyle::InspectorStyle(const InspectorCSSId& styleId, PassRefPtr<CSSStyleDeclaration> style, InspectorStyleSheetBase* parentStyleSheet)
: m_styleId(styleId) : m_styleId(styleId)
, m_style(style) , m_style(style)
, m_parentStyleSheet(parentStyleSheet) , m_parentStyleSheet(parentStyleSheet)
...@@ -830,7 +830,62 @@ NewLineAndWhitespace& InspectorStyle::newLineAndWhitespaceDelimiters() const ...@@ -830,7 +830,62 @@ NewLineAndWhitespace& InspectorStyle::newLineAndWhitespaceDelimiters() const
Document* InspectorStyle::ownerDocument() const Document* InspectorStyle::ownerDocument() const
{ {
return m_parentStyleSheet->pageStyleSheet() ? m_parentStyleSheet->pageStyleSheet()->ownerDocument() : 0; return m_parentStyleSheet->ownerDocument();
}
InspectorStyleSheetBase::InspectorStyleSheetBase(const String& id, Listener* listener)
: m_id(id)
, m_listener(listener)
{
}
bool InspectorStyleSheetBase::setPropertyText(const InspectorCSSId& id, unsigned propertyIndex, const String& text, bool overwrite, String* oldText, ExceptionState& exceptionState)
{
RefPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id);
if (!inspectorStyle) {
exceptionState.throwDOMException(NotFoundError, "No property could be found for the given ID.");
return false;
}
bool success = inspectorStyle->setPropertyText(propertyIndex, text, overwrite, oldText, exceptionState);
if (success)
fireStyleSheetChanged();
return success;
}
void InspectorStyleSheetBase::fireStyleSheetChanged()
{
if (listener())
listener()->styleSheetChanged(this);
}
PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyleSheetBase::buildObjectForStyle(CSSStyleDeclaration* style)
{
RefPtr<CSSRuleSourceData> sourceData;
if (ensureParsedDataReady())
sourceData = ruleSourceDataFor(style);
InspectorCSSId id = styleId(style);
if (id.isEmpty()) {
// Any rule coming from User Agent and not from DefaultStyleSheet will not have id.
// See InspectorCSSAgent::buildObjectForRule for details.
RefPtr<InspectorStyle> inspectorStyle = InspectorStyle::create(id, style, this);
return inspectorStyle->buildObjectForStyle();
}
RefPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id);
RefPtr<TypeBuilder::CSS::CSSStyle> result = inspectorStyle->buildObjectForStyle();
// Style text cannot be retrieved without stylesheet, so set cssText here.
if (sourceData) {
String sheetText;
bool success = getText(&sheetText);
if (success) {
const SourceRange& bodyRange = sourceData->ruleBodyRange;
result->setCssText(sheetText.substring(bodyRange.start, bodyRange.end - bodyRange.start));
}
}
return result.release();
} }
PassRefPtr<InspectorStyleSheet> InspectorStyleSheet::create(InspectorPageAgent* pageAgent, InspectorResourceAgent* resourceAgent, const String& id, PassRefPtrWillBeRawPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum origin, const String& documentURL, Listener* listener) PassRefPtr<InspectorStyleSheet> InspectorStyleSheet::create(InspectorPageAgent* pageAgent, InspectorResourceAgent* resourceAgent, const String& id, PassRefPtrWillBeRawPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum origin, const String& documentURL, Listener* listener)
...@@ -839,13 +894,12 @@ PassRefPtr<InspectorStyleSheet> InspectorStyleSheet::create(InspectorPageAgent* ...@@ -839,13 +894,12 @@ PassRefPtr<InspectorStyleSheet> InspectorStyleSheet::create(InspectorPageAgent*
} }
InspectorStyleSheet::InspectorStyleSheet(InspectorPageAgent* pageAgent, InspectorResourceAgent* resourceAgent, const String& id, PassRefPtrWillBeRawPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum origin, const String& documentURL, Listener* listener) InspectorStyleSheet::InspectorStyleSheet(InspectorPageAgent* pageAgent, InspectorResourceAgent* resourceAgent, const String& id, PassRefPtrWillBeRawPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum origin, const String& documentURL, Listener* listener)
: m_pageAgent(pageAgent) : InspectorStyleSheetBase(id, listener)
, m_pageAgent(pageAgent)
, m_resourceAgent(resourceAgent) , m_resourceAgent(resourceAgent)
, m_id(id)
, m_pageStyleSheet(pageStyleSheet) , m_pageStyleSheet(pageStyleSheet)
, m_origin(origin) , m_origin(origin)
, m_documentURL(documentURL) , m_documentURL(documentURL)
, m_listener(listener)
{ {
m_parsedStyleSheet = adoptPtr(new ParsedStyleSheet(m_pageStyleSheet.get())); m_parsedStyleSheet = adoptPtr(new ParsedStyleSheet(m_pageStyleSheet.get()));
} }
...@@ -869,8 +923,8 @@ String InspectorStyleSheet::finalURL() const ...@@ -869,8 +923,8 @@ String InspectorStyleSheet::finalURL() const
void InspectorStyleSheet::reparseStyleSheet(const String& text) void InspectorStyleSheet::reparseStyleSheet(const String& text)
{ {
if (m_listener) if (listener())
m_listener->willReparseStyleSheet(); listener()->willReparseStyleSheet();
{ {
// Have a separate scope for clearRules() (bug 95324). // Have a separate scope for clearRules() (bug 95324).
...@@ -883,19 +937,14 @@ void InspectorStyleSheet::reparseStyleSheet(const String& text) ...@@ -883,19 +937,14 @@ void InspectorStyleSheet::reparseStyleSheet(const String& text)
m_pageStyleSheet->contents()->parseString(text); m_pageStyleSheet->contents()->parseString(text);
} }
if (m_listener) if (listener())
m_listener->didReparseStyleSheet(); listener()->didReparseStyleSheet();
fireStyleSheetChanged(); fireStyleSheetChanged();
m_pageStyleSheet->ownerDocument()->styleResolverChanged(RecalcStyleImmediately, FullStyleUpdate); m_pageStyleSheet->ownerDocument()->styleResolverChanged(RecalcStyleImmediately, FullStyleUpdate);
} }
bool InspectorStyleSheet::setText(const String& text, ExceptionState& exceptionState) bool InspectorStyleSheet::setText(const String& text, ExceptionState& exceptionState)
{ {
if (!checkPageStyleSheet(exceptionState))
return false;
if (!m_parsedStyleSheet)
return false;
m_parsedStyleSheet->setText(text); m_parsedStyleSheet->setText(text);
m_flatRules.clear(); m_flatRules.clear();
...@@ -914,8 +963,6 @@ String InspectorStyleSheet::ruleSelector(const InspectorCSSId& id, ExceptionStat ...@@ -914,8 +963,6 @@ String InspectorStyleSheet::ruleSelector(const InspectorCSSId& id, ExceptionStat
bool InspectorStyleSheet::setRuleSelector(const InspectorCSSId& id, const String& selector, ExceptionState& exceptionState) bool InspectorStyleSheet::setRuleSelector(const InspectorCSSId& id, const String& selector, ExceptionState& exceptionState)
{ {
if (!checkPageStyleSheet(exceptionState))
return false;
CSSStyleRule* rule = ruleForId(id); CSSStyleRule* rule = ruleForId(id);
if (!rule) { if (!rule) {
exceptionState.throwDOMException(NotFoundError, "No rule was found for the given ID."); exceptionState.throwDOMException(NotFoundError, "No rule was found for the given ID.");
...@@ -950,8 +997,6 @@ static bool checkStyleRuleSelector(Document* document, const String& selector) ...@@ -950,8 +997,6 @@ static bool checkStyleRuleSelector(Document* document, const String& selector)
CSSStyleRule* InspectorStyleSheet::addRule(const String& selector, ExceptionState& exceptionState) CSSStyleRule* InspectorStyleSheet::addRule(const String& selector, ExceptionState& exceptionState)
{ {
if (!checkPageStyleSheet(exceptionState))
return 0;
if (!checkStyleRuleSelector(m_pageStyleSheet->ownerDocument(), selector)) { if (!checkStyleRuleSelector(m_pageStyleSheet->ownerDocument(), selector)) {
exceptionState.throwDOMException(SyntaxError, "The selector '" + selector + "' could not be added."); exceptionState.throwDOMException(SyntaxError, "The selector '" + selector + "' could not be added.");
return 0; return 0;
...@@ -998,8 +1043,6 @@ CSSStyleRule* InspectorStyleSheet::addRule(const String& selector, ExceptionStat ...@@ -998,8 +1043,6 @@ CSSStyleRule* InspectorStyleSheet::addRule(const String& selector, ExceptionStat
bool InspectorStyleSheet::deleteRule(const InspectorCSSId& id, ExceptionState& exceptionState) bool InspectorStyleSheet::deleteRule(const InspectorCSSId& id, ExceptionState& exceptionState)
{ {
if (!checkPageStyleSheet(exceptionState))
return false;
RefPtrWillBeRawPtr<CSSStyleRule> rule = ruleForId(id); RefPtrWillBeRawPtr<CSSStyleRule> rule = ruleForId(id);
if (!rule) { if (!rule) {
exceptionState.throwDOMException(NotFoundError, "No style rule could be found for the provided ID."); exceptionState.throwDOMException(NotFoundError, "No style rule could be found for the provided ID.");
...@@ -1146,49 +1189,6 @@ PassRefPtr<TypeBuilder::CSS::CSSRule> InspectorStyleSheet::buildObjectForRule(CS ...@@ -1146,49 +1189,6 @@ PassRefPtr<TypeBuilder::CSS::CSSRule> InspectorStyleSheet::buildObjectForRule(CS
return result.release(); return result.release();
} }
PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyleSheet::buildObjectForStyle(CSSStyleDeclaration* style)
{
RefPtr<CSSRuleSourceData> sourceData;
if (ensureParsedDataReady())
sourceData = ruleSourceDataFor(style);
InspectorCSSId id = ruleIdByStyle(style);
if (id.isEmpty()) {
// Any rule coming from User Agent and not from DefaultStyleSheet will not have id.
// See InspectorCSSAgent::buildObjectForRule for details.
RefPtr<InspectorStyle> inspectorStyle = InspectorStyle::create(id, style, this);
return inspectorStyle->buildObjectForStyle();
}
RefPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id);
RefPtr<TypeBuilder::CSS::CSSStyle> result = inspectorStyle->buildObjectForStyle();
// Style text cannot be retrieved without stylesheet, so set cssText here.
if (sourceData) {
String sheetText;
bool success = getText(&sheetText);
if (success) {
const SourceRange& bodyRange = sourceData->ruleBodyRange;
result->setCssText(sheetText.substring(bodyRange.start, bodyRange.end - bodyRange.start));
}
}
return result.release();
}
bool InspectorStyleSheet::setPropertyText(const InspectorCSSId& id, unsigned propertyIndex, const String& text, bool overwrite, String* oldText, ExceptionState& exceptionState)
{
RefPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id);
if (!inspectorStyle) {
exceptionState.throwDOMException(NotFoundError, "No property could be found for the given ID.");
return false;
}
bool success = inspectorStyle->setPropertyText(propertyIndex, text, overwrite, oldText, exceptionState);
if (success)
fireStyleSheetChanged();
return success;
}
bool InspectorStyleSheet::getText(String* result) const bool InspectorStyleSheet::getText(String* result) const
{ {
if (!ensureText()) if (!ensureText())
...@@ -1206,12 +1206,6 @@ CSSStyleDeclaration* InspectorStyleSheet::styleForId(const InspectorCSSId& id) c ...@@ -1206,12 +1206,6 @@ CSSStyleDeclaration* InspectorStyleSheet::styleForId(const InspectorCSSId& id) c
return rule->style(); return rule->style();
} }
void InspectorStyleSheet::fireStyleSheetChanged()
{
if (m_listener)
m_listener->styleSheetChanged(this);
}
PassRefPtr<TypeBuilder::CSS::SourceRange> InspectorStyleSheet::ruleHeaderSourceRange(const CSSRule* rule) PassRefPtr<TypeBuilder::CSS::SourceRange> InspectorStyleSheet::ruleHeaderSourceRange(const CSSRule* rule)
{ {
if (!ensureParsedDataReady()) if (!ensureParsedDataReady())
...@@ -1366,8 +1360,6 @@ bool InspectorStyleSheet::ensureParsedDataReady() ...@@ -1366,8 +1360,6 @@ bool InspectorStyleSheet::ensureParsedDataReady()
bool InspectorStyleSheet::ensureText() const bool InspectorStyleSheet::ensureText() const
{ {
if (!m_parsedStyleSheet)
return false;
if (m_parsedStyleSheet->hasText()) if (m_parsedStyleSheet->hasText())
return true; return true;
...@@ -1415,8 +1407,6 @@ void InspectorStyleSheet::ensureFlatRules() const ...@@ -1415,8 +1407,6 @@ void InspectorStyleSheet::ensureFlatRules() const
bool InspectorStyleSheet::setStyleText(CSSStyleDeclaration* style, const String& text) bool InspectorStyleSheet::setStyleText(CSSStyleDeclaration* style, const String& text)
{ {
if (!m_pageStyleSheet)
return false;
if (!ensureParsedDataReady()) if (!ensureParsedDataReady())
return false; return false;
...@@ -1476,7 +1466,7 @@ bool InspectorStyleSheet::resourceStyleSheetText(String* result) const ...@@ -1476,7 +1466,7 @@ bool InspectorStyleSheet::resourceStyleSheetText(String* result) const
if (m_origin == TypeBuilder::CSS::StyleSheetOrigin::User || m_origin == TypeBuilder::CSS::StyleSheetOrigin::User_agent) if (m_origin == TypeBuilder::CSS::StyleSheetOrigin::User || m_origin == TypeBuilder::CSS::StyleSheetOrigin::User_agent)
return false; return false;
if (!m_pageStyleSheet || !ownerDocument() || !ownerDocument()->frame()) if (!ownerDocument() || !ownerDocument()->frame())
return false; return false;
bool base64Encoded; bool base64Encoded;
...@@ -1486,9 +1476,6 @@ bool InspectorStyleSheet::resourceStyleSheetText(String* result) const ...@@ -1486,9 +1476,6 @@ bool InspectorStyleSheet::resourceStyleSheetText(String* result) const
bool InspectorStyleSheet::inlineStyleSheetText(String* result) const bool InspectorStyleSheet::inlineStyleSheetText(String* result) const
{ {
if (!m_pageStyleSheet)
return false;
Node* ownerNode = m_pageStyleSheet->ownerNode(); Node* ownerNode = m_pageStyleSheet->ownerNode();
if (!ownerNode || ownerNode->nodeType() != Node::ELEMENT_NODE) if (!ownerNode || ownerNode->nodeType() != Node::ELEMENT_NODE)
return false; return false;
...@@ -1500,13 +1487,13 @@ bool InspectorStyleSheet::inlineStyleSheetText(String* result) const ...@@ -1500,13 +1487,13 @@ bool InspectorStyleSheet::inlineStyleSheetText(String* result) const
return true; return true;
} }
PassRefPtr<InspectorStyleSheetForInlineStyle> InspectorStyleSheetForInlineStyle::create(InspectorPageAgent* pageAgent, InspectorResourceAgent* resourceAgent, const String& id, PassRefPtr<Element> element, Listener* listener) PassRefPtr<InspectorStyleSheetForInlineStyle> InspectorStyleSheetForInlineStyle::create(const String& id, PassRefPtr<Element> element, Listener* listener)
{ {
return adoptRef(new InspectorStyleSheetForInlineStyle(pageAgent, resourceAgent, id, element, listener)); return adoptRef(new InspectorStyleSheetForInlineStyle(id, element, listener));
} }
InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle(InspectorPageAgent* pageAgent, InspectorResourceAgent* resourceAgent, const String& id, PassRefPtr<Element> element, Listener* listener) InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle(const String& id, PassRefPtr<Element> element, Listener* listener)
: InspectorStyleSheet(pageAgent, resourceAgent, id, nullptr, TypeBuilder::CSS::StyleSheetOrigin::Regular, "", listener) : InspectorStyleSheetBase(id, listener)
, m_element(element) , m_element(element)
, m_ruleSourceData(nullptr) , m_ruleSourceData(nullptr)
, m_isStyleTextValid(false) , m_isStyleTextValid(false)
......
...@@ -50,7 +50,7 @@ class Element; ...@@ -50,7 +50,7 @@ class Element;
class ExceptionState; class ExceptionState;
class InspectorPageAgent; class InspectorPageAgent;
class InspectorResourceAgent; class InspectorResourceAgent;
class InspectorStyleSheet; class InspectorStyleSheetBase;
typedef WillBePersistentHeapVector<RefPtrWillBeMember<CSSRule> > CSSRuleVector; typedef WillBePersistentHeapVector<RefPtrWillBeMember<CSSRule> > CSSRuleVector;
typedef String ErrorString; typedef String ErrorString;
...@@ -132,7 +132,7 @@ struct InspectorStyleProperty { ...@@ -132,7 +132,7 @@ struct InspectorStyleProperty {
class InspectorStyle FINAL : public RefCounted<InspectorStyle> { class InspectorStyle FINAL : public RefCounted<InspectorStyle> {
public: public:
static PassRefPtr<InspectorStyle> create(const InspectorCSSId& styleId, PassRefPtr<CSSStyleDeclaration> style, InspectorStyleSheet* parentStyleSheet); static PassRefPtr<InspectorStyle> create(const InspectorCSSId&, PassRefPtr<CSSStyleDeclaration>, InspectorStyleSheetBase* parentStyleSheet);
CSSStyleDeclaration* cssStyle() const { return m_style.get(); } CSSStyleDeclaration* cssStyle() const { return m_style.get(); }
PassRefPtr<TypeBuilder::CSS::CSSStyle> buildObjectForStyle() const; PassRefPtr<TypeBuilder::CSS::CSSStyle> buildObjectForStyle() const;
...@@ -141,7 +141,7 @@ public: ...@@ -141,7 +141,7 @@ public:
bool styleText(String* result) const; bool styleText(String* result) const;
private: private:
InspectorStyle(const InspectorCSSId& styleId, PassRefPtr<CSSStyleDeclaration> style, InspectorStyleSheet* parentStyleSheet); InspectorStyle(const InspectorCSSId&, PassRefPtr<CSSStyleDeclaration>, InspectorStyleSheetBase* parentStyleSheet);
bool verifyPropertyText(const String& propertyText, bool canOmitSemicolon); bool verifyPropertyText(const String& propertyText, bool canOmitSemicolon);
void populateAllProperties(Vector<InspectorStyleProperty>& result) const; void populateAllProperties(Vector<InspectorStyleProperty>& result) const;
...@@ -154,70 +154,103 @@ private: ...@@ -154,70 +154,103 @@ private:
InspectorCSSId m_styleId; InspectorCSSId m_styleId;
RefPtr<CSSStyleDeclaration> m_style; RefPtr<CSSStyleDeclaration> m_style;
InspectorStyleSheet* m_parentStyleSheet; InspectorStyleSheetBase* m_parentStyleSheet;
mutable std::pair<String, String> m_format; mutable std::pair<String, String> m_format;
mutable bool m_formatAcquired; mutable bool m_formatAcquired;
}; };
class InspectorStyleSheet : public RefCounted<InspectorStyleSheet> { class InspectorStyleSheetBase : public RefCounted<InspectorStyleSheetBase> {
public: public:
class Listener { class Listener {
public: public:
Listener() { } Listener() { }
virtual ~Listener() { } virtual ~Listener() { }
virtual void styleSheetChanged(InspectorStyleSheet*) = 0; virtual void styleSheetChanged(InspectorStyleSheetBase*) = 0;
virtual void willReparseStyleSheet() = 0; virtual void willReparseStyleSheet() = 0;
virtual void didReparseStyleSheet() = 0; virtual void didReparseStyleSheet() = 0;
}; };
virtual ~InspectorStyleSheetBase() { }
String id() const { return m_id; }
virtual Document* ownerDocument() const = 0;
virtual bool setText(const String&, ExceptionState&) = 0;
virtual bool getText(String* result) const = 0;
virtual void reparseStyleSheet(const String&) = 0;
bool setPropertyText(const InspectorCSSId&, unsigned propertyIndex, const String& text, bool overwrite, String* oldPropertyText, ExceptionState&);
virtual CSSStyleDeclaration* styleForId(const InspectorCSSId&) const = 0;
virtual InspectorCSSId styleId(CSSStyleDeclaration*) const = 0;
PassRefPtr<TypeBuilder::CSS::CSSStyle> buildObjectForStyle(CSSStyleDeclaration*);
protected:
InspectorStyleSheetBase(const String& id, Listener*);
Listener* listener() const { return m_listener; }
void fireStyleSheetChanged();
virtual PassRefPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId&) = 0;
// Also accessed by friend class InspectorStyle.
virtual PassRefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration*) const = 0;
virtual bool setStyleText(CSSStyleDeclaration*, const String&) = 0;
virtual PassOwnPtr<Vector<unsigned> > lineEndings() const = 0;
virtual bool ensureParsedDataReady() = 0;
private:
friend class InspectorStyle;
String m_id;
Listener* m_listener;
};
class InspectorStyleSheet : public InspectorStyleSheetBase {
public:
static PassRefPtr<InspectorStyleSheet> create(InspectorPageAgent*, InspectorResourceAgent*, const String& id, PassRefPtrWillBeRawPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum, const String& documentURL, Listener*); static PassRefPtr<InspectorStyleSheet> create(InspectorPageAgent*, InspectorResourceAgent*, const String& id, PassRefPtrWillBeRawPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum, const String& documentURL, Listener*);
virtual ~InspectorStyleSheet(); virtual ~InspectorStyleSheet();
String id() const { return m_id; }
String finalURL() const; String finalURL() const;
virtual Document* ownerDocument() const; virtual Document* ownerDocument() const OVERRIDE;
CSSStyleSheet* pageStyleSheet() const { return m_pageStyleSheet.get(); } virtual void reparseStyleSheet(const String&) OVERRIDE;
virtual void reparseStyleSheet(const String&); virtual bool setText(const String&, ExceptionState&) OVERRIDE;
virtual bool setText(const String&, ExceptionState&); virtual bool getText(String* result) const OVERRIDE;
virtual bool getText(String* result) const;
String ruleSelector(const InspectorCSSId&, ExceptionState&); String ruleSelector(const InspectorCSSId&, ExceptionState&);
bool setRuleSelector(const InspectorCSSId&, const String& selector, ExceptionState&); bool setRuleSelector(const InspectorCSSId&, const String& selector, ExceptionState&);
CSSStyleRule* addRule(const String& selector, ExceptionState&); CSSStyleRule* addRule(const String& selector, ExceptionState&);
bool deleteRule(const InspectorCSSId&, ExceptionState&); bool deleteRule(const InspectorCSSId&, ExceptionState&);
bool setPropertyText(const InspectorCSSId&, unsigned propertyIndex, const String& text, bool overwrite, String* oldPropertyText, ExceptionState&);
CSSStyleSheet* pageStyleSheet() const { return m_pageStyleSheet.get(); }
PassRefPtr<TypeBuilder::CSS::CSSStyleSheetHeader> buildObjectForStyleSheetInfo() const; PassRefPtr<TypeBuilder::CSS::CSSStyleSheetHeader> buildObjectForStyleSheetInfo() const;
PassRefPtr<TypeBuilder::CSS::CSSRule> buildObjectForRule(CSSStyleRule*, PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia> >); PassRefPtr<TypeBuilder::CSS::CSSRule> buildObjectForRule(CSSStyleRule*, PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia> >);
PassRefPtr<TypeBuilder::CSS::CSSStyle> buildObjectForStyle(CSSStyleDeclaration*);
PassRefPtr<TypeBuilder::CSS::SourceRange> ruleHeaderSourceRange(const CSSRule*); PassRefPtr<TypeBuilder::CSS::SourceRange> ruleHeaderSourceRange(const CSSRule*);
InspectorCSSId ruleId(CSSStyleRule*) const; InspectorCSSId ruleId(CSSStyleRule*) const;
InspectorCSSId styleId(CSSStyleDeclaration* style) const { return ruleIdByStyle(style); } CSSStyleRule* ruleForId(const InspectorCSSId&) const;
virtual CSSStyleRule* ruleForId(const InspectorCSSId&) const;
virtual CSSStyleDeclaration* styleForId(const InspectorCSSId&) const;
protected: virtual InspectorCSSId styleId(CSSStyleDeclaration* style) const OVERRIDE { return ruleIdByStyle(style); }
InspectorStyleSheet(InspectorPageAgent*, InspectorResourceAgent*, const String& id, PassRefPtrWillBeRawPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum, const String& documentURL, Listener*); virtual CSSStyleDeclaration* styleForId(const InspectorCSSId&) const OVERRIDE;
void fireStyleSheetChanged(); protected:
virtual PassRefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration*) const; virtual PassRefPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId&) OVERRIDE;
virtual unsigned ruleIndexByStyle(CSSStyleDeclaration*) const;
virtual unsigned ruleIndexByRule(const CSSRule*) const;
virtual bool ensureParsedDataReady();
virtual PassRefPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId&);
virtual String sourceMapURL() const;
virtual String sourceURL() const;
// Also accessed by friend class InspectorStyle. // Also accessed by friend class InspectorStyle.
virtual bool setStyleText(CSSStyleDeclaration*, const String&); virtual PassRefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration*) const OVERRIDE;
virtual PassOwnPtr<Vector<unsigned> > lineEndings() const; virtual bool setStyleText(CSSStyleDeclaration*, const String&) OVERRIDE;
virtual PassOwnPtr<Vector<unsigned> > lineEndings() const OVERRIDE;
virtual bool ensureParsedDataReady() OVERRIDE;
private: private:
friend class InspectorStyle; InspectorStyleSheet(InspectorPageAgent*, InspectorResourceAgent*, const String& id, PassRefPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum, const String& documentURL, Listener*);
InspectorCSSId ruleIdByStyle(CSSStyleDeclaration*) const; InspectorCSSId ruleIdByStyle(CSSStyleDeclaration*) const;
unsigned ruleIndexByStyle(CSSStyleDeclaration*) const;
unsigned ruleIndexByRule(const CSSRule*) const;
String sourceMapURL() const;
String sourceURL() const;
bool checkPageStyleSheet(ExceptionState&) const; bool checkPageStyleSheet(ExceptionState&) const;
bool ensureText() const; bool ensureText() const;
void ensureFlatRules() const; void ensureFlatRules() const;
...@@ -233,43 +266,38 @@ private: ...@@ -233,43 +266,38 @@ private:
InspectorPageAgent* m_pageAgent; InspectorPageAgent* m_pageAgent;
InspectorResourceAgent* m_resourceAgent; InspectorResourceAgent* m_resourceAgent;
String m_id;
RefPtrWillBePersistent<CSSStyleSheet> m_pageStyleSheet; RefPtrWillBePersistent<CSSStyleSheet> m_pageStyleSheet;
TypeBuilder::CSS::StyleSheetOrigin::Enum m_origin; TypeBuilder::CSS::StyleSheetOrigin::Enum m_origin;
String m_documentURL; String m_documentURL;
OwnPtr<ParsedStyleSheet> m_parsedStyleSheet; OwnPtr<ParsedStyleSheet> m_parsedStyleSheet;
mutable CSSRuleVector m_flatRules; mutable CSSRuleVector m_flatRules;
Listener* m_listener;
mutable String m_sourceURL; mutable String m_sourceURL;
}; };
class InspectorStyleSheetForInlineStyle FINAL : public InspectorStyleSheet { class InspectorStyleSheetForInlineStyle FINAL : public InspectorStyleSheetBase {
public: public:
static PassRefPtr<InspectorStyleSheetForInlineStyle> create(InspectorPageAgent*, InspectorResourceAgent*, const String& id, PassRefPtr<Element>, Listener*); static PassRefPtr<InspectorStyleSheetForInlineStyle> create(const String& id, PassRefPtr<Element>, Listener*);
void didModifyElementAttribute(); void didModifyElementAttribute();
virtual Document* ownerDocument() const OVERRIDE; virtual Document* ownerDocument() const OVERRIDE;
virtual void reparseStyleSheet(const String&) OVERRIDE; virtual void reparseStyleSheet(const String&) OVERRIDE;
virtual bool setText(const String&, ExceptionState&) OVERRIDE; virtual bool setText(const String&, ExceptionState&) OVERRIDE;
virtual bool getText(String* result) const OVERRIDE; virtual bool getText(String* result) const OVERRIDE;
virtual CSSStyleRule* ruleForId(const InspectorCSSId&) const OVERRIDE { return 0; }
virtual CSSStyleDeclaration* styleForId(const InspectorCSSId& id) const OVERRIDE { ASSERT_UNUSED(id, !id.ordinal()); return inlineStyle(); } virtual CSSStyleDeclaration* styleForId(const InspectorCSSId& id) const OVERRIDE { ASSERT_UNUSED(id, !id.ordinal()); return inlineStyle(); }
virtual InspectorCSSId styleId(CSSStyleDeclaration* style) const OVERRIDE { return InspectorCSSId(id(), 0); }
protected: protected:
InspectorStyleSheetForInlineStyle(InspectorPageAgent*, InspectorResourceAgent*, const String& id, PassRefPtr<Element>, Listener*);
virtual PassRefPtr<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 PassRefPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId&) OVERRIDE;
virtual String sourceMapURL() const OVERRIDE { return String(); }
virtual String sourceURL() const OVERRIDE { return String(); }
// Also accessed by friend class InspectorStyle. // Also accessed by friend class InspectorStyle.
virtual bool ensureParsedDataReady() OVERRIDE;
virtual PassRefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration* style) const OVERRIDE { ASSERT_UNUSED(style, style == inlineStyle()); return m_ruleSourceData; }
virtual bool setStyleText(CSSStyleDeclaration*, const String&) OVERRIDE; virtual bool setStyleText(CSSStyleDeclaration*, const String&) OVERRIDE;
virtual PassOwnPtr<Vector<unsigned> > lineEndings() const OVERRIDE; virtual PassOwnPtr<Vector<unsigned> > lineEndings() const OVERRIDE;
private: private:
InspectorStyleSheetForInlineStyle(const String& id, PassRefPtr<Element>, Listener*);
CSSStyleDeclaration* inlineStyle() const; CSSStyleDeclaration* inlineStyle() const;
const String& elementStyleText() const; const String& elementStyleText() const;
PassRefPtr<CSSRuleSourceData> getStyleAttributeData() const; PassRefPtr<CSSRuleSourceData> getStyleAttributeData() const;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment