Index: Source/core/inspector/InspectorStyleSheet.cpp |
diff --git a/Source/core/inspector/InspectorStyleSheet.cpp b/Source/core/inspector/InspectorStyleSheet.cpp |
index 479e432e2f2634e69074d431a5d91b4fc902dc8f..d8213cf01c7a9537110af042fb7a32eb593facc1 100644 |
--- a/Source/core/inspector/InspectorStyleSheet.cpp |
+++ b/Source/core/inspector/InspectorStyleSheet.cpp |
@@ -504,12 +504,12 @@ static PassRefPtrWillBeRawPtr<CSSRuleList> asCSSRuleList(CSSRule* rule) |
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)); |
} |
-InspectorStyle::InspectorStyle(const InspectorCSSId& styleId, PassRefPtr<CSSStyleDeclaration> style, InspectorStyleSheet* parentStyleSheet) |
+InspectorStyle::InspectorStyle(const InspectorCSSId& styleId, PassRefPtr<CSSStyleDeclaration> style, InspectorStyleSheetBase* parentStyleSheet) |
: m_styleId(styleId) |
, m_style(style) |
, m_parentStyleSheet(parentStyleSheet) |
@@ -830,7 +830,62 @@ NewLineAndWhitespace& InspectorStyle::newLineAndWhitespaceDelimiters() 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) |
@@ -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) |
- : m_pageAgent(pageAgent) |
+ : InspectorStyleSheetBase(id, listener) |
+ , m_pageAgent(pageAgent) |
, m_resourceAgent(resourceAgent) |
- , m_id(id) |
, m_pageStyleSheet(pageStyleSheet) |
, m_origin(origin) |
, m_documentURL(documentURL) |
- , m_listener(listener) |
{ |
m_parsedStyleSheet = adoptPtr(new ParsedStyleSheet(m_pageStyleSheet.get())); |
} |
@@ -869,8 +923,8 @@ String InspectorStyleSheet::finalURL() const |
void InspectorStyleSheet::reparseStyleSheet(const String& text) |
{ |
- if (m_listener) |
- m_listener->willReparseStyleSheet(); |
+ if (listener()) |
+ listener()->willReparseStyleSheet(); |
{ |
// Have a separate scope for clearRules() (bug 95324). |
@@ -883,19 +937,14 @@ void InspectorStyleSheet::reparseStyleSheet(const String& text) |
m_pageStyleSheet->contents()->parseString(text); |
} |
- if (m_listener) |
- m_listener->didReparseStyleSheet(); |
+ if (listener()) |
+ listener()->didReparseStyleSheet(); |
fireStyleSheetChanged(); |
m_pageStyleSheet->ownerDocument()->styleResolverChanged(RecalcStyleImmediately, FullStyleUpdate); |
} |
bool InspectorStyleSheet::setText(const String& text, ExceptionState& exceptionState) |
{ |
- if (!checkPageStyleSheet(exceptionState)) |
- return false; |
- if (!m_parsedStyleSheet) |
- return false; |
- |
m_parsedStyleSheet->setText(text); |
m_flatRules.clear(); |
@@ -914,8 +963,6 @@ String InspectorStyleSheet::ruleSelector(const InspectorCSSId& id, ExceptionStat |
bool InspectorStyleSheet::setRuleSelector(const InspectorCSSId& id, const String& selector, ExceptionState& exceptionState) |
{ |
- if (!checkPageStyleSheet(exceptionState)) |
- return false; |
CSSStyleRule* rule = ruleForId(id); |
if (!rule) { |
exceptionState.throwDOMException(NotFoundError, "No rule was found for the given ID."); |
@@ -950,8 +997,6 @@ static bool checkStyleRuleSelector(Document* document, const String& selector) |
CSSStyleRule* InspectorStyleSheet::addRule(const String& selector, ExceptionState& exceptionState) |
{ |
- if (!checkPageStyleSheet(exceptionState)) |
- return 0; |
if (!checkStyleRuleSelector(m_pageStyleSheet->ownerDocument(), selector)) { |
exceptionState.throwDOMException(SyntaxError, "The selector '" + selector + "' could not be added."); |
return 0; |
@@ -998,8 +1043,6 @@ CSSStyleRule* InspectorStyleSheet::addRule(const String& selector, ExceptionStat |
bool InspectorStyleSheet::deleteRule(const InspectorCSSId& id, ExceptionState& exceptionState) |
{ |
- if (!checkPageStyleSheet(exceptionState)) |
- return false; |
RefPtrWillBeRawPtr<CSSStyleRule> rule = ruleForId(id); |
if (!rule) { |
exceptionState.throwDOMException(NotFoundError, "No style rule could be found for the provided ID."); |
@@ -1146,49 +1189,6 @@ PassRefPtr<TypeBuilder::CSS::CSSRule> InspectorStyleSheet::buildObjectForRule(CS |
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 |
{ |
if (!ensureText()) |
@@ -1206,12 +1206,6 @@ CSSStyleDeclaration* InspectorStyleSheet::styleForId(const InspectorCSSId& id) c |
return rule->style(); |
} |
-void InspectorStyleSheet::fireStyleSheetChanged() |
-{ |
- if (m_listener) |
- m_listener->styleSheetChanged(this); |
-} |
- |
PassRefPtr<TypeBuilder::CSS::SourceRange> InspectorStyleSheet::ruleHeaderSourceRange(const CSSRule* rule) |
{ |
if (!ensureParsedDataReady()) |
@@ -1366,8 +1360,6 @@ bool InspectorStyleSheet::ensureParsedDataReady() |
bool InspectorStyleSheet::ensureText() const |
{ |
- if (!m_parsedStyleSheet) |
- return false; |
if (m_parsedStyleSheet->hasText()) |
return true; |
@@ -1415,8 +1407,6 @@ void InspectorStyleSheet::ensureFlatRules() const |
bool InspectorStyleSheet::setStyleText(CSSStyleDeclaration* style, const String& text) |
{ |
- if (!m_pageStyleSheet) |
- return false; |
if (!ensureParsedDataReady()) |
return false; |
@@ -1476,7 +1466,7 @@ bool InspectorStyleSheet::resourceStyleSheetText(String* result) const |
if (m_origin == TypeBuilder::CSS::StyleSheetOrigin::User || m_origin == TypeBuilder::CSS::StyleSheetOrigin::User_agent) |
return false; |
- if (!m_pageStyleSheet || !ownerDocument() || !ownerDocument()->frame()) |
+ if (!ownerDocument() || !ownerDocument()->frame()) |
return false; |
bool base64Encoded; |
@@ -1486,9 +1476,6 @@ bool InspectorStyleSheet::resourceStyleSheetText(String* result) const |
bool InspectorStyleSheet::inlineStyleSheetText(String* result) const |
{ |
- if (!m_pageStyleSheet) |
- return false; |
- |
Node* ownerNode = m_pageStyleSheet->ownerNode(); |
if (!ownerNode || ownerNode->nodeType() != Node::ELEMENT_NODE) |
return false; |
@@ -1500,13 +1487,13 @@ bool InspectorStyleSheet::inlineStyleSheetText(String* result) const |
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) |
- : InspectorStyleSheet(pageAgent, resourceAgent, id, nullptr, TypeBuilder::CSS::StyleSheetOrigin::Regular, "", listener) |
+InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle(const String& id, PassRefPtr<Element> element, Listener* listener) |
+ : InspectorStyleSheetBase(id, listener) |
, m_element(element) |
, m_ruleSourceData(nullptr) |
, m_isStyleTextValid(false) |