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

Side by Side Diff: Source/core/inspector/InspectorStyleSheet.h

Issue 202103002: DevTools: refactor InspectorStyleSheet (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: introduce InspectorStyleSheetBase class Created 6 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010, Google Inc. All rights reserved. 2 * Copyright (C) 2010, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 43
44 class CSSRuleList; 44 class CSSRuleList;
45 class CSSStyleDeclaration; 45 class CSSStyleDeclaration;
46 class CSSStyleRule; 46 class CSSStyleRule;
47 class CSSStyleSheet; 47 class CSSStyleSheet;
48 class Document; 48 class Document;
49 class Element; 49 class Element;
50 class ExceptionState; 50 class ExceptionState;
51 class InspectorPageAgent; 51 class InspectorPageAgent;
52 class InspectorResourceAgent; 52 class InspectorResourceAgent;
53 class InspectorStyleSheet; 53 class InspectorStyleSheetBase;
54 54
55 typedef WillBePersistentHeapVector<RefPtrWillBeMember<CSSRule> > CSSRuleVector; 55 typedef WillBePersistentHeapVector<RefPtrWillBeMember<CSSRule> > CSSRuleVector;
56 typedef String ErrorString; 56 typedef String ErrorString;
57 57
58 class InspectorCSSId { 58 class InspectorCSSId {
59 public: 59 public:
60 InspectorCSSId() 60 InspectorCSSId()
61 : m_ordinal(0) 61 : m_ordinal(0)
62 { 62 {
63 } 63 }
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 125
126 bool hasRawText() const { return !rawText.isEmpty(); } 126 bool hasRawText() const { return !rawText.isEmpty(); }
127 127
128 CSSPropertySourceData sourceData; 128 CSSPropertySourceData sourceData;
129 bool hasSource; 129 bool hasSource;
130 String rawText; 130 String rawText;
131 }; 131 };
132 132
133 class InspectorStyle FINAL : public RefCounted<InspectorStyle> { 133 class InspectorStyle FINAL : public RefCounted<InspectorStyle> {
134 public: 134 public:
135 static PassRefPtr<InspectorStyle> create(const InspectorCSSId& styleId, Pass RefPtr<CSSStyleDeclaration> style, InspectorStyleSheet* parentStyleSheet); 135 static PassRefPtr<InspectorStyle> create(const InspectorCSSId&, PassRefPtr<C SSStyleDeclaration>, InspectorStyleSheetBase* parentStyleSheet);
136 136
137 CSSStyleDeclaration* cssStyle() const { return m_style.get(); } 137 CSSStyleDeclaration* cssStyle() const { return m_style.get(); }
138 PassRefPtr<TypeBuilder::CSS::CSSStyle> buildObjectForStyle() const; 138 PassRefPtr<TypeBuilder::CSS::CSSStyle> buildObjectForStyle() const;
139 PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> > buildArrayForComputedStyle() const; 139 PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> > buildArrayForComputedStyle() const;
140 bool setPropertyText(unsigned index, const String& text, bool overwrite, Str ing* oldText, ExceptionState&); 140 bool setPropertyText(unsigned index, const String& text, bool overwrite, Str ing* oldText, ExceptionState&);
141 bool styleText(String* result) const; 141 bool styleText(String* result) const;
142 142
143 private: 143 private:
144 InspectorStyle(const InspectorCSSId& styleId, PassRefPtr<CSSStyleDeclaration > style, InspectorStyleSheet* parentStyleSheet); 144 InspectorStyle(const InspectorCSSId&, PassRefPtr<CSSStyleDeclaration>, Inspe ctorStyleSheetBase* parentStyleSheet);
145 145
146 bool verifyPropertyText(const String& propertyText, bool canOmitSemicolon); 146 bool verifyPropertyText(const String& propertyText, bool canOmitSemicolon);
147 void populateAllProperties(Vector<InspectorStyleProperty>& result) const; 147 void populateAllProperties(Vector<InspectorStyleProperty>& result) const;
148 PassRefPtr<TypeBuilder::CSS::CSSStyle> styleWithProperties() const; 148 PassRefPtr<TypeBuilder::CSS::CSSStyle> styleWithProperties() const;
149 PassRefPtr<CSSRuleSourceData> extractSourceData() const; 149 PassRefPtr<CSSRuleSourceData> extractSourceData() const;
150 bool applyStyleText(const String&); 150 bool applyStyleText(const String&);
151 String shorthandValue(const String& shorthandProperty) const; 151 String shorthandValue(const String& shorthandProperty) const;
152 NewLineAndWhitespace& newLineAndWhitespaceDelimiters() const; 152 NewLineAndWhitespace& newLineAndWhitespaceDelimiters() const;
153 inline Document* ownerDocument() const; 153 inline Document* ownerDocument() const;
154 154
155 InspectorCSSId m_styleId; 155 InspectorCSSId m_styleId;
156 RefPtr<CSSStyleDeclaration> m_style; 156 RefPtr<CSSStyleDeclaration> m_style;
157 InspectorStyleSheet* m_parentStyleSheet; 157 InspectorStyleSheetBase* m_parentStyleSheet;
158 mutable std::pair<String, String> m_format; 158 mutable std::pair<String, String> m_format;
159 mutable bool m_formatAcquired; 159 mutable bool m_formatAcquired;
160 }; 160 };
161 161
162 class InspectorStyleSheet : public RefCounted<InspectorStyleSheet> { 162 class InspectorStyleSheetBase : public RefCounted<InspectorStyleSheetBase> {
163 public: 163 public:
164 class Listener { 164 class Listener {
165 public: 165 public:
166 Listener() { } 166 Listener() { }
167 virtual ~Listener() { } 167 virtual ~Listener() { }
168 virtual void styleSheetChanged(InspectorStyleSheet*) = 0; 168 virtual void styleSheetChanged(InspectorStyleSheetBase*) = 0;
169 virtual void willReparseStyleSheet() = 0; 169 virtual void willReparseStyleSheet() = 0;
170 virtual void didReparseStyleSheet() = 0; 170 virtual void didReparseStyleSheet() = 0;
171 }; 171 };
172 virtual ~InspectorStyleSheetBase() { }
172 173
174 String id() const { return m_id; }
175
176 virtual Document* ownerDocument() const = 0;
177 virtual bool setText(const String&, ExceptionState&) = 0;
178 virtual bool getText(String* result) const = 0;
179 virtual void reparseStyleSheet(const String&) = 0;
180 bool setPropertyText(const InspectorCSSId&, unsigned propertyIndex, const St ring& text, bool overwrite, String* oldPropertyText, ExceptionState&);
181
182 virtual CSSStyleRule* ruleForId(const InspectorCSSId&) const = 0;
vsevik 2014/03/18 16:25:01 This should be on one subclass only.
lushnikov 2014/03/18 16:32:15 Done.
183 virtual CSSStyleDeclaration* styleForId(const InspectorCSSId&) const = 0;
184 virtual InspectorCSSId ruleId(CSSStyleRule*) const = 0;
vsevik 2014/03/18 16:25:01 ditto
lushnikov 2014/03/18 16:32:15 Done.
185 virtual InspectorCSSId styleId(CSSStyleDeclaration*) const = 0;
186
187 PassRefPtr<TypeBuilder::CSS::CSSStyle> buildObjectForStyle(CSSStyleDeclarati on*);
188
189 protected:
190 InspectorStyleSheetBase(const String& id, Listener*);
191
192 Listener* listener() const { return m_listener; }
193 void fireStyleSheetChanged();
194
195 virtual PassRefPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId& ) = 0;
196
197 // Also accessed by friend class InspectorStyle.
198 virtual PassRefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration* ) const = 0;
199 virtual bool setStyleText(CSSStyleDeclaration*, const String&) = 0;
200 virtual PassOwnPtr<Vector<unsigned> > lineEndings() const = 0;
vsevik 2014/03/18 16:25:01 Can we have only one implementation?
lushnikov 2014/03/18 16:32:15 Sure, I'll do it in a follow-up patch if you don't
201 virtual bool ensureParsedDataReady() = 0;
202
203 private:
204 friend class InspectorStyle;
205
206 String m_id;
207 Listener* m_listener;
208 };
209
210 class InspectorStyleSheet : public InspectorStyleSheetBase {
211 public:
173 static PassRefPtr<InspectorStyleSheet> create(InspectorPageAgent*, Inspector ResourceAgent*, const String& id, PassRefPtr<CSSStyleSheet> pageStyleSheet, Type Builder::CSS::StyleSheetOrigin::Enum, const String& documentURL, Listener*); 212 static PassRefPtr<InspectorStyleSheet> create(InspectorPageAgent*, Inspector ResourceAgent*, const String& id, PassRefPtr<CSSStyleSheet> pageStyleSheet, Type Builder::CSS::StyleSheetOrigin::Enum, const String& documentURL, Listener*);
174 213
175 virtual ~InspectorStyleSheet(); 214 virtual ~InspectorStyleSheet();
176 215
177 String id() const { return m_id; }
178 String finalURL() const; 216 String finalURL() const;
179 virtual Document* ownerDocument() const; 217 virtual Document* ownerDocument() const OVERRIDE;
180 CSSStyleSheet* pageStyleSheet() const { return m_pageStyleSheet.get(); } 218 virtual void reparseStyleSheet(const String&) OVERRIDE;
181 virtual void reparseStyleSheet(const String&); 219 virtual bool setText(const String&, ExceptionState&) OVERRIDE;
182 virtual bool setText(const String&, ExceptionState&); 220 virtual bool getText(String* result) const OVERRIDE;
183 virtual bool getText(String* result) const;
184 String ruleSelector(const InspectorCSSId&, ExceptionState&); 221 String ruleSelector(const InspectorCSSId&, ExceptionState&);
185 bool setRuleSelector(const InspectorCSSId&, const String& selector, Exceptio nState&); 222 bool setRuleSelector(const InspectorCSSId&, const String& selector, Exceptio nState&);
186 CSSStyleRule* addRule(const String& selector, ExceptionState&); 223 CSSStyleRule* addRule(const String& selector, ExceptionState&);
187 bool deleteRule(const InspectorCSSId&, ExceptionState&); 224 bool deleteRule(const InspectorCSSId&, ExceptionState&);
188 bool setPropertyText(const InspectorCSSId&, unsigned propertyIndex, const St ring& text, bool overwrite, String* oldPropertyText, ExceptionState&); 225
226 CSSStyleSheet* pageStyleSheet() const { return m_pageStyleSheet.get(); }
189 227
190 PassRefPtr<TypeBuilder::CSS::CSSStyleSheetHeader> buildObjectForStyleSheetIn fo() const; 228 PassRefPtr<TypeBuilder::CSS::CSSStyleSheetHeader> buildObjectForStyleSheetIn fo() const;
191 PassRefPtr<TypeBuilder::CSS::CSSRule> buildObjectForRule(CSSStyleRule*, Pass RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia> >); 229 PassRefPtr<TypeBuilder::CSS::CSSRule> buildObjectForRule(CSSStyleRule*, Pass RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia> >);
192 PassRefPtr<TypeBuilder::CSS::CSSStyle> buildObjectForStyle(CSSStyleDeclarati on*);
193 230
194 PassRefPtr<TypeBuilder::CSS::SourceRange> ruleHeaderSourceRange(const CSSRul e*); 231 PassRefPtr<TypeBuilder::CSS::SourceRange> ruleHeaderSourceRange(const CSSRul e*);
195 232
196 InspectorCSSId ruleId(CSSStyleRule*) const; 233 virtual InspectorCSSId ruleId(CSSStyleRule*) const OVERRIDE;
197 InspectorCSSId styleId(CSSStyleDeclaration* style) const { return ruleIdBySt yle(style); } 234 virtual InspectorCSSId styleId(CSSStyleDeclaration* style) const OVERRIDE { return ruleIdByStyle(style); }
198 virtual CSSStyleRule* ruleForId(const InspectorCSSId&) const; 235 virtual CSSStyleRule* ruleForId(const InspectorCSSId&) const OVERRIDE;
199 virtual CSSStyleDeclaration* styleForId(const InspectorCSSId&) const; 236 virtual CSSStyleDeclaration* styleForId(const InspectorCSSId&) const OVERRID E;
200 237
201 protected: 238 protected:
239 virtual PassRefPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId& ) OVERRIDE;
240
241 // Also accessed by friend class InspectorStyle.
242 virtual PassRefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration* ) const OVERRIDE;
243 virtual bool setStyleText(CSSStyleDeclaration*, const String&) OVERRIDE;
244 virtual PassOwnPtr<Vector<unsigned> > lineEndings() const OVERRIDE;
245 virtual bool ensureParsedDataReady() OVERRIDE;
246
247 private:
202 InspectorStyleSheet(InspectorPageAgent*, InspectorResourceAgent*, const Stri ng& id, PassRefPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOr igin::Enum, const String& documentURL, Listener*); 248 InspectorStyleSheet(InspectorPageAgent*, InspectorResourceAgent*, const Stri ng& id, PassRefPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOr igin::Enum, const String& documentURL, Listener*);
203 249
204 void fireStyleSheetChanged();
205 virtual PassRefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration* ) const;
206 virtual unsigned ruleIndexByStyle(CSSStyleDeclaration*) const;
207 virtual unsigned ruleIndexByRule(const CSSRule*) const;
208 virtual bool ensureParsedDataReady();
209 virtual PassRefPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId& );
210 virtual String sourceMapURL() const;
211 virtual String sourceURL() const;
212
213 // Also accessed by friend class InspectorStyle.
214 virtual bool setStyleText(CSSStyleDeclaration*, const String&);
215 virtual PassOwnPtr<Vector<unsigned> > lineEndings() const;
216
217 private:
218 friend class InspectorStyle;
219
220 InspectorCSSId ruleIdByStyle(CSSStyleDeclaration*) const; 250 InspectorCSSId ruleIdByStyle(CSSStyleDeclaration*) const;
251 unsigned ruleIndexByStyle(CSSStyleDeclaration*) const;
252 unsigned ruleIndexByRule(const CSSRule*) const;
253 String sourceMapURL() const;
254 String sourceURL() const;
221 bool checkPageStyleSheet(ExceptionState&) const; 255 bool checkPageStyleSheet(ExceptionState&) const;
222 bool ensureText() const; 256 bool ensureText() const;
223 void ensureFlatRules() const; 257 void ensureFlatRules() const;
224 bool styleSheetTextWithChangedStyle(CSSStyleDeclaration*, const String& newS tyleText, String* result); 258 bool styleSheetTextWithChangedStyle(CSSStyleDeclaration*, const String& newS tyleText, String* result);
225 bool originalStyleSheetText(String* result) const; 259 bool originalStyleSheetText(String* result) const;
226 bool resourceStyleSheetText(String* result) const; 260 bool resourceStyleSheetText(String* result) const;
227 bool inlineStyleSheetText(String* result) const; 261 bool inlineStyleSheetText(String* result) const;
228 PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::Selector> > selectorsFromSou rce(const CSSRuleSourceData*, const String&) const; 262 PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::Selector> > selectorsFromSou rce(const CSSRuleSourceData*, const String&) const;
229 PassRefPtr<TypeBuilder::CSS::SelectorList> buildObjectForSelectorList(CSSSty leRule*); 263 PassRefPtr<TypeBuilder::CSS::SelectorList> buildObjectForSelectorList(CSSSty leRule*);
230 String url() const; 264 String url() const;
231 bool hasSourceURL() const; 265 bool hasSourceURL() const;
232 bool startsAtZero() const; 266 bool startsAtZero() const;
233 267
234 InspectorPageAgent* m_pageAgent; 268 InspectorPageAgent* m_pageAgent;
235 InspectorResourceAgent* m_resourceAgent; 269 InspectorResourceAgent* m_resourceAgent;
236 String m_id;
237 RefPtr<CSSStyleSheet> m_pageStyleSheet; 270 RefPtr<CSSStyleSheet> m_pageStyleSheet;
238 TypeBuilder::CSS::StyleSheetOrigin::Enum m_origin; 271 TypeBuilder::CSS::StyleSheetOrigin::Enum m_origin;
239 String m_documentURL; 272 String m_documentURL;
240 OwnPtr<ParsedStyleSheet> m_parsedStyleSheet; 273 OwnPtr<ParsedStyleSheet> m_parsedStyleSheet;
241 mutable CSSRuleVector m_flatRules; 274 mutable CSSRuleVector m_flatRules;
242 Listener* m_listener;
243 mutable String m_sourceURL; 275 mutable String m_sourceURL;
244 }; 276 };
245 277
246 class InspectorStyleSheetForInlineStyle FINAL : public InspectorStyleSheet { 278 class InspectorStyleSheetForInlineStyle FINAL : public InspectorStyleSheetBase {
247 public: 279 public:
248 static PassRefPtr<InspectorStyleSheetForInlineStyle> create(InspectorPageAge nt*, InspectorResourceAgent*, const String& id, PassRefPtr<Element>, Listener*); 280 static PassRefPtr<InspectorStyleSheetForInlineStyle> create(const String& id , PassRefPtr<Element>, Listener*);
249 281
250 void didModifyElementAttribute(); 282 void didModifyElementAttribute();
251 virtual Document* ownerDocument() const OVERRIDE; 283 virtual Document* ownerDocument() const OVERRIDE;
252 virtual void reparseStyleSheet(const String&) OVERRIDE; 284 virtual void reparseStyleSheet(const String&) OVERRIDE;
253 virtual bool setText(const String&, ExceptionState&) OVERRIDE; 285 virtual bool setText(const String&, ExceptionState&) OVERRIDE;
254 virtual bool getText(String* result) const OVERRIDE; 286 virtual bool getText(String* result) const OVERRIDE;
287
255 virtual CSSStyleRule* ruleForId(const InspectorCSSId&) const OVERRIDE { retu rn 0; } 288 virtual CSSStyleRule* ruleForId(const InspectorCSSId&) const OVERRIDE { retu rn 0; }
256 virtual CSSStyleDeclaration* styleForId(const InspectorCSSId& id) const OVER RIDE { ASSERT_UNUSED(id, !id.ordinal()); return inlineStyle(); } 289 virtual CSSStyleDeclaration* styleForId(const InspectorCSSId& id) const OVER RIDE { ASSERT_UNUSED(id, !id.ordinal()); return inlineStyle(); }
290 virtual InspectorCSSId ruleId(CSSStyleRule*) const OVERRIDE { return Inspect orCSSId(); }
291 virtual InspectorCSSId styleId(CSSStyleDeclaration* style) const OVERRIDE { return InspectorCSSId(id(), 0); }
257 292
258 protected: 293 protected:
259 InspectorStyleSheetForInlineStyle(InspectorPageAgent*, InspectorResourceAgen t*, const String& id, PassRefPtr<Element>, Listener*);
260
261 virtual PassRefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration* style) const OVERRIDE { ASSERT_UNUSED(style, style == inlineStyle()); return m_ ruleSourceData; }
262 virtual unsigned ruleIndexByStyle(CSSStyleDeclaration*) const OVERRIDE { ret urn 0; }
263 virtual bool ensureParsedDataReady() OVERRIDE;
264 virtual PassRefPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId& ) OVERRIDE; 294 virtual PassRefPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId& ) OVERRIDE;
265 virtual String sourceMapURL() const OVERRIDE { return String(); }
266 virtual String sourceURL() const OVERRIDE { return String(); }
267 295
268 // Also accessed by friend class InspectorStyle. 296 // Also accessed by friend class InspectorStyle.
297 virtual bool ensureParsedDataReady() OVERRIDE;
298 virtual PassRefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration* style) const OVERRIDE { ASSERT_UNUSED(style, style == inlineStyle()); return m_ ruleSourceData; }
269 virtual bool setStyleText(CSSStyleDeclaration*, const String&) OVERRIDE; 299 virtual bool setStyleText(CSSStyleDeclaration*, const String&) OVERRIDE;
270 virtual PassOwnPtr<Vector<unsigned> > lineEndings() const OVERRIDE; 300 virtual PassOwnPtr<Vector<unsigned> > lineEndings() const OVERRIDE;
271 301
272 private: 302 private:
303 InspectorStyleSheetForInlineStyle(const String& id, PassRefPtr<Element>, Lis tener*);
273 CSSStyleDeclaration* inlineStyle() const; 304 CSSStyleDeclaration* inlineStyle() const;
274 const String& elementStyleText() const; 305 const String& elementStyleText() const;
275 PassRefPtr<CSSRuleSourceData> getStyleAttributeData() const; 306 PassRefPtr<CSSRuleSourceData> getStyleAttributeData() const;
276 307
277 RefPtr<Element> m_element; 308 RefPtr<Element> m_element;
278 RefPtr<CSSRuleSourceData> m_ruleSourceData; 309 RefPtr<CSSRuleSourceData> m_ruleSourceData;
279 RefPtr<InspectorStyle> m_inspectorStyle; 310 RefPtr<InspectorStyle> m_inspectorStyle;
280 311
281 // Contains "style" attribute value. 312 // Contains "style" attribute value.
282 mutable String m_styleText; 313 mutable String m_styleText;
283 mutable bool m_isStyleTextValid; 314 mutable bool m_isStyleTextValid;
284 }; 315 };
285 316
286 317
287 } // namespace WebCore 318 } // namespace WebCore
288 319
289 #endif // !defined(InspectorStyleSheet_h) 320 #endif // !defined(InspectorStyleSheet_h)
OLDNEW
« no previous file with comments | « Source/core/inspector/InspectorCSSAgent.cpp ('k') | Source/core/inspector/InspectorStyleSheet.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698