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
34a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.DOMAgent} domAgent
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?WebInspector.DOMDocument} doc
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean} isInShadowTree
37a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!DOMAgent.Node} payload
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMNode = function(domAgent, doc, isInShadowTree, payload) {
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._domAgent = domAgent;
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.ownerDocument = doc;
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._isInShadowTree = isInShadowTree;
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.id = payload.nodeId;
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    domAgent._idToDOMNode[this.id] = this;
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._nodeType = payload.nodeType;
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._nodeName = payload.nodeName;
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._localName = payload.localName;
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._nodeValue = payload.nodeValue;
5006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    this._pseudoType = payload.pseudoType;
5151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    this._shadowRootType = payload.shadowRootType;
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._shadowRoots = [];
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._attributes = [];
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._attributesMap = {};
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (payload.attributes)
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._setAttributesPayload(payload.attributes);
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._userProperties = {};
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._descendantUserPropertyCounters = {};
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    this._childNodeCount = payload.childNodeCount || 0;
645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    this._children = null;
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.nextSibling = null;
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.previousSibling = null;
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.firstChild = null;
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.lastChild = null;
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.parentNode = null;
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    if (payload.shadowRoots) {
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < payload.shadowRoots.length; ++i) {
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var root = payload.shadowRoots[i];
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var node = new WebInspector.DOMNode(this._domAgent, this.ownerDocument, true, root);
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._shadowRoots.push(node);
775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            node.parentNode = this;
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    if (payload.templateContent) {
82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        this._templateContent = new WebInspector.DOMNode(this._domAgent, this.ownerDocument, true, payload.templateContent);
835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._templateContent.parentNode = this;
845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    }
85926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (payload.children)
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._setChildrenPayload(payload.children);
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    this._setPseudoElements(payload.pseudoElements);
9006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (payload.contentDocument) {
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._contentDocument = new WebInspector.DOMDocument(domAgent, payload.contentDocument);
935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._children = [this._contentDocument];
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._renumber();
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (this._nodeType === Node.ELEMENT_NODE) {
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // HTML and BODY from internal iframes should not overwrite top-level ones.
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.ownerDocument && !this.ownerDocument.documentElement && this._nodeName === "HTML")
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.ownerDocument.documentElement = this;
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.ownerDocument && !this.ownerDocument.body && this._nodeName === "BODY")
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.ownerDocument.body = this;
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    } else if (this._nodeType === Node.DOCUMENT_TYPE_NODE) {
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.publicId = payload.publicId;
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.systemId = payload.systemId;
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.internalSubset = payload.internalSubset;
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    } else if (this._nodeType === Node.ATTRIBUTE_NODE) {
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.name = payload.name;
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.value = payload.value;
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)WebInspector.DOMNode.PseudoElementNames = {
11406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    Before: "before",
11506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    After: "after"
11606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)}
11706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
11851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)WebInspector.DOMNode.ShadowRootTypes = {
11951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    UserAgent: "user-agent",
12051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    Author: "author"
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMNode.prototype = {
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
125a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {?Array.<!WebInspector.DOMNode>}
1265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     */
1275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    children: function()
1285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    {
1295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return this._children ? this._children.slice() : null;
1305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    },
1315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    /**
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    hasAttributes: function()
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._attributes.length > 0;
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     * @return {number}
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    childNodeCount: function()
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return this._childNodeCount;
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    hasShadowRoots: function()
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return !!this._shadowRoots.length;
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
157a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Array.<!WebInspector.DOMNode>}
1585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     */
1595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    shadowRoots: function()
1605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    {
1615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return this._shadowRoots.slice();
1625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    },
1635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    /**
165a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.DOMNode}
1665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     */
1675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    templateContent: function()
1685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    {
1695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        return this._templateContent;
1705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    },
1715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
1725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    /**
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {number}
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    nodeType: function()
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._nodeType;
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    nodeName: function()
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._nodeName;
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
18906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @return {string|undefined}
19006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
19106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    pseudoType: function()
19206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    {
19306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        return this._pseudoType;
19406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    },
19506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
19606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
19706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     * @return {boolean}
19806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
19906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    hasPseudoElements: function()
20006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    {
20106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        return Object.keys(this._pseudoElements).length !== 0;
20206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    },
20306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
20406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
205a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Object.<string, !WebInspector.DOMNode>}
20606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
20706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    pseudoElements: function()
20806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    {
20906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        return this._pseudoElements;
21006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    },
21106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
21206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isInShadowTree: function()
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._isInShadowTree;
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
22151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)     * @return {?string}
22251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)     */
22351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    shadowRootType: function()
22451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    {
22551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        return this._shadowRootType || null;
22651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    },
22751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)
22851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    /**
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    nodeNameInCorrectCase: function()
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this.isXMLNode() ? this.nodeName() : this.nodeName().toLowerCase();
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setNodeName: function(name, callback)
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.setNodeName(this.id, name, WebInspector.domAgent._markRevision(this, callback));
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    localName: function()
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._localName;
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    nodeValue: function()
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._nodeValue;
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setNodeValue: function(value, callback)
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.setNodeValue(this.id, value, WebInspector.domAgent._markRevision(this, callback));
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getAttribute: function(name)
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var attr = this._attributesMap[name];
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return attr ? attr.value : undefined;
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} text
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setAttribute: function(name, text, callback)
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.setAttributesAsText(this.id, text, name, WebInspector.domAgent._markRevision(this, callback));
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setAttributeValue: function(name, value, callback)
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.setAttributeValue(this.id, name, value, WebInspector.domAgent._markRevision(this, callback));
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
301a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Object}
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    attributes: function()
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._attributes;
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    removeAttribute: function(name, callback)
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
315e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @param {?Protocol.Error} error
316e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DOMNode}
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function mycallback(error)
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!error) {
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                delete this._attributesMap[name];
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                for (var i = 0;  i < this._attributes.length; ++i) {
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    if (this._attributes[i].name === name) {
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                        this._attributes.splice(i, 1);
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                        break;
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    }
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                }
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            WebInspector.domAgent._markRevision(this, callback)(error);
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.removeAttribute(this.id, name, mycallback.bind(this));
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
336a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?Array.<!WebInspector.DOMNode>)=} callback
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getChildNodes: function(callback)
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        if (this._children) {
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (callback)
3425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)                callback(this.children());
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @this {WebInspector.DOMNode}
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function mycallback(error)
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
35206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            if (callback)
35306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)                callback(error ? null : this.children());
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
356926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DOMAgent.requestChildNodes(this.id, undefined, mycallback.bind(this));
357926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    },
358926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
359926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    /**
360926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {number} depth
361a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?Array.<!WebInspector.DOMNode>)=} callback
362926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     */
363926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    getSubtree: function(depth, callback)
364926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
365926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        /**
366926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)         * @this {WebInspector.DOMNode}
367926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)         * @param {?Protocol.Error} error
368926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)         */
369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        function mycallback(error)
370926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        {
371926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            if (callback)
3725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)                callback(error ? null : this._children);
373926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        }
374926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
375926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DOMAgent.requestChildNodes(this.id, depth, mycallback.bind(this));
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getOuterHTML: function(callback)
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.getOuterHTML(this.id, callback);
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} html
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setOuterHTML: function(html, callback)
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.setOuterHTML(this.id, html, WebInspector.domAgent._markRevision(this, callback));
3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
396a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?Protocol.Error, !DOMAgent.NodeId=)=} callback
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    removeNode: function(callback)
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.removeNode(this.id, WebInspector.domAgent._markRevision(this, callback));
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    copyNode: function()
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function copy(error, text)
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!error)
4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                InspectorFrontendHost.copyText(text);
4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.getOuterHTML(this.id, copy);
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
414926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)     * @param {string} objectGroupId
4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
417926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    eventListeners: function(objectGroupId, callback)
4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
419926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DOMAgent.getEventListenersForNode(this.id, objectGroupId, callback);
4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    path: function()
4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var path = [];
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = this;
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        while (node && "index" in node && node._nodeName.length) {
4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            path.push([node.index, node._nodeName]);
4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            node = node.parentNode;
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        path.reverse();
4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return path.join(",");
4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
438a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} node
4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isAncestor: function(node)
4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!node)
4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return false;
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var currentNode = node.parentNode;
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        while (currentNode) {
4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (this === currentNode)
4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return true;
4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            currentNode = currentNode.parentNode;
4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
456a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} descendant
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isDescendant: function(descendant)
4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return descendant !== null && descendant.isAncestor(this);
4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
465a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<string>} attrs
4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _setAttributesPayload: function(attrs)
4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var attributesChanged = !this._attributes || attrs.length !== this._attributes.length * 2;
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var oldAttributesMap = this._attributesMap || {};
4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._attributes = [];
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._attributesMap = {};
4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < attrs.length; i += 2) {
4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var name = attrs[i];
4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var value = attrs[i + 1];
4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._addAttribute(name, value);
4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (attributesChanged)
4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                continue;
4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!oldAttributesMap[name] || oldAttributesMap[name].value !== value)
4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)              attributesChanged = true;
4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return attributesChanged;
4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
491a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} prev
492a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} payload
493a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.DOMNode}
4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _insertChild: function(prev, payload)
4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = new WebInspector.DOMNode(this._domAgent, this.ownerDocument, this._isInShadowTree, payload);
4985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._children.splice(this._children.indexOf(prev) + 1, 0, node);
4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._renumber();
5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return node;
5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
504a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} node
5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _removeChild: function(node)
5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
50806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        if (node.pseudoType()) {
50906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            delete this._pseudoElements[node.pseudoType()];
51006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        } else {
51106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            var shadowRootIndex = this._shadowRoots.indexOf(node);
51206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            if (shadowRootIndex !== -1)
51306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)                this._shadowRoots.splice(shadowRootIndex, 1);
51406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            else
51506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)                this._children.splice(this._children.indexOf(node), 1);
51606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        }
5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        node.parentNode = null;
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        node._updateChildUserPropertyCountsOnRemoval(this);
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._renumber();
5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
523a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DOMAgent.Node>} payloads
5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _setChildrenPayload: function(payloads)
5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // We set children in the constructor.
5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._contentDocument)
5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._children = [];
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < payloads.length; ++i) {
5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var payload = payloads[i];
5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var node = new WebInspector.DOMNode(this._domAgent, this.ownerDocument, this._isInShadowTree, payload);
5355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            this._children.push(node);
5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._renumber();
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
54006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    /**
541a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DOMAgent.Node>|undefined} payloads
54206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)     */
54306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    _setPseudoElements: function(payloads)
54406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    {
54506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this._pseudoElements = {};
54606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        if (!payloads)
54706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            return;
54806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
54906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        for (var i = 0; i < payloads.length; ++i) {
55006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            var node = new WebInspector.DOMNode(this._domAgent, this.ownerDocument, this._isInShadowTree, payloads[i]);
55106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            node.parentNode = this;
55206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            this._pseudoElements[node.pseudoType()] = node;
55306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        }
55406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    },
55506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _renumber: function()
5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._childNodeCount = this._children.length;
5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._childNodeCount == 0) {
5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.firstChild = null;
5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.lastChild = null;
5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
5645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this.firstChild = this._children[0];
5655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this.lastChild = this._children[this._childNodeCount - 1];
5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < this._childNodeCount; ++i) {
5675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            var child = this._children[i];
5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            child.index = i;
5695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            child.nextSibling = i + 1 < this._childNodeCount ? this._children[i + 1] : null;
5705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            child.previousSibling = i - 1 >= 0 ? this._children[i - 1] : null;
5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            child.parentNode = this;
5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _addAttribute: function(name, value)
5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var attr = {
5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            name: name,
5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            value: value,
5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            _node: this
5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        };
5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._attributesMap[name] = attr;
5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._attributes.push(attr);
5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _setAttribute: function(name, value)
5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var attr = this._attributesMap[name];
5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (attr)
5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            attr.value = value;
5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._addAttribute(name, value);
6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _removeAttribute: function(name)
6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var attr = this._attributesMap[name];
6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (attr) {
6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._attributes.remove(attr);
6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._attributesMap[name];
6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
616a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} targetNode
6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {?WebInspector.DOMNode} anchorNode
618a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?Protocol.Error, !DOMAgent.NodeId=)=} callback
6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    moveTo: function(targetNode, anchorNode, callback)
6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.moveTo(this.id, targetNode.id, anchorNode ? anchorNode.id : undefined, WebInspector.domAgent._markRevision(this, callback));
6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isXMLNode: function()
6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return !!this.ownerDocument && !!this.ownerDocument.xmlVersion;
6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _updateChildUserPropertyCountsOnRemoval: function(parentNode)
6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var result = {};
6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._userProperties) {
6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var name in this._userProperties)
6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                result[name] = (result[name] || 0) + 1;
6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._descendantUserPropertyCounters) {
6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var name in this._descendantUserPropertyCounters) {
6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                var counter = this._descendantUserPropertyCounters[name];
6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                result[name] = (result[name] || 0) + counter;
6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var name in result)
6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            parentNode._updateDescendantUserPropertyCount(name, -result[name]);
6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _updateDescendantUserPropertyCount: function(name, delta)
6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._descendantUserPropertyCounters.hasOwnProperty(name))
6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._descendantUserPropertyCounters[name] = 0;
6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._descendantUserPropertyCounters[name] += delta;
6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._descendantUserPropertyCounters[name])
6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._descendantUserPropertyCounters[name];
6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.parentNode)
6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.parentNode._updateDescendantUserPropertyCount(name, delta);
6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setUserProperty: function(name, value)
6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (value === null) {
6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.removeUserProperty(name);
6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.parentNode && !this._userProperties.hasOwnProperty(name))
6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.parentNode._updateDescendantUserPropertyCount(name, 1);
6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._userProperties[name] = value;
6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    removeUserProperty: function(name)
6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._userProperties.hasOwnProperty(name))
6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._userProperties[name];
6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.parentNode)
6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.parentNode._updateDescendantUserPropertyCount(name, -1);
6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    getUserProperty: function(name)
6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._userProperties ? this._userProperties[name] : null;
6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    descendantUserPropertyCount: function(name)
6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._descendantUserPropertyCounters && this._descendantUserPropertyCounters[name] ? this._descendantUserPropertyCounters[name] : 0;
6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} url
6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {?string}
6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    resolveURL: function(url)
7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!url)
7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return url;
7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var frameOwnerCandidate = this; frameOwnerCandidate; frameOwnerCandidate = frameOwnerCandidate.parentNode) {
7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (frameOwnerCandidate.baseURL)
7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return WebInspector.ParsedURL.completeURL(frameOwnerCandidate.baseURL, url);
7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return null;
7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.DOMNode}
7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
715a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.DOMAgent} domAgent
716a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!DOMAgent.Node} payload
7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMDocument = function(domAgent, payload)
7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.DOMNode.call(this, domAgent, this, false, payload);
7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.documentURL = payload.documentURL || "";
722e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)    this.baseURL = payload.baseURL || "";
7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.xmlVersion = payload.xmlVersion;
7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._listeners = {};
7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMDocument.prototype = {
7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.DOMNode.prototype
7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.Object}
7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMAgent = function() {
736e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    /** @type {!Object.<number, !WebInspector.DOMNode>} */
7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._idToDOMNode = {};
738e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    /** @type {?WebInspector.DOMDocument} */
7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._document = null;
740e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    /** @type {!Object.<number, boolean>} */
7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._attributeLoadNodeIds = {};
7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorBackend.registerDOMDispatcher(new WebInspector.DOMDispatcher(this));
743c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
744c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    this._defaultHighlighter = new WebInspector.DefaultDOMNodeHighlighter();
745c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    this._highlighter = this._defaultHighlighter;
7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMAgent.Events = {
7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    AttrModified: "AttrModified",
7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    AttrRemoved: "AttrRemoved",
7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CharacterDataModified: "CharacterDataModified",
7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    NodeInserted: "NodeInserted",
7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    NodeRemoved: "NodeRemoved",
7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DocumentUpdated: "DocumentUpdated",
7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ChildNodeCountUpdated: "ChildNodeCountUpdated",
7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    UndoRedoRequested: "UndoRedoRequested",
75753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    UndoRedoCompleted: "UndoRedoCompleted",
7589243a84568938a3b2704146d90a71e1405b822e4Torne (Richard Coles)    InspectNodeRequested: "InspectNodeRequested"
7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMAgent.prototype = {
7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
763a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!WebInspector.DOMDocument)=} callback
7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestDocument: function(callback)
7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._document) {
7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (callback)
7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback(this._document);
7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._pendingDocumentRequestCallbacks) {
7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._pendingDocumentRequestCallbacks.push(callback);
7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pendingDocumentRequestCallbacks = [callback];
7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @this {WebInspector.DOMAgent}
7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
783a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!DOMAgent.Node} root
7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function onDocumentAvailable(error, root)
7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!error)
7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this._setDocument(root);
7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var i = 0; i < this._pendingDocumentRequestCallbacks.length; ++i) {
7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                var callback = this._pendingDocumentRequestCallbacks[i];
7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (callback)
7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    callback(this._document);
7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._pendingDocumentRequestCallbacks;
7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.getDocument(onDocumentAvailable.bind(this));
7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
802a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {?WebInspector.DOMDocument}
8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    existingDocument: function()
8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._document;
8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
810a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!RuntimeAgent.RemoteObjectId} objectId
8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?DOMAgent.NodeId)=} callback
8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pushNodeToFrontend: function(objectId, callback)
8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8153c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        this._dispatchWhenDocumentAvailable(DOMAgent.requestNode.bind(DOMAgent, objectId), callback);
8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} path
8203c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch     * @param {function(?number)=} callback
8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    pushNodeByPathToFrontend: function(path, callback)
8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8243c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        this._dispatchWhenDocumentAvailable(DOMAgent.pushNodeByPathToFrontend.bind(DOMAgent, path), callback);
8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
828e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)     * @param {number} backendNodeId
829e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)     * @param {function(?number)=} callback
830e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)     */
831e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    pushNodeByBackendIdToFrontend: function(backendNodeId, callback)
832e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    {
8333c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        this._dispatchWhenDocumentAvailable(DOMAgent.pushNodeByBackendIdToFrontend.bind(DOMAgent, backendNodeId), callback);
834e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    },
835e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)
836e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)    /**
837a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!T)=} callback
838a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {function(?Protocol.Error, !T=)|undefined}
8393c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch     * @template T
8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _wrapClientCallback: function(callback)
8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!callback)
8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
847a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!T=} result
848a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @template T
8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return function(error, result)
8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            // Caller is responsible for handling the actual error.
8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(error ? null : result);
8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
858a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(function(?Protocol.Error, !T=)=)} func
859a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!T)=} callback
8603c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch     * @template T
8615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _dispatchWhenDocumentAvailable: function(func, callback)
8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8643c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        var callbackWrapper = this._wrapClientCallback(callback);
8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
866e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)        /**
867e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DOMAgent}
868e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         */
8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function onDocumentAvailable()
8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (this._document)
8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                func(callbackWrapper);
8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            else {
8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (callbackWrapper)
8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    callbackWrapper("No document");
8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.requestDocument(onDocumentAvailable.bind(this));
8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
882a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
8855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
8865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _attributeModified: function(nodeId, name, value)
8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
8885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = this._idToDOMNode[nodeId];
8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!node)
8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        node._setAttribute(name, value);
8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.AttrModified, { node: node, name: name });
8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
897a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _attributeRemoved: function(nodeId, name)
9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = this._idToDOMNode[nodeId];
9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!node)
9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        node._removeAttribute(name);
9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.AttrRemoved, { node: node, name: name });
9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
910a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DOMAgent.NodeId>} nodeIds
9115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _inlineStyleInvalidated: function(nodeIds)
9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var i = 0; i < nodeIds.length; ++i)
9155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._attributeLoadNodeIds[nodeIds[i]] = true;
9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if ("_loadNodeAttributesTimeout" in this)
9175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._loadNodeAttributesTimeout = setTimeout(this._loadNodeAttributes.bind(this), 0);
9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _loadNodeAttributes: function()
9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
9245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @this {WebInspector.DOMAgent}
925a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!DOMAgent.NodeId} nodeId
9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
927a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<string>} attributes
9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callback(nodeId, error, attributes)
9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error) {
9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                // We are calling _loadNodeAttributes asynchronously, it is ok if node is not found.
9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var node = this._idToDOMNode[nodeId];
9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (node) {
9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                if (node._setAttributesPayload(attributes))
9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    this.dispatchEventToListeners(WebInspector.DOMAgent.Events.AttrModified, { node: node, name: "style" });
9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._loadNodeAttributesTimeout;
9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        for (var nodeId in this._attributeLoadNodeIds) {
9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var nodeIdAsNumber = parseInt(nodeId, 10);
9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            DOMAgent.getAttributes(nodeIdAsNumber, callback.bind(this, nodeIdAsNumber));
9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._attributeLoadNodeIds = {};
9495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
952a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} newValue
9545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _characterDataModified: function(nodeId, newValue)
9565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = this._idToDOMNode[nodeId];
9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        node._nodeValue = newValue;
9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.CharacterDataModified, node);
9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
963a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
964a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {?WebInspector.DOMNode}
9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    nodeForId: function(nodeId)
9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
968a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        return this._idToDOMNode[nodeId] || null;
9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _documentUpdated: function()
9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._setDocument(null);
9745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
977a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {?DOMAgent.Node} payload
9785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _setDocument: function(payload)
9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._idToDOMNode = {};
9825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (payload && "nodeId" in payload)
9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._document = new WebInspector.DOMDocument(this, payload);
9845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
9855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._document = null;
9865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.DocumentUpdated, this._document);
9875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
990a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} payload
9915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
9925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _setDetachedRoot: function(payload)
9935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
9945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (payload.nodeName === "#document")
9955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            new WebInspector.DOMDocument(this, payload);
9965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
9975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            new WebInspector.DOMNode(this, null, false, payload);
9985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
9995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1001a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1002a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DOMAgent.Node>} payloads
10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _setChildNodes: function(parentId, payloads)
10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!parentId && payloads.length) {
10075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._setDetachedRoot(payloads[0]);
10085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
10095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
10105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var parent = this._idToDOMNode[parentId];
10125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        parent._setChildrenPayload(payloads);
10135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1016a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
10175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} newValue
10185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
10195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _childNodeCountUpdated: function(nodeId, newValue)
10205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
10215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = this._idToDOMNode[nodeId];
10225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        node._childNodeCount = newValue;
10235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.ChildNodeCountUpdated, node);
10245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1027a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1028a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} prevId
1029a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} payload
10305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
10315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _childNodeInserted: function(parentId, prevId, payload)
10325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
10335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var parent = this._idToDOMNode[parentId];
10345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var prev = this._idToDOMNode[prevId];
10355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = parent._insertChild(prev, payload);
10365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._idToDOMNode[node.id] = node;
10375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.NodeInserted, node);
10385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1041a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1042a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
10435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
10445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _childNodeRemoved: function(parentId, nodeId)
10455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
10465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var parent = this._idToDOMNode[parentId];
10475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = this._idToDOMNode[nodeId];
10485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        parent._removeChild(node);
10495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._unbind(node);
10505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.NodeRemoved, {node: node, parent: parent});
10515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1054a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} hostId
1055a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} root
10565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     */
10575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    _shadowRootPushed: function(hostId, root)
10585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    {
10595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        var host = this._idToDOMNode[hostId];
10605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        if (!host)
10615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            return;
10625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        var node = new WebInspector.DOMNode(this, host.ownerDocument, true, root);
10635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        node.parentNode = host;
10645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._idToDOMNode[node.id] = node;
10655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        host._shadowRoots.push(node);
1066521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.NodeInserted, node);
10675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    },
10685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
10695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    /**
1070a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} hostId
1071a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} rootId
10725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
10735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    _shadowRootPopped: function(hostId, rootId)
10745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
10755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        var host = this._idToDOMNode[hostId];
10765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        if (!host)
10775267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            return;
10785267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        var root = this._idToDOMNode[rootId];
10795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        if (!root)
10805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            return;
108106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        host._removeChild(root);
10825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._unbind(root);
10835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.NodeRemoved, {node: root, parent: host});
10845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
10855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1087a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1088a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} pseudoElement
10899bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)     */
10909bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    _pseudoElementAdded: function(parentId, pseudoElement)
10919bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    {
109206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var parent = this._idToDOMNode[parentId];
109306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        if (!parent)
109406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            return;
109506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var node = new WebInspector.DOMNode(this, parent.ownerDocument, false, pseudoElement);
109606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        node.parentNode = parent;
109706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this._idToDOMNode[node.id] = node;
109806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        console.assert(!parent._pseudoElements[node.pseudoType()]);
109906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        parent._pseudoElements[node.pseudoType()] = node;
110006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.NodeInserted, node);
11019bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    },
11029bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)
11039bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    /**
1104a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1105a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} pseudoElementId
11069bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)     */
11079bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    _pseudoElementRemoved: function(parentId, pseudoElementId)
11089bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    {
110906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var parent = this._idToDOMNode[parentId];
111006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        if (!parent)
111106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            return;
111206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var pseudoElement = this._idToDOMNode[pseudoElementId];
111306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        if (!pseudoElement)
111406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            return;
111506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        parent._removeChild(pseudoElement);
111606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this._unbind(pseudoElement);
111706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.NodeRemoved, {node: pseudoElement, parent: parent});
11189bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    },
11199bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)
11209bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    /**
1121a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} node
11225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
11235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _unbind: function(node)
11245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
11255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        delete this._idToDOMNode[node.id];
11265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        for (var i = 0; node._children && i < node._children.length; ++i)
11275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            this._unbind(node._children[i]);
11285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        for (var i = 0; i < node._shadowRoots.length; ++i)
11295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            this._unbind(node._shadowRoots[i]);
113006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        var pseudoElements = node.pseudoElements();
113106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)        for (var id in pseudoElements)
113206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)            this._unbind(pseudoElements[id]);
11335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        if (node._templateContent)
11345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)            this._unbind(node._templateContent);
11355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
11385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} nodeId
11395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
11405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inspectElement: function(nodeId)
11415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
11425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var node = this._idToDOMNode[nodeId];
11435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (node)
1144521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)            this.dispatchEventToListeners(WebInspector.DOMAgent.Events.InspectNodeRequested, nodeId);
11455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1148a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
114953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
115053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    _inspectNodeRequested: function(nodeId)
115153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
115253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.InspectNodeRequested, nodeId);
115353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
115453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
115553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
11565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} query
11575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(number)} searchCallback
11585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
11595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    performSearch: function(query, searchCallback)
11605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
11615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.cancelSearch();
11625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
11645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
11655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {string} searchId
11665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {number} resultsCount
1167e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DOMAgent}
11685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
11695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callback(error, searchId, resultsCount)
11705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
11715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._searchId = searchId;
11725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            searchCallback(resultsCount);
11735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
11745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.performSearch(query, callback.bind(this));
11755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
11765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
11785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} index
1179e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)     * @param {?function(?WebInspector.DOMNode)} callback
11805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
11815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    searchResult: function(index, callback)
11825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1183a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        if (this._searchId)
1184a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            DOMAgent.getSearchResults(this._searchId, index, index + 1, searchResultsCallback.bind(this));
1185a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        else
1186a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            callback(null);
11875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1188a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        /**
1189a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {?Protocol.Error} error
1190a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<number>} nodeIds
1191e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DOMAgent}
1192a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         */
1193a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        function searchResultsCallback(error, nodeIds)
1194a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        {
1195a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            if (error) {
1196a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                console.error(error);
1197a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                callback(null);
1198a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                return;
11995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
1200a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            if (nodeIds.length != 1)
1201a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)                return;
1202a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
1203e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)            callback(this.nodeForId(nodeIds[0]));
1204a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        }
12055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    cancelSearch: function()
12085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._searchId) {
12105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            DOMAgent.discardSearchResults(this._searchId);
12115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._searchId;
12125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
12135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1216a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
12175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} selectors
12185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?DOMAgent.NodeId)=} callback
12195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
12205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    querySelector: function(nodeId, selectors, callback)
12215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12223c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        DOMAgent.querySelector(nodeId, selectors, this._wrapClientCallback(callback));
12235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1226a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
12275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} selectors
1228a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!Array.<!DOMAgent.NodeId>=)=} callback
12295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
12305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    querySelectorAll: function(nodeId, selectors, callback)
12315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12323c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        DOMAgent.querySelectorAll(nodeId, selectors, this._wrapClientCallback(callback));
12335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1236a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId=} nodeId
12375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string=} mode
1238a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!RuntimeAgent.RemoteObjectId=} objectId
12395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1240926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    highlightDOMNode: function(nodeId, mode, objectId)
12415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._hideDOMNodeHighlightTimeout) {
12435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            clearTimeout(this._hideDOMNodeHighlightTimeout);
12445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._hideDOMNodeHighlightTimeout;
12455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
1246c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this._highlighter.highlightDOMNode(nodeId || 0, this._buildHighlightConfig(mode), objectId);
12475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    hideDOMNodeHighlight: function()
12505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.highlightDOMNode(0);
12525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1255a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
12565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
12575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    highlightDOMNodeForTwoSeconds: function(nodeId)
12585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.highlightDOMNode(nodeId);
12605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._hideDOMNodeHighlightTimeout = setTimeout(this.hideDOMNodeHighlight.bind(this), 2000);
12615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
12645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} enabled
1265e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch     * @param {boolean} inspectShadowDOM
12665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
12675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1268e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    setInspectModeEnabled: function(enabled, inspectShadowDOM, callback)
12695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1270e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)        /**
1271e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DOMAgent}
1272e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         */
12738abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        function onDocumentAvailable()
12748abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        {
12758abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)            this._highlighter.setInspectModeEnabled(enabled, inspectShadowDOM, this._buildHighlightConfig(), callback);
12768abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        }
12778abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        this.requestDocument(onDocumentAvailable.bind(this));
12785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
12795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
12815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string=} mode
1282a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!DOMAgent.HighlightConfig}
12835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
12845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _buildHighlightConfig: function(mode)
12855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
12865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        mode = mode || "all";
12875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var highlightConfig = { showInfo: mode === "all", showRulers: WebInspector.settings.showMetricsRulers.get() };
12885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (mode === "all" || mode === "content")
12895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            highlightConfig.contentColor = WebInspector.Color.PageHighlight.Content.toProtocolRGBA();
12905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (mode === "all" || mode === "padding")
12925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            highlightConfig.paddingColor = WebInspector.Color.PageHighlight.Padding.toProtocolRGBA();
12935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (mode === "all" || mode === "border")
12955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            highlightConfig.borderColor = WebInspector.Color.PageHighlight.Border.toProtocolRGBA();
12965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (mode === "all" || mode === "margin")
12985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            highlightConfig.marginColor = WebInspector.Color.PageHighlight.Margin.toProtocolRGBA();
12995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
130053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        if (mode === "all")
130153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)            highlightConfig.eventTargetColor = WebInspector.Color.PageHighlight.EventTarget.toProtocolRGBA();
130253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
13035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return highlightConfig;
13045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
13055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1307a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.DOMNode} node
1308a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(?Protocol.Error, !A=, !B=)=} callback
1309a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {function(?Protocol.Error, !A=, !B=)}
1310e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)     * @template A,B
13115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
13125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _markRevision: function(node, callback)
13135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1314e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)        /**
1315e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @param {?Protocol.Error} error
1316e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DOMAgent}
1317e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         */
13185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function wrapperFunction(error)
13195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
13205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (!error)
13215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                this.markUndoableState();
13225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (callback)
13245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                callback.apply(this, arguments);
13255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
13265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return wrapperFunction.bind(this);
13275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
13285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    /**
13305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     * @param {boolean} emulationEnabled
13315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)     */
13325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    emulateTouchEventObjects: function(emulationEnabled)
13335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
13345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        const injectedFunction = function() {
13355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            const touchEvents = ["ontouchstart", "ontouchend", "ontouchmove", "ontouchcancel"];
1336926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var recepients = [window.__proto__, document.__proto__];
13375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var i = 0; i < touchEvents.length; ++i) {
1338926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                for (var j = 0; j < recepients.length; ++j) {
1339926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                    if (!(touchEvents[i] in recepients[j]))
1340926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                        Object.defineProperty(recepients[j], touchEvents[i], { value: null, writable: true, configurable: true, enumerable: true });
1341926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)                }
13425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
13435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
13445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (emulationEnabled && !this._addTouchEventsScriptInjecting) {
13465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._addTouchEventsScriptInjecting = true;
1347926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            PageAgent.addScriptToEvaluateOnLoad("(" + injectedFunction.toString() + ")()", scriptAddedCallback.bind(this));
13485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        } else {
13495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (typeof this._addTouchEventsScriptId !== "undefined") {
13505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                PageAgent.removeScriptToEvaluateOnLoad(this._addTouchEventsScriptId);
13515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                delete this._addTouchEventsScriptId;
13525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            }
13535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
13545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1355e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)        /**
1356e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @param {?Protocol.Error} error
1357e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @param {string} scriptId
1358e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DOMAgent}
1359e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         */
13605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function scriptAddedCallback(error, scriptId)
13615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
13625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._addTouchEventsScriptInjecting;
13635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (error)
13645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                return;
13655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._addTouchEventsScriptId = scriptId;
13665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
13675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        PageAgent.setTouchEmulationEnabled(emulationEnabled);
13695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
13705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    markUndoableState: function()
13725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
13735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.markUndoableState();
13745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
13755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
13775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
13785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
13795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    undo: function(callback)
13805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1381e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)        /**
1382e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @param {?Protocol.Error} error
1383e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DOMAgent}
1384e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         */
13855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function mycallback(error)
13865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
13875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.dispatchEventToListeners(WebInspector.DOMAgent.Events.UndoRedoCompleted);
13885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(error);
13895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
13905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.UndoRedoRequested);
13925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.undo(callback);
13935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
13945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
13965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
13975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
13985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    redo: function(callback)
13995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1400e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)        /**
1401e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @param {?Protocol.Error} error
1402e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         * @this {WebInspector.DOMAgent}
1403e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)         */
14045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function mycallback(error)
14055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
14065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.dispatchEventToListeners(WebInspector.DOMAgent.Events.UndoRedoCompleted);
14075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(error);
14085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
14095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.UndoRedoRequested);
14115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMAgent.redo(callback);
14125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
14135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1414c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    /**
1415a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {?WebInspector.DOMNodeHighlighter} highlighter
1416c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     */
1417c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    setHighlighter: function(highlighter)
1418c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    {
1419c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        this._highlighter = highlighter || this._defaultHighlighter;
1420c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    },
1421c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
14225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    __proto__: WebInspector.Object.prototype
14235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
14245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
14265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
14275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {DOMAgent.Dispatcher}
1428a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.DOMAgent} domAgent
14295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
14305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMDispatcher = function(domAgent)
14315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
14325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._domAgent = domAgent;
14335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
14345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.DOMDispatcher.prototype = {
14365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    documentUpdated: function()
14375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
14385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._domAgent._documentUpdated();
14395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
14405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1442a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
144353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)     */
144453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    inspectNodeRequested: function(nodeId)
144553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    {
144653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        this._domAgent._inspectNodeRequested(nodeId);
144753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    },
144853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
144953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    /**
1450a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
14515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
14525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} value
14535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
14545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    attributeModified: function(nodeId, name, value)
14555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
14565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._domAgent._attributeModified(nodeId, name, value);
14575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
14585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1460a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
14615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} name
14625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
14635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    attributeRemoved: function(nodeId, name)
14645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
14655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._domAgent._attributeRemoved(nodeId, name);
14665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
14675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1469a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DOMAgent.NodeId>} nodeIds
14705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
14715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    inlineStyleInvalidated: function(nodeIds)
14725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
14735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._domAgent._inlineStyleInvalidated(nodeIds);
14745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
14755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1477a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
14785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} characterData
14795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
14805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    characterDataModified: function(nodeId, characterData)
14815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
14825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._domAgent._characterDataModified(nodeId, characterData);
14835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
14845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1486a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1487a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Array.<!DOMAgent.Node>} payloads
14885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
14895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setChildNodes: function(parentId, payloads)
14905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
14915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._domAgent._setChildNodes(parentId, payloads);
14925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
14935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1495a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
14965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {number} childNodeCount
14975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
14985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    childNodeCountUpdated: function(nodeId, childNodeCount)
14995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
15005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._domAgent._childNodeCountUpdated(nodeId, childNodeCount);
15015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
15025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1504a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentNodeId
1505a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} previousNodeId
1506a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} payload
15075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
15085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    childNodeInserted: function(parentNodeId, previousNodeId, payload)
15095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
15105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._domAgent._childNodeInserted(parentNodeId, previousNodeId, payload);
15115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
15125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1514a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentNodeId
1515a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
15165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
15175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    childNodeRemoved: function(parentNodeId, nodeId)
15185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
15195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._domAgent._childNodeRemoved(parentNodeId, nodeId);
15205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
15215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1523a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} hostId
1524a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} root
15255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
15265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    shadowRootPushed: function(hostId, root)
15275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
15285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._domAgent._shadowRootPushed(hostId, root);
15295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
15305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1532a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} hostId
1533a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} rootId
15345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
15355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    shadowRootPopped: function(hostId, rootId)
15365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
15375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        this._domAgent._shadowRootPopped(hostId, rootId);
15389bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    },
15399bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)
15409bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    /**
1541a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1542a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.Node} pseudoElement
15439bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)     */
15449bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    pseudoElementAdded: function(parentId, pseudoElement)
15459bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    {
15469bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)        this._domAgent._pseudoElementAdded(parentId, pseudoElement);
15479bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    },
15489bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)
15499bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    /**
1550a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} parentId
1551a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} pseudoElementId
15529bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)     */
15539bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    pseudoElementRemoved: function(parentId, pseudoElementId)
15549bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    {
15559bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)        this._domAgent._pseudoElementRemoved(parentId, pseudoElementId);
15565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
15575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
15585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
15595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
1560c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * @interface
1561c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) */
1562c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)WebInspector.DOMNodeHighlighter = function() {
1563c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)}
1564c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
1565c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)WebInspector.DOMNodeHighlighter.prototype = {
1566c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    /**
1567a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
1568a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.HighlightConfig} config
1569a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!RuntimeAgent.RemoteObjectId=} objectId
1570c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     */
15718abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    highlightDOMNode: function(nodeId, config, objectId) {},
15728abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
15738abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    /**
15748abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)     * @param {boolean} enabled
15758abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)     * @param {boolean} inspectShadowDOM
1576a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.HighlightConfig} config
1577e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
15788abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)     */
15798abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    setInspectModeEnabled: function(enabled, inspectShadowDOM, config, callback) {}
1580c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)}
1581c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
1582c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)/**
1583c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * @constructor
1584c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * @implements {WebInspector.DOMNodeHighlighter}
1585c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) */
1586c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)WebInspector.DefaultDOMNodeHighlighter = function() {
1587c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)}
1588c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
1589c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)WebInspector.DefaultDOMNodeHighlighter.prototype = {
1590c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    /**
1591a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.NodeId} nodeId
1592a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.HighlightConfig} config
1593a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!RuntimeAgent.RemoteObjectId=} objectId
1594c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)     */
1595c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    highlightDOMNode: function(nodeId, config, objectId)
1596c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    {
1597c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        if (objectId || nodeId)
1598c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            DOMAgent.highlightNode(config, objectId ? undefined : nodeId, objectId);
1599c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)        else
1600c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)            DOMAgent.hideHighlight();
16018abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    },
16028abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
16038abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    /**
16048abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)     * @param {boolean} enabled
16058abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)     * @param {boolean} inspectShadowDOM
1606a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!DOMAgent.HighlightConfig} config
1607e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)     * @param {function(?Protocol.Error)=} callback
16088abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)     */
16098abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    setInspectModeEnabled: function(enabled, inspectShadowDOM, config, callback)
16108abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    {
16118abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)        DOMAgent.setInspectModeEnabled(enabled, inspectShadowDOM, config, callback);
1612c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    }
1613c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)}
1614c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
1615c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)/**
1616e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles) * @type {!WebInspector.DOMAgent}
16175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
1618e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)WebInspector.domAgent;
1619