15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007, 2008 Apple Inc.  All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1.  Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2.  Redistributions in binary form must reproduce the above copyright
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer in the
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     documentation and/or other materials provided with the distribution.
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     its contributors may be used to endorse or promote products derived
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     from this software without specific prior written permission.
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/**
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor
31197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @extends {WebInspector.SDKObject}
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {WebInspector.ContentProvider}
33197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.Target} target
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?WebInspector.NetworkRequest} request
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} url
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} documentURL
37a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!PageAgent.FrameId} frameId
38a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!NetworkAgent.LoaderId} loaderId
39a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ResourceType} type
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} mimeType
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean=} isHidden
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
43197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.Resource = function(target, request, url, documentURL, frameId, loaderId, type, mimeType, isHidden)
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
45197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    WebInspector.SDKObject.call(this, target);
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._request = request;
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this.url = url;
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._documentURL = documentURL;
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._frameId = frameId;
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._loaderId = loaderId;
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._type = type || WebInspector.resourceTypes.Other;
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._mimeType = mimeType;
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._isHidden = isHidden;
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /** @type {?string} */ this._content;
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /** @type {boolean} */ this._contentEncoded;
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    this._pendingContentCallbacks = [];
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (this._request && !this._request.finished)
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._request.addEventListener(WebInspector.NetworkRequest.Events.FinishedLoading, this._requestFinished, this);
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.Resource.Events = {
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    MessageAdded: "message-added",
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    MessagesCleared: "messages-cleared",
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
67e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)/**
68e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {?string} content
69e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {string} mimeType
70e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {boolean} contentEncoded
71e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @return {?string}
72e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */
73e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.Resource.contentAsDataURL = function(content, mimeType, contentEncoded)
74e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){
75e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    const maxDataUrlSize = 1024 * 1024;
76e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    if (content === null || content.length > maxDataUrlSize)
77e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        return null;
78e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)
79e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    return "data:" + mimeType + (contentEncoded ? ";base64," : ",") + content;
80e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)}
81e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.Resource.prototype = {
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {?WebInspector.NetworkRequest}
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get request()
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._request;
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get url()
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._url;
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set url(x)
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._url = x;
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._parsedURL = new WebInspector.ParsedURL(x);
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get parsedURL()
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._parsedURL;
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get documentURL()
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._documentURL;
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
119a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!PageAgent.FrameId}
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get frameId()
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._frameId;
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
127a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!NetworkAgent.LoaderId}
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get loaderId()
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._loaderId;
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get displayName()
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._parsedURL.displayName;
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
143a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.ResourceType}
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get type()
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._request ? this._request.type : this._type;
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get mimeType()
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._request ? this._request.mimeType : this._mimeType;
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
159a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!Array.<!WebInspector.ConsoleMessage>}
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get messages()
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._messages || [];
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
167a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!WebInspector.ConsoleMessage} msg
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    addMessage: function(msg)
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
171d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        if (!msg.isErrorOrWarning() || !msg.messageText)
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._messages)
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._messages = [];
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._messages.push(msg);
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.Resource.Events.MessageAdded, msg);
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {number}
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get errors()
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._errors || 0;
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set errors(x)
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._errors = x;
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {number}
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get warnings()
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._warnings || 0;
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    set warnings(x)
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._warnings = x;
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    clearErrorsAndWarnings: function()
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._messages = [];
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._warnings = 0;
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._errors = 0;
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.dispatchEventToListeners(WebInspector.Resource.Events.MessagesCleared);
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {?string}
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get content()
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._content;
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    get contentEncoded()
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._contentEncoded;
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {string}
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    contentURL: function()
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this._url;
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
239a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @return {!WebInspector.ResourceType}
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    contentType: function()
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this.type;
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)     * @param {function(?string)} callback
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    requestContent: function(callback)
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (typeof this._content !== "undefined") {
2521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            callback(this._content);
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._pendingContentCallbacks.push(callback);
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!this._request || this._request.finished)
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._innerRequestContent();
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
26109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    /**
26209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @return {string}
26309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     */
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    canonicalMimeType: function()
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return this.type.canonicalMimeType() || this.mimeType;
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {string} query
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} caseSensitive
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param {boolean} isRegex
273a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {function(!Array.<!WebInspector.ContentProvider.SearchMatch>)} callback
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    searchInContent: function(query, caseSensitive, isRegex, callback)
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
279a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {!Array.<!PageAgent.SearchMatch>} searchMatches
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function callbackWrapper(error, searchMatches)
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback(searchMatches || []);
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
286521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        if (this.type === WebInspector.resourceTypes.Document) {
28709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)            callback([]);
288521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)            return;
289521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        }
290521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.frameId)
292197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch            this.target().pageAgent().searchInResource(this.frameId, this.url, query, caseSensitive, isRegex, callbackWrapper);
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        else
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            callback([]);
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
298a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)     * @param {!Element} image
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    populateImageSource: function(image)
3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3021e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        /**
3031e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)         * @param {?string} content
30409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.Resource}
3051e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)         */
3061e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        function onResourceContent(content)
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
308e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)            var imageSrc = WebInspector.Resource.contentAsDataURL(this._content, this.mimeType, this._contentEncoded);
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            if (imageSrc === null)
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                imageSrc = this.url;
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            image.src = imageSrc;
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this.requestContent(onResourceContent.bind(this));
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _requestFinished: function()
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._request.removeEventListener(WebInspector.NetworkRequest.Events.FinishedLoading, this._requestFinished, this);
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._pendingContentCallbacks.length)
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._innerRequestContent();
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    _innerRequestContent: function()
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this._contentRequested)
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        this._contentRequested = true;
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
332e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch         * @param {?Protocol.Error} error
333e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch         * @param {?string} content
334e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch         * @param {boolean} contentEncoded
33509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.Resource}
336e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch         */
337e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        function contentLoaded(error, content, contentEncoded)
338e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        {
339e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            if (error || content === null) {
34009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)                replyWithContent.call(this, null, false);
341e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch                return;
342e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            }
343e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            replyWithContent.call(this, content, contentEncoded);
344e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        }
345e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
346e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        /**
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?string} content
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {boolean} contentEncoded
34909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.Resource}
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
351e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        function replyWithContent(content, contentEncoded)
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._content = content;
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._contentEncoded = contentEncoded;
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            var callbacks = this._pendingContentCallbacks.slice();
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            for (var i = 0; i < callbacks.length; ++i)
3571e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)                callbacks[i](this._content);
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this._pendingContentCallbacks.length = 0;
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            delete this._contentRequested;
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        /**
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {?Protocol.Error} error
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {string} content
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         * @param {boolean} contentEncoded
36609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.Resource}
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         */
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function resourceContentLoaded(error, content, contentEncoded)
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
370e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch            contentLoaded.call(this, error, content, contentEncoded);
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
372521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (this.request) {
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            this.request.requestContent(requestContentLoaded.bind(this));
3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return;
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
377a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
378a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        /**
379a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         * @param {?string} content
38009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         * @this {WebInspector.Resource}
381a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)         */
382a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        function requestContentLoaded(content)
383a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        {
384a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)            contentLoaded.call(this, null, content, this.request.contentEncoded);
385a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        }
386a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
387197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        this.target().pageAgent().getResourceContent(this.frameId, this.url, resourceContentLoaded.bind(this));
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @return {boolean}
3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    isHidden: function()
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return !!this._isHidden;
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    },
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
398197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    __proto__: WebInspector.SDKObject.prototype
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
401