15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010, Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef InspectorStyleSheet_h 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define InspectorStyleSheet_h 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/InspectorTypeBuilder.h" 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/CSSPropertySourceData.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/CSSStyleDeclaration.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorStyleTextEditor.h" 321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/JSONValues.h" 33f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/heap/Handle.h" 34591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/HashMap.h" 35591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/PassRefPtr.h" 36591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/RefPtr.h" 37591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/Vector.h" 38591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/WTFString.h" 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ParsedStyleSheet; 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 42c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 44e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)class CSSMediaRule; 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CSSRuleList; 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CSSStyleDeclaration; 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CSSStyleRule; 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CSSStyleSheet; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Document; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Element; 51df95704c49daea886ddad70775bda23618d6274dBen Murdochclass ExceptionState; 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InspectorPageAgent; 5306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)class InspectorResourceAgent; 5443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)class InspectorStyleSheetBase; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 56c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)typedef WillBeHeapVector<RefPtrWillBeMember<CSSRule> > CSSRuleVector; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef String ErrorString; 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InspectorCSSId { 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InspectorCSSId() 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_ordinal(0) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InspectorCSSId(const String& styleSheetId, unsigned ordinal) 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_styleSheetId(styleSheetId) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_ordinal(ordinal) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isEmpty() const { return m_styleSheetId.isEmpty(); } 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String& styleSheetId() const { return m_styleSheetId; } 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned ordinal() const { return m_ordinal; } 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_styleSheetId; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_ordinal; 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct InspectorStyleProperty { 83aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch ALLOW_ONLY_INLINE_ALLOCATION(); 84aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdochpublic: 8553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) explicit InspectorStyleProperty(CSSPropertySourceData sourceData) 8653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) : sourceData(sourceData) 8753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , hasSource(true) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) InspectorStyleProperty(CSSPropertySourceData sourceData, bool hasSource) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : sourceData(sourceData) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , hasSource(hasSource) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasRawText() const { return !rawText.isEmpty(); } 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 99aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch void trace(Visitor* visitor) { visitor->trace(sourceData); } 100aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CSSPropertySourceData sourceData; 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasSource; 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String rawText; 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 106c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)class InspectorStyle FINAL : public RefCountedWillBeGarbageCollectedFinalized<InspectorStyle> { 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 108c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) static PassRefPtrWillBeRawPtr<InspectorStyle> create(const InspectorCSSId&, PassRefPtrWillBeRawPtr<CSSStyleDeclaration>, InspectorStyleSheetBase* parentStyleSheet); 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CSSStyleDeclaration* cssStyle() const { return m_style.get(); } 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PassRefPtr<TypeBuilder::CSS::CSSStyle> buildObjectForStyle() const; 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> > buildArrayForComputedStyle() const; 11307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch bool setPropertyText(unsigned index, const String& text, bool overwrite, ExceptionState&); 11453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) bool styleText(String* result) const; 1157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool textForRange(const SourceRange&, String* result) const; 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 117c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void trace(Visitor*); 118c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 120323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) InspectorStyle(const InspectorCSSId&, PassRefPtrWillBeRawPtr<CSSStyleDeclaration>, InspectorStyleSheetBase* parentStyleSheet); 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bool verifyPropertyText(const String& propertyText, bool canOmitSemicolon); 123aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch void populateAllProperties(WillBeHeapVector<InspectorStyleProperty>& result) const; 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PassRefPtr<TypeBuilder::CSS::CSSStyle> styleWithProperties() const; 125aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch PassRefPtrWillBeRawPtr<CSSRuleSourceData> extractSourceData() const; 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool applyStyleText(const String&); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String shorthandValue(const String& shorthandProperty) const; 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NewLineAndWhitespace& newLineAndWhitespaceDelimiters() const; 12953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) inline Document* ownerDocument() const; 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InspectorCSSId m_styleId; 132c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RefPtrWillBeMember<CSSStyleDeclaration> m_style; 133c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RawPtrWillBeMember<InspectorStyleSheetBase> m_parentStyleSheet; 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable std::pair<String, String> m_format; 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable bool m_formatAcquired; 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 138c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)class InspectorStyleSheetBase : public RefCountedWillBeGarbageCollectedFinalized<InspectorStyleSheetBase> { 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) class Listener { 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public: 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Listener() { } 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~Listener() { } 14443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual void styleSheetChanged(InspectorStyleSheetBase*) = 0; 1457757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual void willReparseStyleSheet() = 0; 1467757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual void didReparseStyleSheet() = 0; 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 14843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual ~InspectorStyleSheetBase() { } 149c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void trace(Visitor*) { } 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) String id() const { return m_id; } 15243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 15343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual Document* ownerDocument() const = 0; 15443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual bool setText(const String&, ExceptionState&) = 0; 15543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual bool getText(String* result) const = 0; 15607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch bool setPropertyText(const InspectorCSSId&, unsigned propertyIndex, const String& text, bool overwrite, ExceptionState&); 15707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 15807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch virtual bool setStyleText(const InspectorCSSId&, const String&) = 0; 15907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch bool getStyleText(const InspectorCSSId&, String*); 16043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 16143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual CSSStyleDeclaration* styleForId(const InspectorCSSId&) const = 0; 16243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual InspectorCSSId styleId(CSSStyleDeclaration*) const = 0; 16343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 16443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) PassRefPtr<TypeBuilder::CSS::CSSStyle> buildObjectForStyle(CSSStyleDeclaration*); 165a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch bool findPropertyByRange(const SourceRange&, InspectorCSSId*, unsigned* propertyIndex, bool* overwrite); 166a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch bool lineNumberAndColumnToOffset(unsigned lineNumber, unsigned columnNumber, unsigned* offset); 16743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 16843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)protected: 16943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) InspectorStyleSheetBase(const String& id, Listener*); 17043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 17143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) Listener* listener() const { return m_listener; } 17243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) void fireStyleSheetChanged(); 17343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) PassOwnPtr<Vector<unsigned> > lineEndings(); 17443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 175c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual PassRefPtrWillBeRawPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId&) = 0; 176a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch virtual unsigned ruleCount() = 0; 17743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 17843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) // Also accessed by friend class InspectorStyle. 179a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch virtual PassRefPtrWillBeRawPtr<CSSRuleSourceData> ruleSourceDataAt(unsigned) const = 0; 18043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual bool ensureParsedDataReady() = 0; 18143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 18243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)private: 18343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) friend class InspectorStyle; 18443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 18543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) String m_id; 18643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) Listener* m_listener; 18743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)}; 18843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 18943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)class InspectorStyleSheet : public InspectorStyleSheetBase { 19043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)public: 191c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) static PassRefPtrWillBeRawPtr<InspectorStyleSheet> create(InspectorPageAgent*, InspectorResourceAgent*, const String& id, PassRefPtrWillBeRawPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum, const String& documentURL, Listener*); 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~InspectorStyleSheet(); 194c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void trace(Visitor*) OVERRIDE; 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String finalURL() const; 19743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual Document* ownerDocument() const OVERRIDE; 19843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual bool setText(const String&, ExceptionState&) OVERRIDE; 19943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual bool getText(String* result) const OVERRIDE; 200df95704c49daea886ddad70775bda23618d6274dBen Murdoch String ruleSelector(const InspectorCSSId&, ExceptionState&); 201df95704c49daea886ddad70775bda23618d6274dBen Murdoch bool setRuleSelector(const InspectorCSSId&, const String& selector, ExceptionState&); 202e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) CSSStyleRule* addRule(const String& ruleText, const SourceRange& location, ExceptionState&); 203e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) bool deleteRule(const InspectorCSSId&, const String& oldText, ExceptionState&); 20443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 20543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) CSSStyleSheet* pageStyleSheet() const { return m_pageStyleSheet.get(); } 206d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 20781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) PassRefPtr<TypeBuilder::CSS::CSSStyleSheetHeader> buildObjectForStyleSheetInfo() const; 208521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) PassRefPtr<TypeBuilder::CSS::CSSRule> buildObjectForRule(CSSStyleRule*, PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSMedia> >); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 210521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) PassRefPtr<TypeBuilder::CSS::SourceRange> ruleHeaderSourceRange(const CSSRule*); 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InspectorCSSId ruleId(CSSStyleRule*) const; 21343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) CSSStyleRule* ruleForId(const InspectorCSSId&) const; 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual InspectorCSSId styleId(CSSStyleDeclaration*) const OVERRIDE; 21643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual CSSStyleDeclaration* styleForId(const InspectorCSSId&) const OVERRIDE; 21707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch virtual bool setStyleText(const InspectorCSSId&, const String&) OVERRIDE; 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 219a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch bool findRuleBySelectorRange(const SourceRange&, InspectorCSSId*); 220a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 221f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) const CSSRuleVector& flatRules(); 222f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 22343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)protected: 224c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual PassRefPtrWillBeRawPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId&) OVERRIDE; 225a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch virtual unsigned ruleCount() OVERRIDE; 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Also accessed by friend class InspectorStyle. 228a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch virtual PassRefPtrWillBeRawPtr<CSSRuleSourceData> ruleSourceDataAt(unsigned) const OVERRIDE; 22943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual bool ensureParsedDataReady() OVERRIDE; 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 23243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) InspectorStyleSheet(InspectorPageAgent*, InspectorResourceAgent*, const String& id, PassRefPtrWillBeRawPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum, const String& documentURL, Listener*); 233e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) unsigned ruleIndexBySourceRange(const CSSMediaRule* parentMediaRule, const SourceRange&); 234e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) CSSStyleRule* insertCSSOMRuleInStyleSheet(const SourceRange&, const String& ruleText, ExceptionState&); 235e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) CSSStyleRule* insertCSSOMRuleInMediaRule(CSSMediaRule*, const SourceRange&, const String& ruleText, ExceptionState&); 236e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) CSSStyleRule* insertCSSOMRuleBySourceRange(const SourceRange&, const String& ruleText, ExceptionState&); 237e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) bool verifyRuleText(const String& ruleText); 23843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) unsigned ruleIndexByStyle(CSSStyleDeclaration*) const; 23943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) String sourceMapURL() const; 24043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) String sourceURL() const; 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool ensureText() const; 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void ensureFlatRules() const; 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool styleSheetTextWithChangedStyle(CSSStyleDeclaration*, const String& newStyleText, String* result); 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool originalStyleSheetText(String* result) const; 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool resourceStyleSheetText(String* result) const; 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool inlineStyleSheetText(String* result) const; 24743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::Selector> > selectorsFromSource(const CSSRuleSourceData*, const String&); 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PassRefPtr<TypeBuilder::CSS::SelectorList> buildObjectForSelectorList(CSSStyleRule*); 24993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) String url() const; 25093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) bool hasSourceURL() const; 25193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) bool startsAtZero() const; 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 253197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch void updateText(const String& newText); 254197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch Element* ownerStyleElement() const; 255197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 256c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RawPtrWillBeMember<InspectorPageAgent> m_pageAgent; 257c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RawPtrWillBeMember<InspectorResourceAgent> m_resourceAgent; 258c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RefPtrWillBeMember<CSSStyleSheet> m_pageStyleSheet; 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TypeBuilder::CSS::StyleSheetOrigin::Enum m_origin; 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_documentURL; 261d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) OwnPtr<ParsedStyleSheet> m_parsedStyleSheet; 262521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) mutable CSSRuleVector m_flatRules; 26393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) mutable String m_sourceURL; 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 26643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)class InspectorStyleSheetForInlineStyle FINAL : public InspectorStyleSheetBase { 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 268c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) static PassRefPtrWillBeRawPtr<InspectorStyleSheetForInlineStyle> create(const String& id, PassRefPtrWillBeRawPtr<Element>, Listener*); 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void didModifyElementAttribute(); 271d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) virtual Document* ownerDocument() const OVERRIDE; 27209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool setText(const String&, ExceptionState&) OVERRIDE; 27309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool getText(String* result) const OVERRIDE; 27443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 27509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual CSSStyleDeclaration* styleForId(const InspectorCSSId& id) const OVERRIDE { ASSERT_UNUSED(id, !id.ordinal()); return inlineStyle(); } 27643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual InspectorCSSId styleId(CSSStyleDeclaration* style) const OVERRIDE { return InspectorCSSId(id(), 0); } 27707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch virtual bool setStyleText(const InspectorCSSId&, const String&) OVERRIDE; 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 279c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void trace(Visitor*) OVERRIDE; 280c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 282c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual PassRefPtrWillBeRawPtr<InspectorStyle> inspectorStyleForId(const InspectorCSSId&) OVERRIDE; 283a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch virtual unsigned ruleCount() OVERRIDE { return 1; } 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Also accessed by friend class InspectorStyle. 28643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual bool ensureParsedDataReady() OVERRIDE; 287a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch virtual PassRefPtrWillBeRawPtr<CSSRuleSourceData> ruleSourceDataAt(unsigned ruleIndex) const OVERRIDE { ASSERT_UNUSED(ruleIndex, !ruleIndex); return m_ruleSourceData; } 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 290f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) InspectorStyleSheetForInlineStyle(const String& id, PassRefPtrWillBeRawPtr<Element>, Listener*); 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CSSStyleDeclaration* inlineStyle() const; 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String& elementStyleText() const; 293aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch PassRefPtrWillBeRawPtr<CSSRuleSourceData> getStyleAttributeData() const; 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 295c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RefPtrWillBeMember<Element> m_element; 296c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RefPtrWillBeMember<CSSRuleSourceData> m_ruleSourceData; 297c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RefPtrWillBeMember<InspectorStyle> m_inspectorStyle; 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Contains "style" attribute value. 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable String m_styleText; 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable bool m_isStyleTextValid; 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 305c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 307c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WTF_ALLOW_MOVE_AND_INIT_WITH_MEM_FUNCTIONS(blink::InspectorStyleProperty); 308aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // !defined(InspectorStyleSheet_h) 310