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 are
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
33c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @extends {WebInspector.SDKModel}
34aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.Target} target
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
36aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.CSSStyleModel = function(target)
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
38c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    WebInspector.SDKModel.call(this, WebInspector.CSSStyleModel, target);
39aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._domModel = target.domModel;
40aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._agent = target.cssAgent();
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._pendingCommandsMajorState = [];
421e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    this._styleLoader = new WebInspector.CSSStyleModel.ComputedStyleLoader(this);
43aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._domModel.addEventListener(WebInspector.DOMModel.Events.UndoRedoRequested, this._undoRedoRequested, this);
44aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._domModel.addEventListener(WebInspector.DOMModel.Events.UndoRedoCompleted, this._undoRedoCompleted, this);
45f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._mainFrameNavigated, this);
46a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    target.registerCSSDispatcher(new WebInspector.CSSDispatcher(this));
47aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._agent.enable(this._wasEnabled.bind(this));
48197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    /** @type {!StringMap.<!WebInspector.CSSStyleSheetHeader>} */
49197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    this._styleSheetIdToHeader = new StringMap();
50197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    /** @type {!StringMap.<!Object.<!PageAgent.FrameId, !Array.<!CSSAgent.StyleSheetId>>>} */
51197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    this._styleSheetIdsForURL = new StringMap();
52197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (Runtime.experiments.isEnabled("disableAgentsWhenProfile"))
54e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        WebInspector.profilingLock().addEventListener(WebInspector.Lock.Events.StateChanged, this._profilingStateChanged, this);
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
57aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.CSSStyleModel.PseudoStatePropertyName = "pseudoState";
58aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
60aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.CSSStyleModel} cssModel
61a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<!CSSAgent.RuleMatch>|undefined} matchArray
625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {!Array.<!WebInspector.CSSRule>}
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
64aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.CSSStyleModel.parseRuleMatchArrayPayload = function(cssModel, matchArray)
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    if (!matchArray)
6706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        return [];
6806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var result = [];
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (var i = 0; i < matchArray.length; ++i)
71aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        result.push(WebInspector.CSSRule.parsePayload(cssModel, matchArray[i].rule, matchArray[i].matchingSelectors));
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return result;
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CSSStyleModel.Events = {
7606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    ModelWasEnabled: "ModelWasEnabled",
7753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    StyleSheetAdded: "StyleSheetAdded",
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    StyleSheetChanged: "StyleSheetChanged",
7953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    StyleSheetRemoved: "StyleSheetRemoved",
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    MediaQueryResultChanged: "MediaQueryResultChanged",
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
83926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.CSSStyleModel.MediaTypes = ["all", "braille", "embossed", "handheld", "print", "projection", "screen", "speech", "tty", "tv"];
84926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CSSStyleModel.prototype = {
86197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    _profilingStateChanged: function()
87197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    {
88e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        if (WebInspector.profilingLock().isAcquired()) {
89197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            this._agent.disable();
90197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            this._isEnabled = false;
91197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            this._resetStyleSheets();
92197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        } else {
93197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            this._agent.enable(this._wasEnabled.bind(this));
94197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        }
95197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    },
96197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
9876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     * @param {function(!Array.<!WebInspector.CSSMedia>)} userCallback
9976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     */
10076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    getMediaQueries: function(userCallback)
10176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    {
10276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)        /**
10376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)         * @param {?Protocol.Error} error
10476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)         * @param {?Array.<!CSSAgent.CSSMedia>} payload
10576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)         * @this {!WebInspector.CSSStyleModel}
10676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)         */
10776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)        function callback(error, payload)
10876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)        {
10976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)            var models = [];
11076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)            if (!error && payload)
11176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)                models = WebInspector.CSSMedia.parseMediaArrayPayload(this, payload);
11276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)            userCallback(models);
11376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)        }
11476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)        this._agent.getMediaQueries(callback.bind(this));
11576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    },
11676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
11776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    /**
11806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @return {boolean}
11906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
12006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    isEnabled: function()
12106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    {
12206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        return this._isEnabled;
12306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    },
12406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
12506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    _wasEnabled: function()
12606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    {
12706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this._isEnabled = true;
12806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.ModelWasEnabled);
12906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    },
13006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
13106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
132a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
133c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {boolean} excludePseudo
134c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {boolean} excludeInherited
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?*)} userCallback
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
137c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    getMatchedStylesAsync: function(nodeId, excludePseudo, excludeInherited, userCallback)
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {function(?*)} userCallback
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
142a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<!CSSAgent.RuleMatch>=} matchedPayload
143a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<!CSSAgent.PseudoIdMatches>=} pseudoPayload
144a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<!CSSAgent.InheritedStyleEntry>=} inheritedPayload
145aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch         * @this {WebInspector.CSSStyleModel}
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callback(userCallback, error, matchedPayload, pseudoPayload, inheritedPayload)
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error) {
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (userCallback)
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    userCallback(null);
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var result = {};
156aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            result.matchedCSSRules = WebInspector.CSSStyleModel.parseRuleMatchArrayPayload(this, matchedPayload);
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            result.pseudoElements = [];
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (pseudoPayload) {
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                for (var i = 0; i < pseudoPayload.length; ++i) {
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    var entryPayload = pseudoPayload[i];
162aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                    result.pseudoElements.push({ pseudoId: entryPayload.pseudoId, rules: WebInspector.CSSStyleModel.parseRuleMatchArrayPayload(this, entryPayload.matches) });
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                }
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            result.inherited = [];
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (inheritedPayload) {
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                for (var i = 0; i < inheritedPayload.length; ++i) {
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    var entryPayload = inheritedPayload[i];
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    var entry = {};
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    if (entryPayload.inlineStyle)
172aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                        entry.inlineStyle = WebInspector.CSSStyleDeclaration.parsePayload(this, entryPayload.inlineStyle);
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    if (entryPayload.matchedCSSRules)
174aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                        entry.matchedCSSRules = WebInspector.CSSStyleModel.parseRuleMatchArrayPayload(this, entryPayload.matchedCSSRules);
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    result.inherited.push(entry);
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                }
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (userCallback)
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                userCallback(result);
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
183c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._agent.getMatchedStylesForNode(nodeId, excludePseudo, excludeInherited, callback.bind(this, userCallback));
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
187a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?WebInspector.CSSStyleDeclaration)} userCallback
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getComputedStyleAsync: function(nodeId, userCallback)
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1921e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        this._styleLoader.getComputedStyle(nodeId, userCallback);
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
196c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     * @param {number} nodeId
19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {function(?string, ?Array.<!CSSAgent.PlatformFontUsage>)} callback
198c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     */
199c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    getPlatformFontsForNode: function(nodeId, callback)
200c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    {
201c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        function platformFontsCallback(error, cssFamilyName, fonts)
202c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        {
203c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            if (error)
204c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)                callback(null, null);
205c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            else
206c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)                callback(cssFamilyName, fonts);
207c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        }
208aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.getPlatformFontsForNode(nodeId, platformFontsCallback);
209c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    },
210c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
211c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    /**
21209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {!Array.<!WebInspector.CSSStyleSheetHeader>}
21309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
21409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    allStyleSheets: function()
21509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
216197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        var values = this._styleSheetIdToHeader.values();
21743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)        /**
21843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)         * @param {!WebInspector.CSSStyleSheetHeader} a
21943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)         * @param {!WebInspector.CSSStyleSheetHeader} b
22043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)         * @return {number}
22143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)         */
22243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)        function styleSheetComparator(a, b)
22343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)        {
22443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)            if (a.sourceURL < b.sourceURL)
22543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)                return -1;
22643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)            else if (a.sourceURL > b.sourceURL)
22743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)                return 1;
22843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)            return a.startLine - b.startLine || a.startColumn - b.startColumn;
22943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)        }
23043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)        values.sort(styleSheetComparator);
23143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)
23243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)        return values;
23309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
23409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
23509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
236a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?WebInspector.CSSStyleDeclaration, ?WebInspector.CSSStyleDeclaration)} userCallback
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getInlineStylesAsync: function(nodeId, userCallback)
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {function(?WebInspector.CSSStyleDeclaration, ?WebInspector.CSSStyleDeclaration)} userCallback
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?CSSAgent.CSSStyle=} inlinePayload
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?CSSAgent.CSSStyle=} attributesStylePayload
246aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch         * @this {WebInspector.CSSStyleModel}
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callback(userCallback, error, inlinePayload, attributesStylePayload)
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error || !inlinePayload)
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                userCallback(null, null);
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            else
253aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                userCallback(WebInspector.CSSStyleDeclaration.parsePayload(this, inlinePayload), attributesStylePayload ? WebInspector.CSSStyleDeclaration.parsePayload(this, attributesStylePayload) : null);
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
256aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.getInlineStylesForNode(nodeId, callback.bind(this, userCallback));
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
260aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.DOMNode} node
261aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {string} pseudoClass
262aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {boolean} enable
263aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @return {boolean}
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
265aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    forcePseudoState: function(node, pseudoClass, enable)
266aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
267aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        var pseudoClasses = node.getUserProperty(WebInspector.CSSStyleModel.PseudoStatePropertyName) || [];
268aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        if (enable) {
269aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            if (pseudoClasses.indexOf(pseudoClass) >= 0)
270aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                return false;
271aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            pseudoClasses.push(pseudoClass);
272aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            node.setUserProperty(WebInspector.CSSStyleModel.PseudoStatePropertyName, pseudoClasses);
273aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        } else {
274aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            if (pseudoClasses.indexOf(pseudoClass) < 0)
275aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                return false;
276aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            pseudoClasses.remove(pseudoClass);
277aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            if (!pseudoClasses.length)
278aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                node.removeUserProperty(WebInspector.CSSStyleModel.PseudoStatePropertyName);
279aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        }
280aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
281aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.forcePseudoState(node.id, pseudoClasses);
282aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        return true;
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
286a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     * @param {!CSSAgent.CSSRule} rule
287a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} newSelector
289a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!WebInspector.CSSRule)} successCallback
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function()} failureCallback
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
292a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    setRuleSelector: function(rule, nodeId, newSelector, successCallback, failureCallback)
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
295a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!DOMAgent.NodeId} nodeId
296a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {function(!WebInspector.CSSRule)} successCallback
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {function()} failureCallback
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {string} newSelector
30009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {!CSSAgent.CSSRule} rulePayload
30109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.CSSStyleModel}
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callback(nodeId, successCallback, failureCallback, newSelector, error, rulePayload)
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._pendingCommandsMajorState.pop();
306f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            if (error) {
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                failureCallback();
308f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)                return;
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
310aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this._domModel.markUndoableState();
311f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            this._computeMatchingSelectors(rulePayload, nodeId, successCallback, failureCallback);
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
314a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (!rule.styleSheetId)
315a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch            throw "No rule stylesheet id";
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pendingCommandsMajorState.push(true);
317a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this._agent.setRuleSelector(rule.styleSheetId, rule.selectorRange, newSelector, callback.bind(this, nodeId, successCallback, failureCallback, newSelector));
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
321a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!CSSAgent.CSSRule} rulePayload
322a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
323a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!WebInspector.CSSRule)} successCallback
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function()} failureCallback
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
326f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    _computeMatchingSelectors: function(rulePayload, nodeId, successCallback, failureCallback)
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
328f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        var ownerDocumentId = this._ownerDocumentId(nodeId);
329f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        if (!ownerDocumentId) {
330f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            failureCallback();
331f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            return;
332f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        }
333aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        var rule = WebInspector.CSSRule.parsePayload(this, rulePayload);
334f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        var matchingSelectors = [];
335f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        var allSelectorsBarrier = new CallbackBarrier();
336f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        for (var i = 0; i < rule.selectors.length; ++i) {
337f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            var selector = rule.selectors[i];
33843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)            var boundCallback = allSelectorsBarrier.createCallback(selectorQueried.bind(null, i, nodeId, matchingSelectors));
339aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this._domModel.querySelectorAll(ownerDocumentId, selector.value, boundCallback);
340f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        }
341f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        allSelectorsBarrier.callWhenDone(function() {
342f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            rule.matchingSelectors = matchingSelectors;
343f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            successCallback(rule);
344f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        });
345f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
347f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)         * @param {number} index
348a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!DOMAgent.NodeId} nodeId
349a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<number>} matchingSelectors
350a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<!DOMAgent.NodeId>=} matchingNodeIds
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
352f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        function selectorQueried(index, nodeId, matchingSelectors, matchingNodeIds)
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
354f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            if (!matchingNodeIds)
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
356f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)            if (matchingNodeIds.indexOf(nodeId) !== -1)
357f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)                matchingSelectors.push(index);
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
359f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    },
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
361f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    /**
362d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!CSSAgent.StyleSheetId} styleSheetId
363d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.DOMNode} node
364e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)     * @param {string} ruleText
365e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)     * @param {!WebInspector.TextRange} ruleLocation
366a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!WebInspector.CSSRule)} successCallback
367f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     * @param {function()} failureCallback
368f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     */
369e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    addRule: function(styleSheetId, node, ruleText, ruleLocation, successCallback, failureCallback)
370f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    {
371d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._pendingCommandsMajorState.push(true);
372e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        this._agent.addRule(styleSheetId, ruleText, ruleLocation, callback.bind(this));
373d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
37609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {!CSSAgent.CSSRule} rulePayload
37709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.CSSStyleModel}
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
37909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        function callback(error, rulePayload)
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._pendingCommandsMajorState.pop();
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error) {
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                // Invalid syntax for a selector
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                failureCallback();
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            } else {
386aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                this._domModel.markUndoableState();
387d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                this._computeMatchingSelectors(rulePayload, node.id, successCallback, failureCallback);
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
390d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
392d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
393d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!WebInspector.DOMNode} node
394d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {function(?WebInspector.CSSStyleSheetHeader)} callback
395d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
396d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    requestViaInspectorStylesheet: function(node, callback)
397d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
398a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        var frameId = node.frameId() || this.target().resourceTreeModel.mainFrame.id;
399197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        var headers = this._styleSheetIdToHeader.values();
400197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        for (var i = 0; i < headers.length; ++i) {
401197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            var styleSheetHeader = headers[i];
402d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            if (styleSheetHeader.frameId === frameId && styleSheetHeader.isViaInspector()) {
403d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                callback(styleSheetHeader);
404d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                return;
405d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            }
406d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
407d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
408d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        /**
409d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         * @this {WebInspector.CSSStyleModel}
410d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         * @param {?Protocol.Error} error
411d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         * @param {!CSSAgent.StyleSheetId} styleSheetId
412d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)         */
413d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        function innerCallback(error, styleSheetId)
414d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        {
415d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            if (error) {
416d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                console.error(error);
417d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                callback(null);
418d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            }
419d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
420197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            callback(this._styleSheetIdToHeader.get(styleSheetId) || null);
421d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
422d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
423aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.createStyleSheet(frameId, innerCallback.bind(this));
4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    mediaQueryResultChanged: function()
4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.MediaQueryResultChanged);
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
43293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     * @param {!CSSAgent.StyleSheetId} id
433197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @return {?WebInspector.CSSStyleSheetHeader}
43493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     */
43593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    styleSheetHeaderForId: function(id)
43693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    {
437197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return this._styleSheetIdToHeader.get(id) || null;
43893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    },
43993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
44093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    /**
441a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Array.<!WebInspector.CSSStyleSheetHeader>}
44253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
44353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    styleSheetHeaders: function()
44453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
445197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return this._styleSheetIdToHeader.values();
44653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
44753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
44853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
449a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
450a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {?DOMAgent.NodeId}
4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _ownerDocumentId: function(nodeId)
4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
454aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        var node = this._domModel.nodeForId(nodeId);
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!node)
4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return null;
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return node.ownerDocument ? node.ownerDocument.id : null;
4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
461a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!CSSAgent.StyleSheetId} styleSheetId
4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _fireStyleSheetChanged: function(styleSheetId)
4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._pendingCommandsMajorState.length)
4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var majorChange = this._pendingCommandsMajorState[this._pendingCommandsMajorState.length - 1];
4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
47019cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)        if (!styleSheetId || !this.hasEventListeners(WebInspector.CSSStyleModel.Events.StyleSheetChanged))
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.StyleSheetChanged, { styleSheetId: styleSheetId, majorChange: majorChange });
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
477a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!CSSAgent.CSSStyleSheetHeader} header
47853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
47953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    _styleSheetAdded: function(header)
48053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
481197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        console.assert(!this._styleSheetIdToHeader.get(header.styleSheetId));
482aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        var styleSheetHeader = new WebInspector.CSSStyleSheetHeader(this, header);
4839e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)        this._styleSheetIdToHeader.set(header.styleSheetId, styleSheetHeader);
48493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        var url = styleSheetHeader.resourceURL();
485197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        if (!this._styleSheetIdsForURL.get(url))
4869e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)            this._styleSheetIdsForURL.set(url, {});
487197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        var frameIdToStyleSheetIds = this._styleSheetIdsForURL.get(url);
488e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        var styleSheetIds = frameIdToStyleSheetIds[styleSheetHeader.frameId];
489e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        if (!styleSheetIds) {
490e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            styleSheetIds = [];
491e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            frameIdToStyleSheetIds[styleSheetHeader.frameId] = styleSheetIds;
492e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        }
493e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        styleSheetIds.push(styleSheetHeader.id);
49493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.StyleSheetAdded, styleSheetHeader);
49553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
49653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
49753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
49853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     * @param {!CSSAgent.StyleSheetId} id
49953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
50053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    _styleSheetRemoved: function(id)
50153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
502197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        var header = this._styleSheetIdToHeader.get(id);
50353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        console.assert(header);
504aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        if (!header)
505aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            return;
506197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this._styleSheetIdToHeader.remove(id);
50793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        var url = header.resourceURL();
508197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        var frameIdToStyleSheetIds = /** @type {!Object.<!PageAgent.FrameId, !Array.<!CSSAgent.StyleSheetId>>} */ (this._styleSheetIdsForURL.get(url));
509197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        console.assert(frameIdToStyleSheetIds, "No frameId to styleSheetId map is available for given style sheet URL.");
510e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        frameIdToStyleSheetIds[header.frameId].remove(id);
511e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        if (!frameIdToStyleSheetIds[header.frameId].length) {
512e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            delete frameIdToStyleSheetIds[header.frameId];
513197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            if (!Object.keys(frameIdToStyleSheetIds).length)
514197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch                this._styleSheetIdsForURL.remove(url);
515e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        }
51653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.StyleSheetRemoved, header);
51753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
51853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
51953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
52093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     * @param {string} url
521a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Array.<!CSSAgent.StyleSheetId>}
52293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     */
52393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    styleSheetIdsForURL: function(url)
52493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    {
525197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        var frameIdToStyleSheetIds = this._styleSheetIdsForURL.get(url);
526e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        if (!frameIdToStyleSheetIds)
52793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            return [];
528e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
529e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        var result = [];
530e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        for (var frameId in frameIdToStyleSheetIds)
531e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            result = result.concat(frameIdToStyleSheetIds[frameId]);
532e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        return result;
53393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    },
53493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
53593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    /**
536521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     * @param {string} url
537a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Object.<!PageAgent.FrameId, !Array.<!CSSAgent.StyleSheetId>>}
538521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     */
539521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    styleSheetIdsByFrameIdForURL: function(url)
540521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    {
541197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        var styleSheetIdsForFrame = this._styleSheetIdsForURL.get(url);
542521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        if (!styleSheetIdsForFrame)
543521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)            return {};
544521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        return styleSheetIdsForFrame;
545521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    },
546521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
547521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    /**
548a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!CSSAgent.StyleSheetId} styleSheetId
5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} newText
5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} majorChange
55109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {function(?Protocol.Error)} userCallback
5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setStyleSheetText: function(styleSheetId, newText, majorChange, userCallback)
5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
555197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        var header = this._styleSheetIdToHeader.get(styleSheetId);
55609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        console.assert(header);
55709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._pendingCommandsMajorState.push(majorChange);
55809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        header.setContent(newText, callback.bind(this));
55909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
56009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
56109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {?Protocol.Error} error
56209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.CSSStyleModel}
56309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callback(error)
5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._pendingCommandsMajorState.pop();
5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!error && majorChange)
568aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                this._domModel.markUndoableState();
569f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!error && userCallback)
5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                userCallback(error);
5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _undoRedoRequested: function()
5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pendingCommandsMajorState.push(true);
5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _undoRedoCompleted: function()
5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pendingCommandsMajorState.pop();
5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
585f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    _mainFrameNavigated: function()
5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
58793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        this._resetStyleSheets();
5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
59093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    _resetStyleSheets: function()
591926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
592197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        var headers = this._styleSheetIdToHeader.values();
593197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this._styleSheetIdsForURL.clear();
594197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this._styleSheetIdToHeader.clear();
595197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        for (var i = 0; i < headers.length; ++i)
596197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.StyleSheetRemoved, headers[i]);
597926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
598926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
599c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    __proto__: WebInspector.SDKModel.prototype
6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
604197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @extends {WebInspector.SDKObject}
605f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.Target} target
606c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @param {?CSSAgent.StyleSheetId} styleSheetId
6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} url
6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} lineNumber
609926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number=} columnNumber
6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
611c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)WebInspector.CSSLocation = function(target, styleSheetId, url, lineNumber, columnNumber)
6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
613197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    WebInspector.SDKObject.call(this, target);
614c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this.styleSheetId = styleSheetId;
6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.url = url;
6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.lineNumber = lineNumber;
617926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    this.columnNumber = columnNumber || 0;
6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
620aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.CSSLocation.prototype = {
621197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    __proto__: WebInspector.SDKObject.prototype
622aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch}
623aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
626aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.CSSStyleModel} cssModel
627a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!CSSAgent.CSSStyle} payload
6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
629aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.CSSStyleDeclaration = function(cssModel, payload)
6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
631aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._cssModel = cssModel;
632a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    this.styleSheetId = payload.styleSheetId;
633aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this.range = payload.range ? WebInspector.TextRange.fromObject(payload.range) : null;
6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._shorthandValues = WebInspector.CSSStyleDeclaration.buildShorthandValueMap(payload.shorthandEntries);
6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._livePropertyMap = {}; // LIVE properties (source-based or style-based) : { name -> CSSProperty }
6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._allProperties = []; // ALL properties: [ CSSProperty ]
6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.__disabledProperties = {}; // DISABLED properties: { index -> CSSProperty }
6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var payloadPropertyCount = payload.cssProperties.length;
6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
640d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (var i = 0; i < payloadPropertyCount; ++i) {
6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var property = WebInspector.CSSProperty.parsePayload(this, i, payload.cssProperties[i]);
6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._allProperties.push(property);
644d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    }
645d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
646d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    this._computeActiveProperties();
647d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
648d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    var propertyIndex = 0;
649d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    for (var i = 0; i < this._allProperties.length; ++i) {
650d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        var property = this._allProperties[i];
6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (property.disabled)
6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.__disabledProperties[i] = property;
6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!property.active && !property.styleBased)
6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            continue;
6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var name = property.name;
6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this[propertyIndex] = name;
6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._livePropertyMap[name] = property;
6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ++propertyIndex;
6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.length = propertyIndex;
6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if ("cssText" in payload)
6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.cssText = payload.cssText;
6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
666a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<!CSSAgent.ShorthandEntry>} shorthandEntries
667a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!Object}
6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CSSStyleDeclaration.buildShorthandValueMap = function(shorthandEntries)
6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var result = {};
6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (var i = 0; i < shorthandEntries.length; ++i)
6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        result[shorthandEntries[i].name] = shorthandEntries[i].value;
6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return result;
6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
678aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.CSSStyleModel} cssModel
679a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!CSSAgent.CSSStyle} payload
680a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!WebInspector.CSSStyleDeclaration}
6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
682aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.CSSStyleDeclaration.parsePayload = function(cssModel, payload)
6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
684aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    return new WebInspector.CSSStyleDeclaration(cssModel, payload);
6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
688aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.CSSStyleModel} cssModel
689a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<!CSSAgent.CSSComputedStyleProperty>} payload
690a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!WebInspector.CSSStyleDeclaration}
6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
692aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.CSSStyleDeclaration.parseComputedStylePayload = function(cssModel, payload)
6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
694a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    var newPayload = /** @type {!CSSAgent.CSSStyle} */ ({ cssProperties: [], shorthandEntries: [], width: "", height: "" });
6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (payload)
696a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        newPayload.cssProperties = /** @type {!Array.<!CSSAgent.CSSProperty>} */ (payload);
6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
698aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    return new WebInspector.CSSStyleDeclaration(cssModel, newPayload);
6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CSSStyleDeclaration.prototype = {
702aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
703c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @return {!WebInspector.Target}
704c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     */
705c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    target: function()
706c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
707c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        return this._cssModel.target();
708c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    },
709c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
710c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /**
711aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {string} styleSheetId
712aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.TextRange} oldRange
713aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.TextRange} newRange
714aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
715aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    sourceStyleSheetEdited: function(styleSheetId, oldRange, newRange)
716aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
717a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (this.styleSheetId !== styleSheetId)
718aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            return;
719aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        if (this.range)
720aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this.range = this.range.rebaseAfterTextEdit(oldRange, newRange);
721aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        for (var i = 0; i < this._allProperties.length; ++i)
722aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this._allProperties[i].sourceStyleSheetEdited(styleSheetId, oldRange, newRange);
723aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
724aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
725d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    _computeActiveProperties: function()
726d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
727d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        var activeProperties = {};
728d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        for (var i = this._allProperties.length - 1; i >= 0; --i) {
729d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            var property = this._allProperties[i];
730d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            if (property.styleBased || property.disabled)
731d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                continue;
732d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            property._setActive(false);
733d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            if (!property.parsedOk)
734d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                continue;
735d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            var canonicalName = WebInspector.CSSMetadata.canonicalPropertyName(property.name);
736d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            var activeProperty = activeProperties[canonicalName];
737d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            if (!activeProperty || (!activeProperty.important && property.important))
738d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)                activeProperties[canonicalName] = property;
739d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
740d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        for (var propertyName in activeProperties) {
741d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            var property = activeProperties[propertyName];
742d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            property._setActive(true);
743d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
744d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
745d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get allProperties()
7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._allProperties;
7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
753a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {?WebInspector.CSSProperty}
7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getLiveProperty: function(name)
7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
757a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        return this._livePropertyMap[name] || null;
7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getPropertyValue: function(name)
7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var property = this._livePropertyMap[name];
7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return property ? property.value : "";
7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isPropertyImplicit: function(name)
7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var property = this._livePropertyMap[name];
7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return property ? property.implicit : "";
7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
782a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Array.<!WebInspector.CSSProperty>}
7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    longhandProperties: function(name)
7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
786926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        var longhands = WebInspector.CSSMetadata.cssPropertiesMetainfo.longhands(name);
7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var result = [];
7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; longhands && i < longhands.length; ++i) {
7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var property = this._livePropertyMap[longhands[i]];
7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (property)
7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                result.push(property);
7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return result;
7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} shorthandProperty
7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    shorthandValue: function(shorthandProperty)
8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._shorthandValues[shorthandProperty];
8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} index
8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {?WebInspector.CSSProperty}
8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    propertyAt: function(index)
8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return (index < this.allProperties.length) ? this.allProperties[index] : null;
8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {number}
8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pastLastSourcePropertyIndex: function()
8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = this.allProperties.length - 1; i >= 0; --i) {
820d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            if (this.allProperties[i].range)
8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return i + 1;
8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return 0;
8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
827a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     * @param {number} index
828a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     * @return {!WebInspector.TextRange}
829a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     */
830a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    _insertionRange: function(index)
831a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    {
832a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        var property = this.propertyAt(index);
833a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        return property && property.range ? property.range.collapseToStart() : this.range.collapseToEnd();
834a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    },
835a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
836a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    /**
8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number=} index
83809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {!WebInspector.CSSProperty}
8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    newBlankProperty: function(index)
8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        index = (typeof index === "undefined") ? this.pastLastSourcePropertyIndex() : index;
843a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        var property = new WebInspector.CSSProperty(this, index, "", "", false, false, true, false, "", this._insertionRange(index));
844d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        property._setActive(true);
845d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return property;
8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} index
8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
852926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {function(?WebInspector.CSSStyleDeclaration)=} userCallback
8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    insertPropertyAt: function(index, name, value, userCallback)
8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?string} error
858a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!CSSAgent.CSSStyle} payload
859aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch         * @this {!WebInspector.CSSStyleDeclaration}
8605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
861926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        function callback(error, payload)
8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
863aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this._cssModel._pendingCommandsMajorState.pop();
8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!userCallback)
8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error) {
8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                console.error(error);
8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                userCallback(null);
87053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            } else
871aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                userCallback(WebInspector.CSSStyleDeclaration.parsePayload(this._cssModel, payload));
8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
874a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (!this.styleSheetId)
875a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch            throw "No stylesheet id";
8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
877aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._cssModel._pendingCommandsMajorState.push(true);
878a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this._cssModel._agent.setPropertyText(this.styleSheetId, this._insertionRange(index), name + ": " + value + ";", callback.bind(this));
8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
884926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {function(?WebInspector.CSSStyleDeclaration)=} userCallback
8855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    appendProperty: function(name, value, userCallback)
8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.insertPropertyAt(this.allProperties.length, name, value, userCallback);
889aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    }
8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
894e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {!CSSAgent.Selector} payload
895e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */
896e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.CSSRuleSelector = function(payload)
897e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){
898e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    this.value = payload.value;
899e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    if (payload.range)
900e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        this.range = WebInspector.TextRange.fromObject(payload.range);
901e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)}
902e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)
903e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)/**
904e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {!CSSAgent.Selector} payload
905e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @return {!WebInspector.CSSRuleSelector}
906e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */
907e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.CSSRuleSelector.parsePayload = function(payload)
908e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){
909e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    return new WebInspector.CSSRuleSelector(payload)
910e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)}
911e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)
912e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.CSSRuleSelector.prototype = {
913e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    /**
914e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)     * @param {!WebInspector.TextRange} oldRange
915e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)     * @param {!WebInspector.TextRange} newRange
916e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)     */
917e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    sourceStyleRuleEdited: function(oldRange, newRange)
918e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    {
919e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        if (!this.range)
920e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)            return;
921e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        this.range = this.range.rebaseAfterTextEdit(oldRange, newRange);
922e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    }
923e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)}
924e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)
925e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)/**
926e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @constructor
927aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.CSSStyleModel} cssModel
928a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!CSSAgent.CSSRule} payload
929a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<number>=} matchingSelectors
9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
931aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.CSSRule = function(cssModel, payload, matchingSelectors)
9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
933aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._cssModel = cssModel;
934a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    this.styleSheetId = payload.styleSheetId;
9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (matchingSelectors)
9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.matchingSelectors = matchingSelectors;
937e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)
938e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    /** @type {!Array.<!WebInspector.CSSRuleSelector>} */
939e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    this.selectors = [];
940e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    for (var i = 0; i < payload.selectorList.selectors.length; ++i) {
941e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        var selectorPayload = payload.selectorList.selectors[i];
942e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        this.selectors.push(WebInspector.CSSRuleSelector.parsePayload(selectorPayload));
943aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    }
944bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    this.selectorText = this.selectors.select("value").join(", ");
945bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)
946bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    var firstRange = this.selectors[0].range;
947bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    if (firstRange) {
948bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)        var lastRange = this.selectors.peekLast().range;
949a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        this.selectorRange = new WebInspector.TextRange(firstRange.startLine, firstRange.startColumn, lastRange.endLine, lastRange.endColumn);
950bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    }
951a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    if (this.styleSheetId) {
952a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        var styleSheetHeader = cssModel.styleSheetHeaderForId(this.styleSheetId);
953a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this.sourceURL = styleSheetHeader.sourceURL;
954a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    }
9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.origin = payload.origin;
956aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this.style = WebInspector.CSSStyleDeclaration.parsePayload(this._cssModel, payload.style);
9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.style.parentRule = this;
9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (payload.media)
959aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this.media = WebInspector.CSSMedia.parseMediaArrayPayload(cssModel, payload.media);
960c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this._setFrameId();
9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
964aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.CSSStyleModel} cssModel
965a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!CSSAgent.CSSRule} payload
966a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<number>=} matchingIndices
967a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!WebInspector.CSSRule}
9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
969aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.CSSRule.parsePayload = function(cssModel, payload, matchingIndices)
9705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
971aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    return new WebInspector.CSSRule(cssModel, payload, matchingIndices);
9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CSSRule.prototype = {
975aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
976aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {string} styleSheetId
977aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.TextRange} oldRange
978aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.TextRange} newRange
979aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
980aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    sourceStyleSheetEdited: function(styleSheetId, oldRange, newRange)
981aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
982a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (this.styleSheetId === styleSheetId) {
983aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            if (this.selectorRange)
984aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                this.selectorRange = this.selectorRange.rebaseAfterTextEdit(oldRange, newRange);
985e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)            for (var i = 0; i < this.selectors.length; ++i)
986e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)                this.selectors[i].sourceStyleRuleEdited(oldRange, newRange);
987aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        }
988aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        if (this.media) {
989aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            for (var i = 0; i < this.media.length; ++i)
990aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                this.media[i].sourceStyleSheetEdited(styleSheetId, oldRange, newRange);
991aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        }
992aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this.style.sourceStyleSheetEdited(styleSheetId, oldRange, newRange);
993aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
994aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
995c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    _setFrameId: function()
996926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
997a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (!this.styleSheetId)
998926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return;
999a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        var styleSheetHeader = this._cssModel.styleSheetHeaderForId(this.styleSheetId);
1000521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        this.frameId = styleSheetHeader.frameId;
100193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    },
100293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
100393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    /**
100493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     * @return {string}
100593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     */
100693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    resourceURL: function()
100793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    {
1008a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (!this.styleSheetId)
100993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            return "";
1010a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        var styleSheetHeader = this._cssModel.styleSheetHeaderForId(this.styleSheetId);
101193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        return styleSheetHeader.resourceURL();
101293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    },
101393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
101493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    /**
1015f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     * @param {number} selectorIndex
101693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     * @return {number}
101793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     */
1018f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    lineNumberInSource: function(selectorIndex)
101993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    {
1020f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        var selector = this.selectors[selectorIndex];
1021a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (!selector || !selector.range || !this.styleSheetId)
102293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            return 0;
1023a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        var styleSheetHeader = this._cssModel.styleSheetHeaderForId(this.styleSheetId);
1024f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        return styleSheetHeader.lineNumberInSource(selector.range.startLine);
102593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    },
102693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
102793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    /**
1028f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)     * @param {number} selectorIndex
102993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     * @return {number|undefined}
103093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     */
1031f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    columnNumberInSource: function(selectorIndex)
103293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    {
1033f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        var selector = this.selectors[selectorIndex];
1034a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (!selector || !selector.range || !this.styleSheetId)
103593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            return undefined;
1036a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        var styleSheetHeader = this._cssModel.styleSheetHeaderForId(this.styleSheetId);
103793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        console.assert(styleSheetHeader);
1038f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)        return styleSheetHeader.columnNumberInSource(selector.range.startLine, selector.range.startColumn);
1039926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
1040926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1041c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /**
1042c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {number} index
1043c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @return {?WebInspector.CSSLocation}
1044c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     */
1045c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    rawSelectorLocation: function(index)
1046c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
1047c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        var lineNumber = this.lineNumberInSource(index);
1048c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        var columnNumber = this.columnNumberInSource(index);
1049c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        return new WebInspector.CSSLocation(this._cssModel.target(), this.styleSheetId || null, this.resourceURL(), lineNumber, columnNumber);
1050c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    },
1051c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
10525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get isUserAgent()
10535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
10545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this.origin === "user-agent";
10555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get isUser()
10585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
10595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this.origin === "user";
10605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get isViaInspector()
10635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
10645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this.origin === "inspector";
10655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get isRegular()
10685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
10695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this.origin === "regular";
10705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
10715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
10745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
10755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?WebInspector.CSSStyleDeclaration} ownerStyle
10765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} index
10775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} name
10785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} value
1079d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {boolean} important
1080d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {boolean} disabled
10815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean} parsedOk
10825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean} implicit
10835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?string=} text
1084a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!CSSAgent.SourceRange=} range
10855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
1086d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.CSSProperty = function(ownerStyle, index, name, value, important, disabled, parsedOk, implicit, text, range)
10875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
10885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.ownerStyle = ownerStyle;
10895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.index = index;
10905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.name = name;
10915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.value = value;
1092d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    this.important = important;
1093d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    this.disabled = disabled;
10945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.parsedOk = parsedOk;
10955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.implicit = implicit;
10965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.text = text;
1097aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this.range = range ? WebInspector.TextRange.fromObject(range) : null;
10985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
10995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
11015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?WebInspector.CSSStyleDeclaration} ownerStyle
11025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} index
1103a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!CSSAgent.CSSProperty} payload
1104a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!WebInspector.CSSProperty}
11055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
11065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CSSProperty.parsePayload = function(ownerStyle, index, payload)
11075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
11085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // The following default field values are used in the payload:
1109d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // important: false
11105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // parsedOk: true
11115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // implicit: false
1112d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // disabled: false
11135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    var result = new WebInspector.CSSProperty(
1114d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        ownerStyle, index, payload.name, payload.value, payload.important || false, payload.disabled || false, ("parsedOk" in payload) ? !!payload.parsedOk : true, !!payload.implicit, payload.text, payload.range);
11155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return result;
11165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
11175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CSSProperty.prototype = {
1119d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
1120aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {string} styleSheetId
1121aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.TextRange} oldRange
1122aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.TextRange} newRange
1123aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
1124aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    sourceStyleSheetEdited: function(styleSheetId, oldRange, newRange)
1125aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
1126a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (this.ownerStyle.styleSheetId !== styleSheetId)
1127aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            return;
1128aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        if (this.range)
1129aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this.range = this.range.rebaseAfterTextEdit(oldRange, newRange);
1130aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
1131aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
1132aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
1133d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {boolean} active
1134d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
1135d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    _setActive: function(active)
1136d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
1137d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        this._active = active;
1138d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
1139d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
11405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get propertyText()
11415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
11425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.text !== undefined)
11435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return this.text;
11445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.name === "")
11465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return "";
1147d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return this.name + ": " + this.value + (this.important ? " !important" : "") + ";";
11485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get isLive()
11515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
11525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this.active || this.styleBased;
11535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get active()
11565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1157d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return typeof this._active === "boolean" && this._active;
11585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get styleBased()
11615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1162d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return !this.range;
11635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get inactive()
11665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1167d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return typeof this._active === "boolean" && !this._active;
11685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
11715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} propertyText
11725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} majorChange
11735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} overwrite
11745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?WebInspector.CSSStyleDeclaration)=} userCallback
11755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
11765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setText: function(propertyText, majorChange, overwrite, userCallback)
11775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
11785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
11795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?WebInspector.CSSStyleDeclaration} style
11805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
11815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function enabledCallback(style)
11825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
11835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (userCallback)
11845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                userCallback(style);
11855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
11865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
11885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?string} error
1189a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!CSSAgent.CSSStyle} stylePayload
119009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.CSSProperty}
11915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
11925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callback(error, stylePayload)
11935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
1194aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this.ownerStyle._cssModel._pendingCommandsMajorState.pop();
11955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!error) {
11965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (majorChange)
1197aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                    this.ownerStyle._cssModel._domModel.markUndoableState();
1198aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                var style = WebInspector.CSSStyleDeclaration.parsePayload(this.ownerStyle._cssModel, stylePayload);
11995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                var newProperty = style.allProperties[this.index];
12005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (newProperty && this.disabled && !propertyText.match(/^\s*$/)) {
12025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    newProperty.setDisabled(false, enabledCallback);
12035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    return;
12045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                }
12055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (userCallback)
12065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    userCallback(style);
12075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            } else {
12085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (userCallback)
12095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    userCallback(null);
12105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
12115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
12125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this.ownerStyle)
12145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            throw "No ownerStyle for property";
12155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1216a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (!this.ownerStyle.styleSheetId)
12175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            throw "No owner style id";
12185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // An index past all the properties adds a new property to the style.
1220aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        var cssModel = this.ownerStyle._cssModel;
1221aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        cssModel._pendingCommandsMajorState.push(majorChange);
1222a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        var range = /** @type {!WebInspector.TextRange} */ (this.range);
1223a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        cssModel._agent.setPropertyText(this.ownerStyle.styleSheetId, overwrite ? range : range.collapseToStart(), propertyText, callback.bind(this));
12245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
12275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} newValue
12285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} majorChange
12295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} overwrite
12305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?WebInspector.CSSStyleDeclaration)=} userCallback
12315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
12325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setValue: function(newValue, majorChange, overwrite, userCallback)
12335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1234d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        var text = this.name + ": " + newValue + (this.important ? " !important" : "") + ";"
12355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.setText(text, majorChange, overwrite, userCallback);
12365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
12395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} disabled
12405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?WebInspector.CSSStyleDeclaration)=} userCallback
12415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
12425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setDisabled: function(disabled, userCallback)
12435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this.ownerStyle && userCallback)
12455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            userCallback(null);
124609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        if (disabled === this.disabled) {
124709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            if (userCallback)
124809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)                userCallback(this.ownerStyle);
124909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            return;
12505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
125109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        if (disabled)
125209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            this.setText("/* " + this.text + " */", true, true, userCallback);
125309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        else
125409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            this.setText(this.text.substring(2, this.text.length - 2).trim(), true, true, userCallback);
12555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
12565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
12575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
12595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
12607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!CSSAgent.MediaQuery} payload
12617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */
12627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.CSSMediaQuery = function(payload)
12637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
12647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    this._active = payload.active;
12657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    this._expressions = [];
12667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    for (var j = 0; j < payload.expressions.length; ++j)
12677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        this._expressions.push(WebInspector.CSSMediaQueryExpression.parsePayload(payload.expressions[j]));
12687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
12697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
12707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci/**
12717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!CSSAgent.MediaQuery} payload
12727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {!WebInspector.CSSMediaQuery}
12737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */
12747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.CSSMediaQuery.parsePayload = function(payload)
12757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
12767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    return new WebInspector.CSSMediaQuery(payload);
12777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
12787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
12797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.CSSMediaQuery.prototype = {
12807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    /**
12817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     * @return {boolean}
12827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     */
12837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    active: function()
12847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    {
12857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return this._active;
12867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    },
12877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
12887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    /**
12897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     * @return {!Array.<!WebInspector.CSSMediaQueryExpression>}
12907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci     */
12917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    expressions: function()
12927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    {
12937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return this._expressions;
12947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    }
12957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
12967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
12977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci/**
12987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @constructor
129976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @param {!CSSAgent.MediaQueryExpression} payload
130076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) */
130176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)WebInspector.CSSMediaQueryExpression = function(payload)
130276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles){
130376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    this._value = payload.value;
130476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    this._unit = payload.unit;
130576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    this._feature = payload.feature;
130676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    this._computedLength = payload.computedLength || null;
130776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)}
130876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
130976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)/**
131076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @param {!CSSAgent.MediaQueryExpression} payload
1311c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @return {!WebInspector.CSSMediaQueryExpression}
131276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) */
131376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)WebInspector.CSSMediaQueryExpression.parsePayload = function(payload)
131476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles){
131576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    return new WebInspector.CSSMediaQueryExpression(payload);
131676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)}
131776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
131876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)WebInspector.CSSMediaQueryExpression.prototype = {
131976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    /**
132076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     * @return {number}
132176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     */
132276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    value: function()
132376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    {
132476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)        return this._value;
132576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    },
132676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
132776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    /**
132876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     * @return {string}
132976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     */
133076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    unit: function()
133176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    {
133276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)        return this._unit;
133376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    },
133476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
133576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    /**
133676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     * @return {string}
133776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     */
133876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    feature: function()
133976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    {
134076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)        return this._feature;
134176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    },
134276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
134376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    /**
134476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     * @return {?number}
134576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)     */
134676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    computedLength: function()
134776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    {
134876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)        return this._computedLength;
134976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    }
135076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)}
135176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
135276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)
135376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)/**
135476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) * @constructor
1355aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.CSSStyleModel} cssModel
1356a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!CSSAgent.CSSMedia} payload
13575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
1358aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.CSSMedia = function(cssModel, payload)
13595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1360aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._cssModel = cssModel
13615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.text = payload.text;
13625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.source = payload.source;
13635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.sourceURL = payload.sourceURL || "";
1364a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    this.range = payload.range ? WebInspector.TextRange.fromObject(payload.range) : null;
13650019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch    this.parentStyleSheetId = payload.parentStyleSheetId;
136676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    this.mediaList = null;
136776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    if (payload.mediaList) {
136876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)        this.mediaList = [];
13697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        for (var i = 0; i < payload.mediaList.length; ++i)
13707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci            this.mediaList.push(WebInspector.CSSMediaQuery.parsePayload(payload.mediaList[i]));
137176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    }
13725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
13735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CSSMedia.Source = {
13755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    LINKED_SHEET: "linkedSheet",
13765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    INLINE_SHEET: "inlineSheet",
13775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    MEDIA_RULE: "mediaRule",
13785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    IMPORT_RULE: "importRule"
13795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
13805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
1382aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.CSSStyleModel} cssModel
1383a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!CSSAgent.CSSMedia} payload
1384a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!WebInspector.CSSMedia}
13855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
1386aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.CSSMedia.parsePayload = function(cssModel, payload)
13870019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch{
1388aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    return new WebInspector.CSSMedia(cssModel, payload);
13890019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch}
13900019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch
13910019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch/**
1392aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.CSSStyleModel} cssModel
1393a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<!CSSAgent.CSSMedia>} payload
1394a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!Array.<!WebInspector.CSSMedia>}
13950019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch */
1396aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.CSSMedia.parseMediaArrayPayload = function(cssModel, payload)
13975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
13980019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch    var result = [];
13990019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch    for (var i = 0; i < payload.length; ++i)
1400aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        result.push(WebInspector.CSSMedia.parsePayload(cssModel, payload[i]));
14010019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch    return result;
1402521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)}
1403521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
1404521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)WebInspector.CSSMedia.prototype = {
1405521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    /**
1406aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {string} styleSheetId
1407aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.TextRange} oldRange
1408aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!WebInspector.TextRange} newRange
1409aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
1410aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    sourceStyleSheetEdited: function(styleSheetId, oldRange, newRange)
1411aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
1412aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        if (this.parentStyleSheetId !== styleSheetId)
1413aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            return;
1414aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        if (this.range)
1415aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this.range = this.range.rebaseAfterTextEdit(oldRange, newRange);
1416aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
1417aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
1418aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
1419521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     * @return {number|undefined}
1420521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     */
1421521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    lineNumberInSource: function()
1422521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    {
1423521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        if (!this.range)
1424521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)            return undefined;
1425521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        var header = this.header();
1426521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        if (!header)
1427521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)            return undefined;
1428521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        return header.lineNumberInSource(this.range.startLine);
1429521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    },
1430521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
1431521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    /**
1432521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     * @return {number|undefined}
1433521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     */
1434521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    columnNumberInSource: function()
1435521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    {
1436521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        if (!this.range)
1437521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)            return undefined;
1438521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        var header = this.header();
1439521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        if (!header)
1440521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)            return undefined;
1441521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        return header.columnNumberInSource(this.range.startLine, this.range.startColumn);
1442521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    },
1443521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
1444521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    /**
1445521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     * @return {?WebInspector.CSSStyleSheetHeader}
1446521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     */
1447521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    header: function()
1448521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    {
1449aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        return this.parentStyleSheetId ? this._cssModel.styleSheetHeaderForId(this.parentStyleSheetId) : null;
1450197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    },
1451197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
1452197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    /**
1453c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @return {?WebInspector.CSSLocation}
1454197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     */
1455c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    rawLocation: function()
1456197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    {
1457c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        if (!this.header() || this.lineNumberInSource() === undefined)
1458197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            return null;
1459c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        var lineNumber = Number(this.lineNumberInSource());
1460c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        return new WebInspector.CSSLocation(this._cssModel.target(), this.header().id, this.sourceURL, lineNumber, this.columnNumberInSource());
1461521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    }
14625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
14635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
14655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
146693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * @implements {WebInspector.ContentProvider}
1467aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.CSSStyleModel} cssModel
1468a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!CSSAgent.CSSStyleSheetHeader} payload
146953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */
1470aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.CSSStyleSheetHeader = function(cssModel, payload)
147153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
1472aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._cssModel = cssModel;
147353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    this.id = payload.styleSheetId;
147453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    this.frameId = payload.frameId;
147553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    this.sourceURL = payload.sourceURL;
147693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    this.hasSourceURL = !!payload.hasSourceURL;
147793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    this.sourceMapURL = payload.sourceMapURL;
147853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    this.origin = payload.origin;
147953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    this.title = payload.title;
148053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    this.disabled = payload.disabled;
148193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    this.isInline = payload.isInline;
148293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    this.startLine = payload.startLine;
148393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    this.startColumn = payload.startColumn;
148453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
148553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
148653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector.CSSStyleSheetHeader.prototype = {
148753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
1488c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @return {!WebInspector.Target}
148953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
1490c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    target: function()
149153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
1492c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        return this._cssModel.target();
149353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
149453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
149553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
1496c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @return {string}
14975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     */
1498c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    resourceURL: function()
14995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    {
1500c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        return this.isViaInspector() ? this._viaInspectorResourceURL() : this.sourceURL;
15015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    },
15025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
15035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    /**
150453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     * @return {string}
150553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
150653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    _viaInspectorResourceURL: function()
150753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
1508a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        var frame = this._cssModel.target().resourceTreeModel.frameForId(this.frameId);
150993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        console.assert(frame);
151093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        var parsedURL = new WebInspector.ParsedURL(frame.url);
151153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        var fakeURL = "inspector://" + parsedURL.host + parsedURL.folderPathComponents;
151253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (!fakeURL.endsWith("/"))
151353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            fakeURL += "/";
151453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        fakeURL += "inspector-stylesheet";
151553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        return fakeURL;
151693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    },
151793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
151893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    /**
1519521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     * @param {number} lineNumberInStyleSheet
1520521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     * @return {number}
1521521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     */
1522521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    lineNumberInSource: function(lineNumberInStyleSheet)
1523521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    {
1524521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        return this.startLine + lineNumberInStyleSheet;
1525521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    },
1526521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
1527521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    /**
1528521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     * @param {number} lineNumberInStyleSheet
1529521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     * @param {number} columnNumberInStyleSheet
1530521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     * @return {number|undefined}
1531521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)     */
1532521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    columnNumberInSource: function(lineNumberInStyleSheet, columnNumberInStyleSheet)
1533521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    {
1534521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        return (lineNumberInStyleSheet ? 0 : this.startColumn) + columnNumberInStyleSheet;
1535521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    },
1536521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
1537521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    /**
153893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     * @override
153909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {string}
154093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     */
154193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    contentURL: function()
154293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    {
15435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return this.resourceURL();
154493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    },
154593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
154693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    /**
154793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     * @override
154809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {!WebInspector.ResourceType}
154993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     */
155093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    contentType: function()
155193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    {
155293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        return WebInspector.resourceTypes.Stylesheet;
155393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    },
155493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
155593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    /**
155609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} text
155709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {string}
155809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
155909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    _trimSourceURL: function(text)
156009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
156109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        var sourceURLRegex = /\n[\040\t]*\/\*[#@][\040\t]sourceURL=[\040\t]*([^\s]*)[\040\t]*\*\/[\040\t]*$/mg;
156209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return text.replace(sourceURLRegex, "");
156309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
156409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
156509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
156693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     * @override
1567e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)     * @param {function(string)} callback
156893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     */
156993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    requestContent: function(callback)
157093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    {
1571aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._cssModel._agent.getStyleSheetText(this.id, textCallback.bind(this));
157293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
157309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
157409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.CSSStyleSheetHeader}
157509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
157693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        function textCallback(error, text)
157793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        {
157893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            if (error) {
1579197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch                WebInspector.console.error("Failed to get text for stylesheet " + this.id + ": " + error);
158093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)                text = "";
158193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)                // Fall through.
158293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            }
158309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            text = this._trimSourceURL(text);
15841e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            callback(text);
158593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        }
158693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    },
158793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
158893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    /**
158993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     * @override
159093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)     */
159193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    searchInContent: function(query, caseSensitive, isRegex, callback)
159293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    {
159393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        function performSearch(content)
159493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        {
159593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)            callback(WebInspector.ContentProvider.performSearchInContent(content, query, caseSensitive, isRegex));
159693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        }
159793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
159893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        // searchInContent should call back later.
159993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        this.requestContent(performSearch);
160009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
160109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
160209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
160309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} newText
160409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {function(?Protocol.Error)} callback
160509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
160609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    setContent: function(newText, callback)
160709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
160809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        newText = this._trimSourceURL(newText);
160909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        if (this.hasSourceURL)
161009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            newText += "\n/*# sourceURL=" + this.sourceURL + " */";
1611aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._cssModel._agent.setStyleSheetText(this.id, newText, callback);
161209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
161353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
16145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1615d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @return {boolean}
16165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1617d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    isViaInspector: function()
16185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1619d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return this.origin === "inspector";
1620c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    }
16215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
16225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
16245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
16255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {CSSAgent.Dispatcher}
1626a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.CSSStyleModel} cssModel
16275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
16285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CSSDispatcher = function(cssModel)
16295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
16305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._cssModel = cssModel;
16315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
16325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.CSSDispatcher.prototype = {
16345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    mediaQueryResultChanged: function()
16355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
16365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._cssModel.mediaQueryResultChanged();
16375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
16385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1640a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!CSSAgent.StyleSheetId} styleSheetId
16415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
16425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    styleSheetChanged: function(styleSheetId)
16435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
16445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._cssModel._fireStyleSheetChanged(styleSheetId);
16455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
16465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1648a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!CSSAgent.CSSStyleSheetHeader} header
164953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
165053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    styleSheetAdded: function(header)
165153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
165253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._cssModel._styleSheetAdded(header);
165353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
165453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
165553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
1656a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!CSSAgent.StyleSheetId} id
165753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
165853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    styleSheetRemoved: function(id)
165953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
166053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._cssModel._styleSheetRemoved(id);
166153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
16625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
16631e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
16641e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)/**
16651e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) * @constructor
1666a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.CSSStyleModel} cssModel
16671e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) */
16681e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)WebInspector.CSSStyleModel.ComputedStyleLoader = function(cssModel)
16691e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){
16701e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    this._cssModel = cssModel;
1671a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    /** @type {!Object.<*, !Array.<function(?WebInspector.CSSStyleDeclaration)>>} */
16721e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    this._nodeIdToCallbackData = {};
16731e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)}
16741e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
16751e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)WebInspector.CSSStyleModel.ComputedStyleLoader.prototype = {
16761e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    /**
1677a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
16781e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)     * @param {function(?WebInspector.CSSStyleDeclaration)} userCallback
16791e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)     */
16801e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    getComputedStyle: function(nodeId, userCallback)
16811e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
16821e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        if (this._nodeIdToCallbackData[nodeId]) {
16831e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            this._nodeIdToCallbackData[nodeId].push(userCallback);
16841e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            return;
16851e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        }
16861e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
16871e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        this._nodeIdToCallbackData[nodeId] = [userCallback];
16881e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
1689aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._cssModel._agent.getComputedStyleForNode(nodeId, resultCallback.bind(this, nodeId));
16901e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
16911e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        /**
16921e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)         * @param {!DOMAgent.NodeId} nodeId
16931e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)         * @param {?Protocol.Error} error
1694a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<!CSSAgent.CSSComputedStyleProperty>} computedPayload
169509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.CSSStyleModel.ComputedStyleLoader}
16961e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)         */
16971e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        function resultCallback(nodeId, error, computedPayload)
16981e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        {
1699aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            var computedStyle = (error || !computedPayload) ? null : WebInspector.CSSStyleDeclaration.parseComputedStylePayload(this._cssModel, computedPayload);
17001e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            var callbacks = this._nodeIdToCallbackData[nodeId];
17011e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
17021e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            // The loader has been reset.
17031e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            if (!callbacks)
17041e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)                return;
17051e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
17061e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            delete this._nodeIdToCallbackData[nodeId];
17071e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            for (var i = 0; i < callbacks.length; ++i)
17081e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)                callbacks[i](computedStyle);
17091e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        }
17101e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    }
17111e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)}
17121e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
17135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
171409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @type {!WebInspector.CSSStyleModel}
17155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
171609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.cssModel;
1717