15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009, 2010 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Joseph Pecoraro
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission.
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @extends {WebInspector.SDKObject}
3507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @param {!WebInspector.DOMModel} domModel
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?WebInspector.DOMDocument} doc
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean} isInShadowTree
38a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!DOMAgent.Node} payload
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
4007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochWebInspector.DOMNode = function(domModel, doc, isInShadowTree, payload) {
41197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    WebInspector.SDKObject.call(this, domModel.target());
4207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    this._domModel = domModel;
43aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._agent = domModel._agent;
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.ownerDocument = doc;
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._isInShadowTree = isInShadowTree;
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.id = payload.nodeId;
4807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    domModel._idToDOMNode[this.id] = this;
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._nodeType = payload.nodeType;
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._nodeName = payload.nodeName;
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._localName = payload.localName;
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._nodeValue = payload.nodeValue;
5306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    this._pseudoType = payload.pseudoType;
5451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    this._shadowRootType = payload.shadowRootType;
55d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    this._frameId = payload.frameId || null;
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._shadowRoots = [];
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._attributes = [];
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._attributesMap = {};
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (payload.attributes)
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._setAttributesPayload(payload.attributes);
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._userProperties = {};
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._descendantUserPropertyCounters = {};
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    this._childNodeCount = payload.childNodeCount || 0;
685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    this._children = null;
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.nextSibling = null;
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.previousSibling = null;
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.firstChild = null;
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.lastChild = null;
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.parentNode = null;
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    if (payload.shadowRoots) {
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < payload.shadowRoots.length; ++i) {
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var root = payload.shadowRoots[i];
7907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            var node = new WebInspector.DOMNode(this._domModel, this.ownerDocument, true, root);
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._shadowRoots.push(node);
815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            node.parentNode = this;
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    if (payload.templateContent) {
8607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._templateContent = new WebInspector.DOMNode(this._domModel, this.ownerDocument, true, payload.templateContent);
875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._templateContent.parentNode = this;
885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    }
89926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (payload.importedDocument) {
9107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._importedDocument = new WebInspector.DOMNode(this._domModel, this.ownerDocument, true, payload.importedDocument);
9209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._importedDocument.parentNode = this;
9309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
9409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (payload.children)
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._setChildrenPayload(payload.children);
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    this._setPseudoElements(payload.pseudoElements);
9906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (payload.contentDocument) {
10107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._contentDocument = new WebInspector.DOMDocument(domModel, payload.contentDocument);
1025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._children = [this._contentDocument];
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._renumber();
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (this._nodeType === Node.ELEMENT_NODE) {
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // HTML and BODY from internal iframes should not overwrite top-level ones.
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.ownerDocument && !this.ownerDocument.documentElement && this._nodeName === "HTML")
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.ownerDocument.documentElement = this;
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.ownerDocument && !this.ownerDocument.body && this._nodeName === "BODY")
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.ownerDocument.body = this;
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    } else if (this._nodeType === Node.DOCUMENT_TYPE_NODE) {
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.publicId = payload.publicId;
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.systemId = payload.systemId;
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.internalSubset = payload.internalSubset;
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    } else if (this._nodeType === Node.ATTRIBUTE_NODE) {
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.name = payload.name;
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.value = payload.value;
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
122d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/**
123d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @enum {string}
124d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */
12506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)WebInspector.DOMNode.PseudoElementNames = {
12606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    Before: "before",
12706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    After: "after"
12806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)}
12906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
130d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/**
131d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @enum {string}
132d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */
13351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)WebInspector.DOMNode.ShadowRootTypes = {
13451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    UserAgent: "user-agent",
13551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    Author: "author"
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMNode.prototype = {
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
140aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @return {!WebInspector.DOMModel}
141aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
142aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    domModel: function()
143aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
144aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        return this._domModel;
145aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
146aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
147aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
148a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {?Array.<!WebInspector.DOMNode>}
1495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     */
1505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    children: function()
1515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    {
1525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return this._children ? this._children.slice() : null;
1535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    },
1545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    /**
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    hasAttributes: function()
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._attributes.length > 0;
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     * @return {number}
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    childNodeCount: function()
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return this._childNodeCount;
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    hasShadowRoots: function()
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return !!this._shadowRoots.length;
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
180a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Array.<!WebInspector.DOMNode>}
1815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     */
1825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    shadowRoots: function()
1835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    {
1845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return this._shadowRoots.slice();
1855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    },
1865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    /**
18809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {?WebInspector.DOMNode}
1895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     */
1905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    templateContent: function()
1915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    {
1925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return this._templateContent;
1935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    },
1945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    /**
19609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {?WebInspector.DOMNode}
19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
19809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    importedDocument: function()
19909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    {
20009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return this._importedDocument;
20109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    },
20209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
20309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {number}
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    nodeType: function()
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._nodeType;
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    nodeName: function()
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._nodeName;
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
22006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @return {string|undefined}
22106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
22206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    pseudoType: function()
22306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    {
22406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        return this._pseudoType;
22506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    },
22606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
22706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
22806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @return {boolean}
22906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
23006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    hasPseudoElements: function()
23106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    {
23206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        return Object.keys(this._pseudoElements).length !== 0;
23306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    },
23406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
23506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
236a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Object.<string, !WebInspector.DOMNode>}
23706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
23806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    pseudoElements: function()
23906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    {
24006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        return this._pseudoElements;
24106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    },
24206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
24306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isInShadowTree: function()
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._isInShadowTree;
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
252d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @return {?WebInspector.DOMNode}
253d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
254d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    ancestorUserAgentShadowRoot: function()
255d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
256d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (!this._isInShadowTree)
257d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            return null;
258d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
259d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        var current = this;
260d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        while (!current.isShadowRoot())
261d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            current = current.parentNode;
262d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return current.shadowRootType() === WebInspector.DOMNode.ShadowRootTypes.UserAgent ? current : null;
263d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
264d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
265d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
266d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @return {boolean}
267d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
268d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    isShadowRoot: function()
269d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
270d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return !!this._shadowRootType;
271d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
272d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
273d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
27451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)     * @return {?string}
27551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)     */
27651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    shadowRootType: function()
27751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    {
27851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        return this._shadowRootType || null;
27951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    },
28051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)
28151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    /**
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    nodeNameInCorrectCase: function()
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
28607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        var shadowRootType = this.shadowRootType();
28707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        if (shadowRootType)
28807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            return "#shadow-root" + (shadowRootType === WebInspector.DOMNode.ShadowRootTypes.UserAgent ? " (user-agent)" : "");
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this.isXMLNode() ? this.nodeName() : this.nodeName().toLowerCase();
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
294f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)     * @param {function(?Protocol.Error, number)=} callback
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setNodeName: function(name, callback)
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
298aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.setNodeName(this.id, name, this._domModel._markRevision(this, callback));
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    localName: function()
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._localName;
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    nodeValue: function()
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._nodeValue;
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setNodeValue: function(value, callback)
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
323aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.setNodeValue(this.id, value, this._domModel._markRevision(this, callback));
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getAttribute: function(name)
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var attr = this._attributesMap[name];
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return attr ? attr.value : undefined;
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} text
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setAttribute: function(name, text, callback)
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
343aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.setAttributesAsText(this.id, text, name, this._domModel._markRevision(this, callback));
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setAttributeValue: function(name, value, callback)
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
353aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.setAttributeValue(this.id, name, value, this._domModel._markRevision(this, callback));
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
357a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Object}
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    attributes: function()
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._attributes;
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    removeAttribute: function(name, callback)
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
37109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {?Protocol.Error} error
37209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.DOMNode}
3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function mycallback(error)
3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!error) {
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                delete this._attributesMap[name];
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                for (var i = 0;  i < this._attributes.length; ++i) {
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    if (this._attributes[i].name === name) {
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                        this._attributes.splice(i, 1);
3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                        break;
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    }
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                }
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
386aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this._domModel._markRevision(this, callback)(error);
3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
388aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.removeAttribute(this.id, name, mycallback.bind(this));
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
392a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?Array.<!WebInspector.DOMNode>)=} callback
3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getChildNodes: function(callback)
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        if (this._children) {
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (callback)
3985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)                callback(this.children());
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @this {WebInspector.DOMNode}
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function mycallback(error)
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
40806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            if (callback)
40906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)                callback(error ? null : this.children());
4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
412aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.requestChildNodes(this.id, undefined, mycallback.bind(this));
413926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
414926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
415926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
416926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {number} depth
417a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?Array.<!WebInspector.DOMNode>)=} callback
418926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
419926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    getSubtree: function(depth, callback)
420926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
421926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        /**
422926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)         * @this {WebInspector.DOMNode}
423926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)         * @param {?Protocol.Error} error
424926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)         */
425926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        function mycallback(error)
426926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        {
427926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (callback)
4285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)                callback(error ? null : this._children);
429926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
430926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
431aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.requestChildNodes(this.id, depth, mycallback.bind(this));
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
435f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)     * @param {function(?Protocol.Error, string)=} callback
4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getOuterHTML: function(callback)
4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
439aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.getOuterHTML(this.id, callback);
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} html
4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setOuterHTML: function(html, callback)
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
448aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.setOuterHTML(this.id, html, this._domModel._markRevision(this, callback));
4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
452a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?Protocol.Error, !DOMAgent.NodeId=)=} callback
4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    removeNode: function(callback)
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
456aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.removeNode(this.id, this._domModel._markRevision(this, callback));
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
459c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /**
460c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {function(?string)=} callback
461c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     */
462c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    copyNode: function(callback)
4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function copy(error, text)
4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!error)
4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                InspectorFrontendHost.copyText(text);
468c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            if (callback)
469c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)                callback(error ? null : text);
4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
471aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.getOuterHTML(this.id, copy);
4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
475926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {string} objectGroupId
476aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {function(?Array.<!WebInspector.DOMModel.EventListener>)} callback
4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
478926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    eventListeners: function(objectGroupId, callback)
4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
480aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        var target = this.target();
481aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
482aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        /**
483aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch         * @param {?Protocol.Error} error
484aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch         * @param {!Array.<!DOMAgent.EventListener>} payloads
485aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch         */
486aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        function mycallback(error, payloads)
487aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        {
488aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            if (error) {
489aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                callback(null);
490aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                return;
491aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            }
492aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            callback(payloads.map(function(payload) {
493aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                return new WebInspector.DOMModel.EventListener(target, payload);
494aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            }));
495aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        }
496aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.getEventListenersForNode(this.id, objectGroupId, mycallback);
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    path: function()
5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
50407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        /**
50507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         * @param {?WebInspector.DOMNode} node
50607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         */
50707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        function canPush(node)
50807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        {
50907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            return node && ("index" in node || (node.isShadowRoot() && node.parentNode)) && node._nodeName.length;
51007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        }
51107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var path = [];
5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = this;
51407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        while (canPush(node)) {
51507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            var index = typeof node.index === "number" ? node.index : (node.shadowRootType() === WebInspector.DOMNode.ShadowRootTypes.UserAgent ? "u" : "a");
51607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            path.push([index, node._nodeName]);
5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            node = node.parentNode;
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        path.reverse();
5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return path.join(",");
5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
524a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} node
5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isAncestor: function(node)
5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!node)
5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return false;
5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var currentNode = node.parentNode;
5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        while (currentNode) {
5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (this === currentNode)
5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return true;
5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            currentNode = currentNode.parentNode;
5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
542a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} descendant
5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isDescendant: function(descendant)
5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return descendant !== null && descendant.isAncestor(this);
5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
551d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @return {?PageAgent.FrameId}
552d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     */
553d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    frameId: function()
554d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    {
555d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        var node = this;
556d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        while (!node._frameId && node.parentNode)
557d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            node = node.parentNode;
558d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return node._frameId;
559d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    },
560d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
561d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    /**
562a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<string>} attrs
5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _setAttributesPayload: function(attrs)
5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var attributesChanged = !this._attributes || attrs.length !== this._attributes.length * 2;
5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var oldAttributesMap = this._attributesMap || {};
5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._attributes = [];
5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._attributesMap = {};
5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < attrs.length; i += 2) {
5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var name = attrs[i];
5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var value = attrs[i + 1];
5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._addAttribute(name, value);
5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (attributesChanged)
5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                continue;
5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!oldAttributesMap[name] || oldAttributesMap[name].value !== value)
5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)              attributesChanged = true;
5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return attributesChanged;
5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
588a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} prev
589a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} payload
590a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.DOMNode}
5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _insertChild: function(prev, payload)
5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
59407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        var node = new WebInspector.DOMNode(this._domModel, this.ownerDocument, this._isInShadowTree, payload);
5955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._children.splice(this._children.indexOf(prev) + 1, 0, node);
5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._renumber();
5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return node;
5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
601a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} node
6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _removeChild: function(node)
6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
60506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        if (node.pseudoType()) {
60606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            delete this._pseudoElements[node.pseudoType()];
60706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        } else {
60806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            var shadowRootIndex = this._shadowRoots.indexOf(node);
60906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            if (shadowRootIndex !== -1)
61006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)                this._shadowRoots.splice(shadowRootIndex, 1);
61106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            else
61206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)                this._children.splice(this._children.indexOf(node), 1);
61306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        }
6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        node.parentNode = null;
6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        node._updateChildUserPropertyCountsOnRemoval(this);
6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._renumber();
6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
620a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DOMAgent.Node>} payloads
6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _setChildrenPayload: function(payloads)
6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // We set children in the constructor.
6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._contentDocument)
6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._children = [];
6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < payloads.length; ++i) {
6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var payload = payloads[i];
63107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            var node = new WebInspector.DOMNode(this._domModel, this.ownerDocument, this._isInShadowTree, payload);
6325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            this._children.push(node);
6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._renumber();
6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
63706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
638a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DOMAgent.Node>|undefined} payloads
63906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
64006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    _setPseudoElements: function(payloads)
64106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    {
64206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this._pseudoElements = {};
64306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        if (!payloads)
64406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            return;
64506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
64606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        for (var i = 0; i < payloads.length; ++i) {
64707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            var node = new WebInspector.DOMNode(this._domModel, this.ownerDocument, this._isInShadowTree, payloads[i]);
64806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            node.parentNode = this;
64906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            this._pseudoElements[node.pseudoType()] = node;
65006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        }
65106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    },
65206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _renumber: function()
6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._childNodeCount = this._children.length;
6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._childNodeCount == 0) {
6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.firstChild = null;
6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.lastChild = null;
6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
6615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this.firstChild = this._children[0];
6625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this.lastChild = this._children[this._childNodeCount - 1];
6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < this._childNodeCount; ++i) {
6645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            var child = this._children[i];
6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            child.index = i;
6665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            child.nextSibling = i + 1 < this._childNodeCount ? this._children[i + 1] : null;
6675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            child.previousSibling = i - 1 >= 0 ? this._children[i - 1] : null;
6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            child.parentNode = this;
6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _addAttribute: function(name, value)
6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var attr = {
6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            name: name,
6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            value: value,
6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            _node: this
6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        };
6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._attributesMap[name] = attr;
6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._attributes.push(attr);
6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _setAttribute: function(name, value)
6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var attr = this._attributesMap[name];
6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (attr)
6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            attr.value = value;
6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._addAttribute(name, value);
6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _removeAttribute: function(name)
7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var attr = this._attributesMap[name];
7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (attr) {
7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._attributes.remove(attr);
7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._attributesMap[name];
7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
713a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} targetNode
7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {?WebInspector.DOMNode} anchorNode
715a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?Protocol.Error, !DOMAgent.NodeId=)=} callback
7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
717c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    copyTo: function(targetNode, anchorNode, callback)
718c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
719c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._agent.copyTo(this.id, targetNode.id, anchorNode ? anchorNode.id : undefined, this._domModel._markRevision(this, callback));
720c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    },
721c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
722c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /**
723c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {!WebInspector.DOMNode} targetNode
724c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {?WebInspector.DOMNode} anchorNode
725c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {function(?Protocol.Error, !DOMAgent.NodeId=)=} callback
726c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     */
7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    moveTo: function(targetNode, anchorNode, callback)
7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
729aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.moveTo(this.id, targetNode.id, anchorNode ? anchorNode.id : undefined, this._domModel._markRevision(this, callback));
7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isXMLNode: function()
7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return !!this.ownerDocument && !!this.ownerDocument.xmlVersion;
7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _updateChildUserPropertyCountsOnRemoval: function(parentNode)
7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var result = {};
7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._userProperties) {
7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var name in this._userProperties)
7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                result[name] = (result[name] || 0) + 1;
7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._descendantUserPropertyCounters) {
7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var name in this._descendantUserPropertyCounters) {
7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                var counter = this._descendantUserPropertyCounters[name];
7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                result[name] = (result[name] || 0) + counter;
7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var name in result)
7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            parentNode._updateDescendantUserPropertyCount(name, -result[name]);
7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _updateDescendantUserPropertyCount: function(name, delta)
7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._descendantUserPropertyCounters.hasOwnProperty(name))
7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._descendantUserPropertyCounters[name] = 0;
7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._descendantUserPropertyCounters[name] += delta;
7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._descendantUserPropertyCounters[name])
7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._descendantUserPropertyCounters[name];
7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.parentNode)
7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.parentNode._updateDescendantUserPropertyCount(name, delta);
7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setUserProperty: function(name, value)
7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (value === null) {
7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.removeUserProperty(name);
7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.parentNode && !this._userProperties.hasOwnProperty(name))
7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.parentNode._updateDescendantUserPropertyCount(name, 1);
7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._userProperties[name] = value;
7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    removeUserProperty: function(name)
7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._userProperties.hasOwnProperty(name))
7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._userProperties[name];
7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.parentNode)
7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.parentNode._updateDescendantUserPropertyCount(name, -1);
7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
79309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
79409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} name
79509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {?T}
79609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @template T
79709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getUserProperty: function(name)
7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
80009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return (this._userProperties && this._userProperties[name]) || null;
8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
80309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
80409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {string} name
80509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {number}
80609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    descendantUserPropertyCount: function(name)
8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._descendantUserPropertyCounters && this._descendantUserPropertyCounters[name] ? this._descendantUserPropertyCounters[name] : 0;
8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} url
8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {?string}
8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    resolveURL: function(url)
8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!url)
8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return url;
8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var frameOwnerCandidate = this; frameOwnerCandidate; frameOwnerCandidate = frameOwnerCandidate.parentNode) {
8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (frameOwnerCandidate.baseURL)
8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return WebInspector.ParsedURL.completeURL(frameOwnerCandidate.baseURL, url);
8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return null;
825aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
826aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
827aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
828aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {string=} mode
829aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {!RuntimeAgent.RemoteObjectId=} objectId
830aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
831aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    highlight: function(mode, objectId)
832aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
833aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._domModel.highlightDOMNode(this.id, mode, objectId);
834aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
835aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
836aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    highlightForTwoSeconds: function()
837aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
838aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._domModel.highlightDOMNodeForTwoSeconds(this.id);
839aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
840aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
841aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
842aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {string=} objectGroup
843aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @param {function(?WebInspector.RemoteObject)=} callback
844aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
845aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    resolveToObject: function(objectGroup, callback)
846aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
847aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.resolveNode(this.id, objectGroup, mycallback.bind(this));
848aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
849aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        /**
850aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch         * @param {?Protocol.Error} error
851aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch         * @param {!RuntimeAgent.RemoteObject} object
852aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch         * @this {WebInspector.DOMNode}
853aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch         */
854aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        function mycallback(error, object)
855aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        {
856aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            if (!callback)
857aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                return;
858aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
859aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            if (error || !object)
860aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                callback(null);
861aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            else
862aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch                callback(this.target().runtimeModel.createRemoteObject(object));
863aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        }
864aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
865aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
866a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    /**
867a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     * @param {function(?DOMAgent.BoxModel)} callback
868a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     */
869a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    boxModel: function(callback)
870a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    {
871f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu        this._agent.getBoxModel(this.id, this._domModel._wrapClientCallback(callback));
872a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    },
873a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
874197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    __proto__: WebInspector.SDKObject.prototype
875197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch}
876197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
877197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch/**
878197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.Target} target
879197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {number} backendNodeId
880197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @constructor
881197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */
882197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.DeferredDOMNode = function(target, backendNodeId)
883197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{
884197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    this._target = target;
885197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    this._backendNodeId = backendNodeId;
886197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch}
887197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
888197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.DeferredDOMNode.prototype = {
889197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    /**
890197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {function(?WebInspector.DOMNode)} callback
891197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     */
892197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    resolve: function(callback)
893197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    {
894197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this._target.domModel.pushNodesByBackendIdsToFrontend([this._backendNodeId], onGotNode.bind(this));
895197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
896197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        /**
897197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch         * @param {?Array.<number>} nodeIds
898197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch         * @this {WebInspector.DeferredDOMNode}
899197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch         */
900197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        function onGotNode(nodeIds)
901197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        {
902197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            if (!nodeIds || !nodeIds[0]) {
903197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch                callback(null);
904197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch                return;
905197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            }
906197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            callback(this._target.domModel.nodeForId(nodeIds[0]));
907197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        }
908197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    }
9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.DOMNode}
9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
91407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @param {!WebInspector.DOMModel} domModel
915a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!DOMAgent.Node} payload
9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
91707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochWebInspector.DOMDocument = function(domModel, payload)
9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
91907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    WebInspector.DOMNode.call(this, domModel, this, false, payload);
9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.documentURL = payload.documentURL || "";
92109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    this.baseURL = payload.baseURL || "";
9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.xmlVersion = payload.xmlVersion;
9235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._listeners = {};
9245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMDocument.prototype = {
9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.DOMNode.prototype
9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
932c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @extends {WebInspector.SDKModel}
933aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.Target} target
9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
935aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.DOMModel = function(target) {
936c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    WebInspector.SDKModel.call(this, WebInspector.DOMModel, target);
937aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
938aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._agent = target.domAgent();
939aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
940e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    /** @type {!Object.<number, !WebInspector.DOMNode>} */
9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._idToDOMNode = {};
942e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    /** @type {?WebInspector.DOMDocument} */
9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._document = null;
944e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    /** @type {!Object.<number, boolean>} */
9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._attributeLoadNodeIds = {};
946a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    target.registerDOMDispatcher(new WebInspector.DOMDispatcher(this));
947c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
948aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._defaultHighlighter = new WebInspector.DefaultDOMNodeHighlighter(this._agent);
949c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    this._highlighter = this._defaultHighlighter;
950197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
9517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (Runtime.experiments.isEnabled("disableAgentsWhenProfile"))
952e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        WebInspector.profilingLock().addEventListener(WebInspector.Lock.Events.StateChanged, this._profilingStateChanged, this);
953197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
954f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    this._agent.enable();
9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
95707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochWebInspector.DOMModel.Events = {
9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    AttrModified: "AttrModified",
9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    AttrRemoved: "AttrRemoved",
9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CharacterDataModified: "CharacterDataModified",
9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    NodeInserted: "NodeInserted",
962197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    NodeInspected: "NodeInspected",
9635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    NodeRemoved: "NodeRemoved",
9645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DocumentUpdated: "DocumentUpdated",
9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ChildNodeCountUpdated: "ChildNodeCountUpdated",
9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    UndoRedoRequested: "UndoRedoRequested",
96753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    UndoRedoCompleted: "UndoRedoCompleted",
9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
97007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochWebInspector.DOMModel.prototype = {
971197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    _profilingStateChanged: function()
972197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    {
973e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        if (WebInspector.profilingLock().isAcquired())
974197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            this._agent.disable();
975197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        else
976197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            this._agent.enable();
977197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    },
978197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
980a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!WebInspector.DOMDocument)=} callback
9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestDocument: function(callback)
9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._document) {
9855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (callback)
9865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(this._document);
9875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
9885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._pendingDocumentRequestCallbacks) {
9915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._pendingDocumentRequestCallbacks.push(callback);
9925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
9935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
9945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pendingDocumentRequestCallbacks = [callback];
9965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
99807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         * @this {WebInspector.DOMModel}
9995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
1000a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!DOMAgent.Node} root
10015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
10025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function onDocumentAvailable(error, root)
10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!error)
10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this._setDocument(root);
10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var i = 0; i < this._pendingDocumentRequestCallbacks.length; ++i) {
10085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                var callback = this._pendingDocumentRequestCallbacks[i];
10095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (callback)
10105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    callback(this._document);
10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
10125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._pendingDocumentRequestCallbacks;
10135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
10145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1015aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.getDocument(onDocumentAvailable.bind(this));
10165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1019a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {?WebInspector.DOMDocument}
10205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
10215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    existingDocument: function()
10225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
10235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._document;
10245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1027a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!RuntimeAgent.RemoteObjectId} objectId
1028a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     * @param {function(?WebInspector.DOMNode)=} callback
10295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
10305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pushNodeToFrontend: function(objectId, callback)
10315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1032a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        /**
1033a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch         * @param {?DOMAgent.NodeId} nodeId
1034a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch         * @this {!WebInspector.DOMModel}
1035a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch         */
1036a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        function mycallback(nodeId)
1037a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        {
1038a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch            callback(nodeId ? this.nodeForId(nodeId) : null);
1039a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        }
1040a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this._dispatchWhenDocumentAvailable(this._agent.requestNode.bind(this._agent, objectId), mycallback.bind(this));
10415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
10445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} path
10453c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch     * @param {function(?number)=} callback
10465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
10475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pushNodeByPathToFrontend: function(path, callback)
10485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1049aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._dispatchWhenDocumentAvailable(this._agent.pushNodeByPathToFrontend.bind(this._agent, path), callback);
10505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1053d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {!Array.<number>} backendNodeIds
1054d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)     * @param {function(?Array.<number>)=} callback
1055e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)     */
1056d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    pushNodesByBackendIdsToFrontend: function(backendNodeIds, callback)
1057e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    {
1058aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._dispatchWhenDocumentAvailable(this._agent.pushNodesByBackendIdsToFrontend.bind(this._agent, backendNodeIds), callback);
1059e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    },
1060e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)
1061e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    /**
1062a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!T)=} callback
1063a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {function(?Protocol.Error, !T=)|undefined}
10643c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch     * @template T
10655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
10665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _wrapClientCallback: function(callback)
10675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
10685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!callback)
10695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
10705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
10715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
1072a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!T=} result
1073a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @template T
10745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
10755d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        var wrapper = function(error, result)
10765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
10775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            // Caller is responsible for handling the actual error.
10785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(error ? null : result);
10795d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        };
10805d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        return wrapper;
10815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1084a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(function(?Protocol.Error, !T=)=)} func
1085a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!T)=} callback
10863c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch     * @template T
10875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
10885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _dispatchWhenDocumentAvailable: function(func, callback)
10895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
10903c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        var callbackWrapper = this._wrapClientCallback(callback);
10915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
109209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
109307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         * @this {WebInspector.DOMModel}
109409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
10955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function onDocumentAvailable()
10965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
10975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (this._document)
10985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                func(callbackWrapper);
10995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            else {
11005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (callbackWrapper)
11015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    callbackWrapper("No document");
11025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
11035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
11045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.requestDocument(onDocumentAvailable.bind(this));
11055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1108a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
11095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
11105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
11115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
11125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _attributeModified: function(nodeId, name, value)
11135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
11145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = this._idToDOMNode[nodeId];
11155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!node)
11165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
11175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        node._setAttribute(name, value);
111907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.AttrModified, { node: node, name: name });
11205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1123a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
11245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
11255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
11265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _attributeRemoved: function(nodeId, name)
11275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
11285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = this._idToDOMNode[nodeId];
11295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!node)
11305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
11315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        node._removeAttribute(name);
113207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.AttrRemoved, { node: node, name: name });
11335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1136a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DOMAgent.NodeId>} nodeIds
11375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
11385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _inlineStyleInvalidated: function(nodeIds)
11395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
11405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < nodeIds.length; ++i)
11415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._attributeLoadNodeIds[nodeIds[i]] = true;
11425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if ("_loadNodeAttributesTimeout" in this)
11435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
114409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        this._loadNodeAttributesTimeout = setTimeout(this._loadNodeAttributes.bind(this), 20);
11455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _loadNodeAttributes: function()
11485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
11495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
115007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         * @this {WebInspector.DOMModel}
1151a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!DOMAgent.NodeId} nodeId
11525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
1153a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<string>} attributes
11545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
11555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callback(nodeId, error, attributes)
11565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
11575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error) {
11585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                // We are calling _loadNodeAttributes asynchronously, it is ok if node is not found.
11595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
11605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
11615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var node = this._idToDOMNode[nodeId];
11625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (node) {
11635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (node._setAttributesPayload(attributes))
116407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch                    this.dispatchEventToListeners(WebInspector.DOMModel.Events.AttrModified, { node: node, name: "style" });
11655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
11665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
11675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._loadNodeAttributesTimeout;
11695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var nodeId in this._attributeLoadNodeIds) {
11715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var nodeIdAsNumber = parseInt(nodeId, 10);
1172aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this._agent.getAttributes(nodeIdAsNumber, callback.bind(this, nodeIdAsNumber));
11735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
11745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._attributeLoadNodeIds = {};
11755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1178a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
11795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} newValue
11805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
11815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _characterDataModified: function(nodeId, newValue)
11825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
11835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = this._idToDOMNode[nodeId];
11845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        node._nodeValue = newValue;
118507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.CharacterDataModified, node);
11865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1189a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
1190a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {?WebInspector.DOMNode}
11915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
11925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    nodeForId: function(nodeId)
11935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1194a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        return this._idToDOMNode[nodeId] || null;
11955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _documentUpdated: function()
11985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
11995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._setDocument(null);
12005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1203a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {?DOMAgent.Node} payload
12045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
12055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _setDocument: function(payload)
12065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._idToDOMNode = {};
12085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (payload && "nodeId" in payload)
12095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._document = new WebInspector.DOMDocument(this, payload);
12105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
12115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._document = null;
121207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.DocumentUpdated, this._document);
12135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1216a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} payload
12175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
12185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _setDetachedRoot: function(payload)
12195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (payload.nodeName === "#document")
12215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            new WebInspector.DOMDocument(this, payload);
12225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
12235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            new WebInspector.DOMNode(this, null, false, payload);
12245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1227a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1228a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DOMAgent.Node>} payloads
12295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
12305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _setChildNodes: function(parentId, payloads)
12315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!parentId && payloads.length) {
12335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._setDetachedRoot(payloads[0]);
12345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
12355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
12365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var parent = this._idToDOMNode[parentId];
12385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        parent._setChildrenPayload(payloads);
12395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1242a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
12435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} newValue
12445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
12455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _childNodeCountUpdated: function(nodeId, newValue)
12465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = this._idToDOMNode[nodeId];
12485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        node._childNodeCount = newValue;
124907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.ChildNodeCountUpdated, node);
12505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1253a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1254a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} prevId
1255a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} payload
12565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
12575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _childNodeInserted: function(parentId, prevId, payload)
12585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var parent = this._idToDOMNode[parentId];
12605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var prev = this._idToDOMNode[prevId];
12615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = parent._insertChild(prev, payload);
12625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._idToDOMNode[node.id] = node;
126307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.NodeInserted, node);
12645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1267a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1268a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
12695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
12705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _childNodeRemoved: function(parentId, nodeId)
12715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var parent = this._idToDOMNode[parentId];
12735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = this._idToDOMNode[nodeId];
12745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        parent._removeChild(node);
12755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._unbind(node);
127607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.NodeRemoved, {node: node, parent: parent});
12775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1280a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} hostId
1281a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} root
12825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     */
12835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    _shadowRootPushed: function(hostId, root)
12845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    {
12855267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        var host = this._idToDOMNode[hostId];
12865267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        if (!host)
12875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            return;
12885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        var node = new WebInspector.DOMNode(this, host.ownerDocument, true, root);
12895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        node.parentNode = host;
12905267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._idToDOMNode[node.id] = node;
12915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        host._shadowRoots.push(node);
129207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.NodeInserted, node);
12935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    },
12945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
12955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    /**
1296a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} hostId
1297a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} rootId
12985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
12995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    _shadowRootPopped: function(hostId, rootId)
13005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
13015267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        var host = this._idToDOMNode[hostId];
13025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        if (!host)
13035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            return;
13045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        var root = this._idToDOMNode[rootId];
13055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        if (!root)
13065267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            return;
130706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        host._removeChild(root);
13085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._unbind(root);
130907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.NodeRemoved, {node: root, parent: host});
13105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
13115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1313a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1314a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} pseudoElement
13159bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)     */
13169bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    _pseudoElementAdded: function(parentId, pseudoElement)
13179bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    {
131806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var parent = this._idToDOMNode[parentId];
131906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        if (!parent)
132006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            return;
132106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var node = new WebInspector.DOMNode(this, parent.ownerDocument, false, pseudoElement);
132206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        node.parentNode = parent;
132306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this._idToDOMNode[node.id] = node;
132406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        console.assert(!parent._pseudoElements[node.pseudoType()]);
132506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        parent._pseudoElements[node.pseudoType()] = node;
132607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.NodeInserted, node);
13279bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    },
13289bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)
13299bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    /**
1330a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1331a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} pseudoElementId
13329bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)     */
13339bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    _pseudoElementRemoved: function(parentId, pseudoElementId)
13349bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    {
133506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var parent = this._idToDOMNode[parentId];
133606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        if (!parent)
133706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            return;
133806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var pseudoElement = this._idToDOMNode[pseudoElementId];
133906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        if (!pseudoElement)
134006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            return;
134106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        parent._removeChild(pseudoElement);
134206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this._unbind(pseudoElement);
134307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.NodeRemoved, {node: pseudoElement, parent: parent});
13449bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    },
13459bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)
13469bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    /**
1347a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} node
13485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
13495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _unbind: function(node)
13505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
13515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._idToDOMNode[node.id];
13525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        for (var i = 0; node._children && i < node._children.length; ++i)
13535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            this._unbind(node._children[i]);
13545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        for (var i = 0; i < node._shadowRoots.length; ++i)
13555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            this._unbind(node._shadowRoots[i]);
135606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var pseudoElements = node.pseudoElements();
135706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        for (var id in pseudoElements)
135806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            this._unbind(pseudoElements[id]);
13595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        if (node._templateContent)
13605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            this._unbind(node._templateContent);
13615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
13625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1364a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
136553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
136653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    _inspectNodeRequested: function(nodeId)
136753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
1368197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.NodeInspected, this.nodeForId(nodeId));
136953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
137053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
137153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
13725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} query
1373c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {boolean} includeUserAgentShadowDOM
13745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(number)} searchCallback
13755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1376c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    performSearch: function(query, includeUserAgentShadowDOM, searchCallback)
13775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
13785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.cancelSearch();
13795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
13815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
13825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {string} searchId
13835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {number} resultsCount
138407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         * @this {WebInspector.DOMModel}
13855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
13865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callback(error, searchId, resultsCount)
13875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
13885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._searchId = searchId;
13895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            searchCallback(resultsCount);
13905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1391c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        this._agent.performSearch(query, includeUserAgentShadowDOM, callback.bind(this));
13925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
13935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1395197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @param {string} query
1396c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @param {boolean} includeUserAgentShadowDOM
1397197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     * @return {!Promise.<number>}
1398197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch     */
1399c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    performSearchPromise: function(query, includeUserAgentShadowDOM)
1400197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    {
1401197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return new Promise(performSearch.bind(this));
1402197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
1403197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        /**
1404197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch         * @param {function(number)} resolve
1405197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch         * @this {WebInspector.DOMModel}
1406197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch         */
1407197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        function performSearch(resolve)
1408197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        {
1409c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            this._agent.performSearch(query, includeUserAgentShadowDOM, callback.bind(this));
1410197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
1411197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            /**
1412197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch             * @param {?Protocol.Error} error
1413197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch             * @param {string} searchId
1414197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch             * @param {number} resultsCount
1415197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch             * @this {WebInspector.DOMModel}
1416197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch             */
1417197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            function callback(error, searchId, resultsCount)
1418197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            {
1419c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)                if (!error)
1420c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)                    this._searchId = searchId;
1421197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch                resolve(error ? 0 : resultsCount);
1422197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            }
1423197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        }
1424197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    },
1425197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
1426197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    /**
14275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} index
142809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {?function(?WebInspector.DOMNode)} callback
14295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
14305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    searchResult: function(index, callback)
14315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1432a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        if (this._searchId)
1433aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this._agent.getSearchResults(this._searchId, index, index + 1, searchResultsCallback.bind(this));
1434a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        else
1435a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            callback(null);
14365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1437a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        /**
1438a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {?Protocol.Error} error
1439a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<number>} nodeIds
144007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         * @this {WebInspector.DOMModel}
1441a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         */
1442a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        function searchResultsCallback(error, nodeIds)
1443a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        {
1444a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            if (error) {
1445a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                console.error(error);
1446a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                callback(null);
1447a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                return;
14485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
1449a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            if (nodeIds.length != 1)
1450a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                return;
1451a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
145209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            callback(this.nodeForId(nodeIds[0]));
1453a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        }
14545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
14555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    cancelSearch: function()
14575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
14585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._searchId) {
1459aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this._agent.discardSearchResults(this._searchId);
14605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._searchId;
14615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
14625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
14635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1465a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
14665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} selectors
14675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?DOMAgent.NodeId)=} callback
14685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
14695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    querySelector: function(nodeId, selectors, callback)
14705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1471aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.querySelector(nodeId, selectors, this._wrapClientCallback(callback));
14725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
14735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1475a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
14765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} selectors
1477a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!Array.<!DOMAgent.NodeId>=)=} callback
14785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
14795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    querySelectorAll: function(nodeId, selectors, callback)
14805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1481aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.querySelectorAll(nodeId, selectors, this._wrapClientCallback(callback));
14825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
14835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1485a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId=} nodeId
14865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string=} mode
1487a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!RuntimeAgent.RemoteObjectId=} objectId
14885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1489926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    highlightDOMNode: function(nodeId, mode, objectId)
14905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1491323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        this.highlightDOMNodeWithConfig(nodeId, { mode: mode }, objectId);
1492323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    },
1493323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
1494323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    /**
1495323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)     * @param {!DOMAgent.NodeId=} nodeId
1496323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)     * @param {!{mode: (string|undefined), showInfo: (boolean|undefined)}=} config
1497323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)     * @param {!RuntimeAgent.RemoteObjectId=} objectId
1498323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)     */
1499323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    highlightDOMNodeWithConfig: function(nodeId, config, objectId)
1500323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    {
1501323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        config = config || { mode: "all", showInfo: undefined };
15025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._hideDOMNodeHighlightTimeout) {
15035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            clearTimeout(this._hideDOMNodeHighlightTimeout);
15045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._hideDOMNodeHighlightTimeout;
15055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1506323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        var highlightConfig = this._buildHighlightConfig(config.mode);
1507323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        if (typeof config.showInfo !== "undefined")
1508323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)            highlightConfig.showInfo = config.showInfo;
1509323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        this._highlighter.highlightDOMNode(this.nodeForId(nodeId || 0), highlightConfig, objectId);
15105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
15115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    hideDOMNodeHighlight: function()
15135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
15145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.highlightDOMNode(0);
15155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
15165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1518a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
15195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
15205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    highlightDOMNodeForTwoSeconds: function(nodeId)
15215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
15225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.highlightDOMNode(nodeId);
15235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._hideDOMNodeHighlightTimeout = setTimeout(this.hideDOMNodeHighlight.bind(this), 2000);
15245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
15255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
15275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} enabled
152843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)     * @param {boolean} inspectUAShadowDOM
15295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
15305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
153143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)    setInspectModeEnabled: function(enabled, inspectUAShadowDOM, callback)
15325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
153309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
153407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         * @this {WebInspector.DOMModel}
153509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
15368abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        function onDocumentAvailable()
15378abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        {
153843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)            this._highlighter.setInspectModeEnabled(enabled, inspectUAShadowDOM, this._buildHighlightConfig(), callback);
15398abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        }
15408abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        this.requestDocument(onDocumentAvailable.bind(this));
15415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
15425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
15445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string=} mode
1545a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!DOMAgent.HighlightConfig}
15465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
15475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _buildHighlightConfig: function(mode)
15485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
15495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        mode = mode || "all";
1550197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        var highlightConfig = { showInfo: mode === "all", showRulers: WebInspector.overridesSupport.showMetricsRulers(), showExtensionLines: WebInspector.overridesSupport.showExtensionLines()};
15515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (mode === "all" || mode === "content")
15525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            highlightConfig.contentColor = WebInspector.Color.PageHighlight.Content.toProtocolRGBA();
15535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (mode === "all" || mode === "padding")
15555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            highlightConfig.paddingColor = WebInspector.Color.PageHighlight.Padding.toProtocolRGBA();
15565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (mode === "all" || mode === "border")
15585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            highlightConfig.borderColor = WebInspector.Color.PageHighlight.Border.toProtocolRGBA();
15595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (mode === "all" || mode === "margin")
15615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            highlightConfig.marginColor = WebInspector.Color.PageHighlight.Margin.toProtocolRGBA();
15625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1563c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        if (mode === "all") {
156453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            highlightConfig.eventTargetColor = WebInspector.Color.PageHighlight.EventTarget.toProtocolRGBA();
1565c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            highlightConfig.shapeColor = WebInspector.Color.PageHighlight.Shape.toProtocolRGBA();
1566c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)            highlightConfig.shapeMarginColor = WebInspector.Color.PageHighlight.ShapeMargin.toProtocolRGBA();
1567c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        }
15685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return highlightConfig;
15695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
15705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1572a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} node
1573f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)     * @param {function(?Protocol.Error, ...)=} callback
1574f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)     * @return {function(...)}
1575f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)     * @template T
15765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
15775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _markRevision: function(node, callback)
15785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
157909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
158009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {?Protocol.Error} error
158107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         * @this {WebInspector.DOMModel}
158209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
15835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function wrapperFunction(error)
15845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
15855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!error)
15865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this.markUndoableState();
15875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (callback)
15895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback.apply(this, arguments);
15905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
15915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return wrapperFunction.bind(this);
15925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
15935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    /**
15955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     * @param {boolean} emulationEnabled
15965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     */
15975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    emulateTouchEventObjects: function(emulationEnabled)
15985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
15995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        const injectedFunction = function() {
16005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            const touchEvents = ["ontouchstart", "ontouchend", "ontouchmove", "ontouchcancel"];
1601926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var recepients = [window.__proto__, document.__proto__];
16025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var i = 0; i < touchEvents.length; ++i) {
1603926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                for (var j = 0; j < recepients.length; ++j) {
1604926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                    if (!(touchEvents[i] in recepients[j]))
1605926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                        Object.defineProperty(recepients[j], touchEvents[i], { value: null, writable: true, configurable: true, enumerable: true });
1606926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                }
16075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
16085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
16095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (emulationEnabled && !this._addTouchEventsScriptInjecting) {
16115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._addTouchEventsScriptInjecting = true;
1612926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            PageAgent.addScriptToEvaluateOnLoad("(" + injectedFunction.toString() + ")()", scriptAddedCallback.bind(this));
16135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } else {
16145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (typeof this._addTouchEventsScriptId !== "undefined") {
16155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                PageAgent.removeScriptToEvaluateOnLoad(this._addTouchEventsScriptId);
16165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                delete this._addTouchEventsScriptId;
16175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
16185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
16195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
162009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
162109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {?Protocol.Error} error
162209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {string} scriptId
162307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         * @this {WebInspector.DOMModel}
162409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
16255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function scriptAddedCallback(error, scriptId)
16265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
16275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._addTouchEventsScriptInjecting;
16285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error)
16295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
16305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._addTouchEventsScriptId = scriptId;
16315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
16325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        PageAgent.setTouchEmulationEnabled(emulationEnabled);
16345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
16355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    markUndoableState: function()
16375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1638aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.markUndoableState();
16395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
16405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
16425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
16435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
16445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    undo: function(callback)
16455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
164609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
164709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {?Protocol.Error} error
164807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         * @this {WebInspector.DOMModel}
164909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
16505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function mycallback(error)
16515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
165207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            this.dispatchEventToListeners(WebInspector.DOMModel.Events.UndoRedoCompleted);
16535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(error);
16545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
16555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
165607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.UndoRedoRequested);
1657aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.undo(callback);
16585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
16595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
16615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
16625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
16635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    redo: function(callback)
16645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
166509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        /**
166609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @param {?Protocol.Error} error
166707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch         * @this {WebInspector.DOMModel}
166809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         */
16695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function mycallback(error)
16705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
167107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch            this.dispatchEventToListeners(WebInspector.DOMModel.Events.UndoRedoCompleted);
16725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(error);
16735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
16745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
167507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this.dispatchEventToListeners(WebInspector.DOMModel.Events.UndoRedoRequested);
1676aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.redo(callback);
16775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
16785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1679c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    /**
1680a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {?WebInspector.DOMNodeHighlighter} highlighter
1681c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     */
1682c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    setHighlighter: function(highlighter)
1683c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    {
1684c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this._highlighter = highlighter || this._defaultHighlighter;
1685c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    },
1686c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
1687a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    /**
1688a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     * @param {number} x
1689a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     * @param {number} y
1690a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     * @param {function(?WebInspector.DOMNode)} callback
1691a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     */
1692a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    nodeForLocation: function(x, y, callback)
1693a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    {
1694a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        this._agent.getNodeForLocation(x, y, mycallback.bind(this));
1695a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
1696a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        /**
1697a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch         * @param {?Protocol.Error} error
1698a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch         * @param {number} nodeId
1699a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch         * @this {WebInspector.DOMModel}
1700a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch         */
1701a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        function mycallback(error, nodeId)
1702a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        {
1703a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch            if (error) {
1704a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch                callback(null);
1705a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch                return;
1706a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch            }
1707a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch            callback(this.nodeForId(nodeId));
1708a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        }
1709a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    },
1710a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
1711c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    __proto__: WebInspector.SDKModel.prototype
17125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
17135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
17155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
17165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {DOMAgent.Dispatcher}
171707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @param {!WebInspector.DOMModel} domModel
17185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
171907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben MurdochWebInspector.DOMDispatcher = function(domModel)
17205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
172107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    this._domModel = domModel;
17225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
17235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMDispatcher.prototype = {
17255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    documentUpdated: function()
17265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
172707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._documentUpdated();
17285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
17295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1731a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
173253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
173353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    inspectNodeRequested: function(nodeId)
173453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
173507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._inspectNodeRequested(nodeId);
173653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
173753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
173853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
1739a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
17405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
17415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
17425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
17435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    attributeModified: function(nodeId, name, value)
17445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
174507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._attributeModified(nodeId, name, value);
17465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
17475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1749a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
17505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
17515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
17525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    attributeRemoved: function(nodeId, name)
17535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
175407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._attributeRemoved(nodeId, name);
17555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
17565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1758a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DOMAgent.NodeId>} nodeIds
17595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
17605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inlineStyleInvalidated: function(nodeIds)
17615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
176207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._inlineStyleInvalidated(nodeIds);
17635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
17645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1766a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
17675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} characterData
17685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
17695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    characterDataModified: function(nodeId, characterData)
17705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
177107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._characterDataModified(nodeId, characterData);
17725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
17735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1775a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1776a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DOMAgent.Node>} payloads
17775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
17785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setChildNodes: function(parentId, payloads)
17795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
178007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._setChildNodes(parentId, payloads);
17815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
17825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1784a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
17855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} childNodeCount
17865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
17875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    childNodeCountUpdated: function(nodeId, childNodeCount)
17885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
178907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._childNodeCountUpdated(nodeId, childNodeCount);
17905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
17915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1793a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentNodeId
1794a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} previousNodeId
1795a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} payload
17965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
17975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    childNodeInserted: function(parentNodeId, previousNodeId, payload)
17985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
179907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._childNodeInserted(parentNodeId, previousNodeId, payload);
18005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
18015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
18025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1803a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentNodeId
1804a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
18055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
18065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    childNodeRemoved: function(parentNodeId, nodeId)
18075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
180807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._childNodeRemoved(parentNodeId, nodeId);
18095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
18105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
18115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1812a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} hostId
1813a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} root
18145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
18155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    shadowRootPushed: function(hostId, root)
18165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
181707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._shadowRootPushed(hostId, root);
18185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
18195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
18205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1821a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} hostId
1822a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} rootId
18235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
18245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    shadowRootPopped: function(hostId, rootId)
18255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
182607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._shadowRootPopped(hostId, rootId);
18279bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    },
18289bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)
18299bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    /**
1830a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1831a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} pseudoElement
18329bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)     */
18339bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    pseudoElementAdded: function(parentId, pseudoElement)
18349bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    {
183507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._pseudoElementAdded(parentId, pseudoElement);
18369bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    },
18379bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)
18389bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    /**
1839a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1840a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} pseudoElementId
18419bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)     */
18429bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    pseudoElementRemoved: function(parentId, pseudoElementId)
18439bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    {
184407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        this._domModel._pseudoElementRemoved(parentId, pseudoElementId);
18455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
18465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
18475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
18485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
1849aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @constructor
1850197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @extends {WebInspector.SDKObject}
1851aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.Target} target
1852aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!DOMAgent.EventListener} payload
1853aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch */
1854aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.DOMModel.EventListener = function(target, payload)
1855aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{
1856197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    WebInspector.SDKObject.call(this, target);
1857aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._payload = payload;
1858c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    var sourceName = this._payload.sourceName;
1859c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    if (!sourceName) {
1860c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        var script = target.debuggerModel.scriptForId(payload.location.scriptId);
1861c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        sourceName = script ? script.contentURL() : "";
1862c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    }
1863c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    this._sourceName = sourceName;
1864aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch}
1865aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
1866aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.DOMModel.EventListener.prototype = {
1867aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
1868aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @return {!DOMAgent.EventListener}
1869aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
1870aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    payload: function()
1871aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
1872aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        return this._payload;
1873aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
1874aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
1875aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
1876aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @return {?WebInspector.DOMNode}
1877aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
1878aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    node: function()
1879aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
1880aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        return this.target().domModel.nodeForId(this._payload.nodeId);
1881aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
1882aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
1883aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
1884aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @return {!WebInspector.DebuggerModel.Location}
1885aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
1886aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    location: function()
1887aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
1888aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        return WebInspector.DebuggerModel.Location.fromPayload(this.target(), this._payload.location);
1889aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
1890aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
1891aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    /**
1892aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     * @return {?WebInspector.RemoteObject}
1893aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch     */
1894aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    handler: function()
1895aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    {
1896aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        return this._payload.handler ? this.target().runtimeModel.createRemoteObject(this._payload.handler) : null;
1897aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    },
1898aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
1899c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    /**
1900c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     * @return {string}
1901c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)     */
1902c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    sourceName: function()
1903c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    {
1904c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        return this._sourceName;
1905c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    },
1906c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
1907197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    __proto__: WebInspector.SDKObject.prototype
1908aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch}
1909aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
1910aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch/**
1911c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * @interface
1912c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) */
1913c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)WebInspector.DOMNodeHighlighter = function() {
1914c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)}
1915c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
1916c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)WebInspector.DOMNodeHighlighter.prototype = {
1917c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    /**
1918a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     * @param {?WebInspector.DOMNode} node
1919a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.HighlightConfig} config
1920a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!RuntimeAgent.RemoteObjectId=} objectId
1921c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     */
1922a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    highlightDOMNode: function(node, config, objectId) {},
19238abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
19248abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    /**
19258abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)     * @param {boolean} enabled
192643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)     * @param {boolean} inspectUAShadowDOM
1927a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.HighlightConfig} config
192809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
19298abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)     */
193043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)    setInspectModeEnabled: function(enabled, inspectUAShadowDOM, config, callback) {}
1931c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)}
1932c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
1933c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)/**
1934c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * @constructor
1935c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * @implements {WebInspector.DOMNodeHighlighter}
1936aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!Protocol.DOMAgent} agent
1937c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) */
1938aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.DefaultDOMNodeHighlighter = function(agent)
1939aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{
1940aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    this._agent = agent;
1941c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)}
1942c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
1943c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)WebInspector.DefaultDOMNodeHighlighter.prototype = {
1944c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    /**
1945a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch     * @param {?WebInspector.DOMNode} node
1946a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.HighlightConfig} config
1947a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!RuntimeAgent.RemoteObjectId=} objectId
1948c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     */
1949a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    highlightDOMNode: function(node, config, objectId)
1950c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    {
1951a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        if (objectId || node)
1952a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch            this._agent.highlightNode(config, objectId ? undefined : node.id, objectId);
1953c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        else
1954aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch            this._agent.hideHighlight();
19558abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    },
19568abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
19578abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    /**
19588abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)     * @param {boolean} enabled
195943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)     * @param {boolean} inspectUAShadowDOM
1960a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.HighlightConfig} config
196109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
19628abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)     */
196343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)    setInspectModeEnabled: function(enabled, inspectUAShadowDOM, config, callback)
19648abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    {
1965197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        WebInspector.overridesSupport.setTouchEmulationSuspended(enabled);
1966aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch        this._agent.setInspectModeEnabled(enabled, inspectUAShadowDOM, config, callback);
1967c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    }
1968c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)}
1969