Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(894)

Unified Diff: Source/core/inspector/InspectorStyleSheet.cpp

Issue 183763029: DevTools: move InspectorStyleSheet::ensureSourceData to ParsedStyleSheet (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Drive-by: remove unused typedef InspectorStyleMap Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/inspector/InspectorStyleSheet.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/inspector/InspectorStyleSheet.cpp
diff --git a/Source/core/inspector/InspectorStyleSheet.cpp b/Source/core/inspector/InspectorStyleSheet.cpp
index 336cbbcaba7427cffd0dfe6c6a291ecb7f17b1d6..be95ceb8b3ed76ba4a5a28195d05cb37475d1882 100644
--- a/Source/core/inspector/InspectorStyleSheet.cpp
+++ b/Source/core/inspector/InspectorStyleSheet.cpp
@@ -57,88 +57,17 @@
using WebCore::TypeBuilder::Array;
using WebCore::RuleSourceDataList;
using WebCore::CSSRuleSourceData;
+using WebCore::CSSStyleSheet;
-class ParsedStyleSheet {
- WTF_MAKE_FAST_ALLOCATED;
-public:
- ParsedStyleSheet();
-
- const String& text() const { ASSERT(m_hasText); return m_text; }
- void setText(const String& text);
- bool hasText() const { return m_hasText; }
- void setSourceData(PassOwnPtr<RuleSourceDataList>);
- bool hasSourceData() const { return m_sourceData; }
- PassRefPtr<WebCore::CSSRuleSourceData> ruleSourceDataAt(unsigned) const;
-
-private:
- void flattenSourceData(RuleSourceDataList*);
-
- String m_text;
- bool m_hasText;
- OwnPtr<RuleSourceDataList> m_sourceData;
-};
-
-ParsedStyleSheet::ParsedStyleSheet()
- : m_hasText(false)
-{
-}
-
-void ParsedStyleSheet::setText(const String& text)
-{
- m_hasText = true;
- m_text = text;
- setSourceData(nullptr);
-}
-
-void ParsedStyleSheet::flattenSourceData(RuleSourceDataList* dataList)
-{
- for (size_t i = 0; i < dataList->size(); ++i) {
- RefPtr<CSSRuleSourceData>& data = dataList->at(i);
- if (data->type == CSSRuleSourceData::STYLE_RULE) {
- m_sourceData->append(data);
- } else if (data->type == CSSRuleSourceData::IMPORT_RULE) {
- m_sourceData->append(data);
- } else if (data->type == CSSRuleSourceData::MEDIA_RULE) {
- m_sourceData->append(data);
- flattenSourceData(&data->childRules);
- } else if (data->type == CSSRuleSourceData::SUPPORTS_RULE) {
- flattenSourceData(&data->childRules);
- }
- }
-}
-
-void ParsedStyleSheet::setSourceData(PassOwnPtr<RuleSourceDataList> sourceData)
+static PassOwnPtr<WebCore::BisonCSSParser> createCSSParser(WebCore::Document* document)
{
- if (!sourceData) {
- m_sourceData.clear();
- return;
- }
-
- m_sourceData = adoptPtr(new RuleSourceDataList());
-
- // FIXME: This is a temporary solution to retain the original flat sourceData structure
- // containing only style rules, even though BisonCSSParser now provides the full rule source data tree.
- // Normally, we should just assign m_sourceData = sourceData;
- flattenSourceData(sourceData.get());
-}
-
-PassRefPtr<WebCore::CSSRuleSourceData> ParsedStyleSheet::ruleSourceDataAt(unsigned index) const
-{
- if (!hasSourceData() || index >= m_sourceData->size())
- return nullptr;
-
- return m_sourceData->at(index);
-}
-
-namespace WebCore {
-
-static PassOwnPtr<BisonCSSParser> createCSSParser(Document* document)
-{
- return adoptPtr(new BisonCSSParser(document ? CSSParserContext(*document, 0) : strictCSSParserContext()));
+ return adoptPtr(new WebCore::BisonCSSParser(document ? WebCore::CSSParserContext(*document, 0) : WebCore::strictCSSParserContext()));
}
namespace {
+using namespace WebCore;
+
class StyleSheetHandler FINAL : public CSSParserObserver {
public:
StyleSheetHandler(const String& parsedText, Document* document, StyleSheetContents* styleSheetContents, RuleSourceDataList* result)
@@ -427,6 +356,99 @@ void StyleSheetHandler::endComment(unsigned offset)
} // namespace
+class ParsedStyleSheet {
+ WTF_MAKE_FAST_ALLOCATED;
+public:
+ ParsedStyleSheet(CSSStyleSheet* pageStyleSheet);
+
+ const String& text() const { ASSERT(m_hasText); return m_text; }
+ void setText(const String&);
+ bool hasText() const { return m_hasText; }
+ bool ensureSourceData();
+ bool hasSourceData() const { return m_sourceData; }
+ PassRefPtr<WebCore::CSSRuleSourceData> ruleSourceDataAt(unsigned) const;
+
+private:
+ void flattenSourceData(RuleSourceDataList*);
+ void setSourceData(PassOwnPtr<RuleSourceDataList>);
+
+ String m_text;
+ bool m_hasText;
+ OwnPtr<RuleSourceDataList> m_sourceData;
+ RefPtr<CSSStyleSheet> m_pageStyleSheet;
+};
+
+ParsedStyleSheet::ParsedStyleSheet(CSSStyleSheet* pageStyleSheet)
+ : m_hasText(false)
+ , m_pageStyleSheet(pageStyleSheet)
+{
+}
+
+void ParsedStyleSheet::setText(const String& text)
+{
+ m_hasText = true;
+ m_text = text;
+ setSourceData(nullptr);
+}
+
+void ParsedStyleSheet::flattenSourceData(RuleSourceDataList* dataList)
+{
+ for (size_t i = 0; i < dataList->size(); ++i) {
+ RefPtr<CSSRuleSourceData>& data = dataList->at(i);
+ if (data->type == CSSRuleSourceData::STYLE_RULE) {
+ m_sourceData->append(data);
+ } else if (data->type == CSSRuleSourceData::IMPORT_RULE) {
+ m_sourceData->append(data);
+ } else if (data->type == CSSRuleSourceData::MEDIA_RULE) {
+ m_sourceData->append(data);
+ flattenSourceData(&data->childRules);
+ } else if (data->type == CSSRuleSourceData::SUPPORTS_RULE) {
+ flattenSourceData(&data->childRules);
+ }
+ }
+}
+
+bool ParsedStyleSheet::ensureSourceData()
+{
+ if (hasSourceData())
+ return true;
+
+ if (!hasText())
+ return false;
+
+ RefPtrWillBeRawPtr<StyleSheetContents> newStyleSheet = StyleSheetContents::create(strictCSSParserContext());
+ OwnPtr<RuleSourceDataList> result = adoptPtr(new RuleSourceDataList());
+ StyleSheetHandler handler(text(), m_pageStyleSheet->ownerDocument(), newStyleSheet.get(), result.get());
+ createCSSParser(m_pageStyleSheet->ownerDocument())->parseSheet(newStyleSheet.get(), text(), TextPosition::minimumPosition(), &handler);
+ setSourceData(result.release());
+ return hasSourceData();
+}
+
+void ParsedStyleSheet::setSourceData(PassOwnPtr<RuleSourceDataList> sourceData)
+{
+ if (!sourceData) {
+ m_sourceData.clear();
+ return;
+ }
+
+ m_sourceData = adoptPtr(new RuleSourceDataList());
+
+ // FIXME: This is a temporary solution to retain the original flat sourceData structure
+ // containing only style rules, even though BisonCSSParser now provides the full rule source data tree.
+ // Normally, we should just assign m_sourceData = sourceData;
+ flattenSourceData(sourceData.get());
+}
+
+PassRefPtr<WebCore::CSSRuleSourceData> ParsedStyleSheet::ruleSourceDataAt(unsigned index) const
+{
+ if (!hasSourceData() || index >= m_sourceData->size())
+ return nullptr;
+
+ return m_sourceData->at(index);
+}
+
+namespace WebCore {
+
enum MediaListSource {
MediaListSourceLinkedSheet,
MediaListSourceInlineSheet,
@@ -891,7 +913,7 @@ InspectorStyleSheet::InspectorStyleSheet(InspectorPageAgent* pageAgent, Inspecto
, m_isRevalidating(false)
, m_listener(listener)
{
- m_parsedStyleSheet = new ParsedStyleSheet();
+ m_parsedStyleSheet = new ParsedStyleSheet(m_pageStyleSheet.get());
}
InspectorStyleSheet::~InspectorStyleSheet()
@@ -1419,7 +1441,7 @@ bool InspectorStyleSheet::checkPageStyleSheet(ExceptionState& exceptionState) co
bool InspectorStyleSheet::ensureParsedDataReady()
{
- return ensureText() && ensureSourceData();
+ return ensureText() && m_parsedStyleSheet->ensureSourceData();
}
bool InspectorStyleSheet::ensureText() const
@@ -1438,22 +1460,6 @@ bool InspectorStyleSheet::ensureText() const
return success;
}
-bool InspectorStyleSheet::ensureSourceData()
-{
- if (m_parsedStyleSheet->hasSourceData())
- return true;
-
- if (!m_parsedStyleSheet->hasText())
- return false;
-
- RefPtrWillBeRawPtr<StyleSheetContents> newStyleSheet = StyleSheetContents::create(strictCSSParserContext());
- OwnPtr<RuleSourceDataList> result = adoptPtr(new RuleSourceDataList());
- StyleSheetHandler handler(m_parsedStyleSheet->text(), m_pageStyleSheet->ownerDocument(), newStyleSheet.get(), result.get());
- createCSSParser(m_pageStyleSheet->ownerDocument())->parseSheet(newStyleSheet.get(), m_parsedStyleSheet->text(), TextPosition::minimumPosition(), &handler);
- m_parsedStyleSheet->setSourceData(result.release());
- return m_parsedStyleSheet->hasSourceData();
-}
-
void InspectorStyleSheet::ensureFlatRules() const
{
// We are fine with redoing this for empty stylesheets as this will run fast.
« no previous file with comments | « Source/core/inspector/InspectorStyleSheet.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698