Index: chrome_frame/tools/test/reference_build/chrome/resources/inspector/Resource.js |
=================================================================== |
--- chrome_frame/tools/test/reference_build/chrome/resources/inspector/Resource.js (revision 0) |
+++ chrome_frame/tools/test/reference_build/chrome/resources/inspector/Resource.js (revision 0) |
@@ -0,0 +1,622 @@ |
+/* |
+ * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. |
+ * |
+ * Redistribution and use in source and binary forms, with or without |
+ * modification, are permitted provided that the following conditions |
+ * are met: |
+ * |
+ * 1. Redistributions of source code must retain the above copyright |
+ * notice, this list of conditions and the following disclaimer. |
+ * 2. Redistributions in binary form must reproduce the above copyright |
+ * notice, this list of conditions and the following disclaimer in the |
+ * documentation and/or other materials provided with the distribution. |
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of |
+ * its contributors may be used to endorse or promote products derived |
+ * from this software without specific prior written permission. |
+ * |
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY |
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ */ |
+ |
+WebInspector.Resource = function(requestHeaders, url, domain, path, lastPathComponent, identifier, mainResource, cached, requestMethod, requestFormData) |
+{ |
+ this.identifier = identifier; |
+ |
+ this.startTime = -1; |
+ this.endTime = -1; |
+ this.mainResource = mainResource; |
+ this.requestHeaders = requestHeaders; |
+ this.url = url; |
+ this.domain = domain; |
+ this.path = path; |
+ this.lastPathComponent = lastPathComponent; |
+ this.cached = cached; |
+ this.requestMethod = requestMethod || ""; |
+ this.requestFormData = requestFormData || ""; |
+ |
+ this.category = WebInspector.resourceCategories.other; |
+} |
+ |
+// Keep these in sync with WebCore::InspectorResource::Type |
+WebInspector.Resource.Type = { |
+ Document: 0, |
+ Stylesheet: 1, |
+ Image: 2, |
+ Font: 3, |
+ Script: 4, |
+ XHR: 5, |
+ Other: 6, |
+ |
+ isTextType: function(type) |
+ { |
+ return (type === this.Document) || (type === this.Stylesheet) || (type === this.Script) || (type === this.XHR); |
+ }, |
+ |
+ toString: function(type) |
+ { |
+ switch (type) { |
+ case this.Document: |
+ return WebInspector.UIString("document"); |
+ case this.Stylesheet: |
+ return WebInspector.UIString("stylesheet"); |
+ case this.Image: |
+ return WebInspector.UIString("image"); |
+ case this.Font: |
+ return WebInspector.UIString("font"); |
+ case this.Script: |
+ return WebInspector.UIString("script"); |
+ case this.XHR: |
+ return WebInspector.UIString("XHR"); |
+ case this.Other: |
+ default: |
+ return WebInspector.UIString("other"); |
+ } |
+ } |
+} |
+ |
+WebInspector.Resource.prototype = { |
+ get url() |
+ { |
+ return this._url; |
+ }, |
+ |
+ set url(x) |
+ { |
+ if (this._url === x) |
+ return; |
+ |
+ var oldURL = this._url; |
+ this._url = x; |
+ |
+ // FIXME: We should make the WebInspector object listen for the "url changed" event. |
+ // Then resourceURLChanged can be removed. |
+ WebInspector.resourceURLChanged(this, oldURL); |
+ |
+ this.dispatchEventToListeners("url changed"); |
+ }, |
+ |
+ get domain() |
+ { |
+ return this._domain; |
+ }, |
+ |
+ set domain(x) |
+ { |
+ if (this._domain === x) |
+ return; |
+ this._domain = x; |
+ }, |
+ |
+ get lastPathComponent() |
+ { |
+ return this._lastPathComponent; |
+ }, |
+ |
+ set lastPathComponent(x) |
+ { |
+ if (this._lastPathComponent === x) |
+ return; |
+ this._lastPathComponent = x; |
+ this._lastPathComponentLowerCase = x ? x.toLowerCase() : null; |
+ }, |
+ |
+ get displayName() |
+ { |
+ var title = this.lastPathComponent; |
+ if (!title) |
+ title = this.displayDomain; |
+ if (!title && this.url) |
+ title = this.url.trimURL(WebInspector.mainResource ? WebInspector.mainResource.domain : ""); |
+ if (title === "/") |
+ title = this.url; |
+ return title; |
+ }, |
+ |
+ get displayDomain() |
+ { |
+ // WebInspector.Database calls this, so don't access more than this.domain. |
+ if (this.domain && (!WebInspector.mainResource || (WebInspector.mainResource && this.domain !== WebInspector.mainResource.domain))) |
+ return this.domain; |
+ return ""; |
+ }, |
+ |
+ get startTime() |
+ { |
+ return this._startTime || -1; |
+ }, |
+ |
+ set startTime(x) |
+ { |
+ if (this._startTime === x) |
+ return; |
+ |
+ this._startTime = x; |
+ |
+ if (WebInspector.panels.resources) |
+ WebInspector.panels.resources.refreshResource(this); |
+ }, |
+ |
+ get responseReceivedTime() |
+ { |
+ return this._responseReceivedTime || -1; |
+ }, |
+ |
+ set responseReceivedTime(x) |
+ { |
+ if (this._responseReceivedTime === x) |
+ return; |
+ |
+ this._responseReceivedTime = x; |
+ |
+ if (WebInspector.panels.resources) |
+ WebInspector.panels.resources.refreshResource(this); |
+ }, |
+ |
+ get endTime() |
+ { |
+ return this._endTime || -1; |
+ }, |
+ |
+ set endTime(x) |
+ { |
+ if (this._endTime === x) |
+ return; |
+ |
+ this._endTime = x; |
+ |
+ if (WebInspector.panels.resources) |
+ WebInspector.panels.resources.refreshResource(this); |
+ }, |
+ |
+ get duration() |
+ { |
+ if (this._endTime === -1 || this._startTime === -1) |
+ return -1; |
+ return this._endTime - this._startTime; |
+ }, |
+ |
+ get latency() |
+ { |
+ if (this._responseReceivedTime === -1 || this._startTime === -1) |
+ return -1; |
+ return this._responseReceivedTime - this._startTime; |
+ }, |
+ |
+ get contentLength() |
+ { |
+ return this._contentLength || 0; |
+ }, |
+ |
+ set contentLength(x) |
+ { |
+ if (this._contentLength === x) |
+ return; |
+ |
+ this._contentLength = x; |
+ |
+ if (WebInspector.panels.resources) |
+ WebInspector.panels.resources.refreshResource(this); |
+ }, |
+ |
+ get expectedContentLength() |
+ { |
+ return this._expectedContentLength || 0; |
+ }, |
+ |
+ set expectedContentLength(x) |
+ { |
+ if (this._expectedContentLength === x) |
+ return; |
+ this._expectedContentLength = x; |
+ }, |
+ |
+ get finished() |
+ { |
+ return this._finished; |
+ }, |
+ |
+ set finished(x) |
+ { |
+ if (this._finished === x) |
+ return; |
+ |
+ this._finished = x; |
+ |
+ if (x) { |
+ this._checkTips(); |
+ this._checkWarnings(); |
+ this.dispatchEventToListeners("finished"); |
+ } |
+ }, |
+ |
+ get failed() |
+ { |
+ return this._failed; |
+ }, |
+ |
+ set failed(x) |
+ { |
+ this._failed = x; |
+ }, |
+ |
+ get category() |
+ { |
+ return this._category; |
+ }, |
+ |
+ set category(x) |
+ { |
+ if (this._category === x) |
+ return; |
+ |
+ var oldCategory = this._category; |
+ if (oldCategory) |
+ oldCategory.removeResource(this); |
+ |
+ this._category = x; |
+ |
+ if (this._category) |
+ this._category.addResource(this); |
+ |
+ if (WebInspector.panels.resources) { |
+ WebInspector.panels.resources.refreshResource(this); |
+ WebInspector.panels.resources.recreateViewForResourceIfNeeded(this); |
+ } |
+ }, |
+ |
+ get mimeType() |
+ { |
+ return this._mimeType; |
+ }, |
+ |
+ set mimeType(x) |
+ { |
+ if (this._mimeType === x) |
+ return; |
+ |
+ this._mimeType = x; |
+ }, |
+ |
+ get type() |
+ { |
+ return this._type; |
+ }, |
+ |
+ set type(x) |
+ { |
+ if (this._type === x) |
+ return; |
+ |
+ this._type = x; |
+ |
+ switch (x) { |
+ case WebInspector.Resource.Type.Document: |
+ this.category = WebInspector.resourceCategories.documents; |
+ break; |
+ case WebInspector.Resource.Type.Stylesheet: |
+ this.category = WebInspector.resourceCategories.stylesheets; |
+ break; |
+ case WebInspector.Resource.Type.Script: |
+ this.category = WebInspector.resourceCategories.scripts; |
+ break; |
+ case WebInspector.Resource.Type.Image: |
+ this.category = WebInspector.resourceCategories.images; |
+ break; |
+ case WebInspector.Resource.Type.Font: |
+ this.category = WebInspector.resourceCategories.fonts; |
+ break; |
+ case WebInspector.Resource.Type.XHR: |
+ this.category = WebInspector.resourceCategories.xhr; |
+ break; |
+ case WebInspector.Resource.Type.Other: |
+ default: |
+ this.category = WebInspector.resourceCategories.other; |
+ break; |
+ } |
+ }, |
+ |
+ get requestHeaders() |
+ { |
+ if (this._requestHeaders === undefined) |
+ this._requestHeaders = {}; |
+ return this._requestHeaders; |
+ }, |
+ |
+ set requestHeaders(x) |
+ { |
+ if (this._requestHeaders === x) |
+ return; |
+ |
+ this._requestHeaders = x; |
+ delete this._sortedRequestHeaders; |
+ |
+ this.dispatchEventToListeners("requestHeaders changed"); |
+ }, |
+ |
+ get sortedRequestHeaders() |
+ { |
+ if (this._sortedRequestHeaders !== undefined) |
+ return this._sortedRequestHeaders; |
+ |
+ this._sortedRequestHeaders = []; |
+ for (var key in this.requestHeaders) |
+ this._sortedRequestHeaders.push({header: key, value: this.requestHeaders[key]}); |
+ this._sortedRequestHeaders.sort(function(a,b) { return a.header.localeCompare(b.header) }); |
+ |
+ return this._sortedRequestHeaders; |
+ }, |
+ |
+ get responseHeaders() |
+ { |
+ if (this._responseHeaders === undefined) |
+ this._responseHeaders = {}; |
+ return this._responseHeaders; |
+ }, |
+ |
+ set responseHeaders(x) |
+ { |
+ if (this._responseHeaders === x) |
+ return; |
+ |
+ this._responseHeaders = x; |
+ delete this._sortedResponseHeaders; |
+ |
+ this.dispatchEventToListeners("responseHeaders changed"); |
+ }, |
+ |
+ get sortedResponseHeaders() |
+ { |
+ if (this._sortedResponseHeaders !== undefined) |
+ return this._sortedResponseHeaders; |
+ |
+ this._sortedResponseHeaders = []; |
+ for (var key in this.responseHeaders) |
+ this._sortedResponseHeaders.push({header: key, value: this.responseHeaders[key]}); |
+ this._sortedResponseHeaders.sort(function(a,b) { return a.header.localeCompare(b.header) }); |
+ |
+ return this._sortedResponseHeaders; |
+ }, |
+ |
+ get scripts() |
+ { |
+ if (!("_scripts" in this)) |
+ this._scripts = []; |
+ return this._scripts; |
+ }, |
+ |
+ addScript: function(script) |
+ { |
+ if (!script) |
+ return; |
+ this.scripts.unshift(script); |
+ script.resource = this; |
+ }, |
+ |
+ removeAllScripts: function() |
+ { |
+ if (!this._scripts) |
+ return; |
+ |
+ for (var i = 0; i < this._scripts.length; ++i) { |
+ if (this._scripts[i].resource === this) |
+ delete this._scripts[i].resource; |
+ } |
+ |
+ delete this._scripts; |
+ }, |
+ |
+ removeScript: function(script) |
+ { |
+ if (!script) |
+ return; |
+ |
+ if (script.resource === this) |
+ delete script.resource; |
+ |
+ if (!this._scripts) |
+ return; |
+ |
+ this._scripts.remove(script); |
+ }, |
+ |
+ get errors() |
+ { |
+ return this._errors || 0; |
+ }, |
+ |
+ set errors(x) |
+ { |
+ this._errors = x; |
+ }, |
+ |
+ get warnings() |
+ { |
+ return this._warnings || 0; |
+ }, |
+ |
+ set warnings(x) |
+ { |
+ this._warnings = x; |
+ }, |
+ |
+ get tips() |
+ { |
+ if (!("_tips" in this)) |
+ this._tips = {}; |
+ return this._tips; |
+ }, |
+ |
+ _addTip: function(tip) |
+ { |
+ if (tip.id in this.tips) |
+ return; |
+ |
+ this.tips[tip.id] = tip; |
+ |
+ // FIXME: Re-enable this code once we have a scope bar in the Console. |
+ // Otherwise, we flood the Console with too many tips. |
+ /* |
+ var msg = new WebInspector.ConsoleMessage(WebInspector.ConsoleMessage.MessageSource.Other, |
+ WebInspector.ConsoleMessage.MessageType.Log, WebInspector.ConsoleMessage.MessageLevel.Tip, |
+ -1, this.url, null, 1, tip.message); |
+ WebInspector.console.addMessage(msg); |
+ */ |
+ }, |
+ |
+ _checkTips: function() |
+ { |
+ for (var tip in WebInspector.Tips) |
+ this._checkTip(WebInspector.Tips[tip]); |
+ }, |
+ |
+ _checkTip: function(tip) |
+ { |
+ var addTip = false; |
+ switch (tip.id) { |
+ case WebInspector.Tips.ResourceNotCompressed.id: |
+ addTip = this._shouldCompress(); |
+ break; |
+ } |
+ |
+ if (addTip) |
+ this._addTip(tip); |
+ }, |
+ |
+ _shouldCompress: function() |
+ { |
+ return WebInspector.Resource.Type.isTextType(this.type) |
+ && this.domain |
+ && !("Content-Encoding" in this.responseHeaders) |
+ && this.contentLength !== undefined |
+ && this.contentLength >= 512; |
+ }, |
+ |
+ _mimeTypeIsConsistentWithType: function() |
+ { |
+ if (typeof this.type === "undefined" |
+ || this.type === WebInspector.Resource.Type.Other |
+ || this.type === WebInspector.Resource.Type.XHR) |
+ return true; |
+ |
+ if (this.mimeType in WebInspector.MIMETypes) |
+ return this.type in WebInspector.MIMETypes[this.mimeType]; |
+ |
+ return true; |
+ }, |
+ |
+ _checkWarnings: function() |
+ { |
+ for (var warning in WebInspector.Warnings) |
+ this._checkWarning(WebInspector.Warnings[warning]); |
+ }, |
+ |
+ _checkWarning: function(warning) |
+ { |
+ var msg; |
+ switch (warning.id) { |
+ case WebInspector.Warnings.IncorrectMIMEType.id: |
+ if (!this._mimeTypeIsConsistentWithType()) |
+ msg = new WebInspector.ConsoleMessage(WebInspector.ConsoleMessage.MessageSource.Other, |
+ WebInspector.ConsoleMessage.MessageType.Log, |
+ WebInspector.ConsoleMessage.MessageLevel.Warning, -1, this.url, null, 1, |
+ String.sprintf(WebInspector.Warnings.IncorrectMIMEType.message, |
+ WebInspector.Resource.Type.toString(this.type), this.mimeType)); |
+ break; |
+ } |
+ |
+ if (msg) |
+ WebInspector.console.addMessage(msg); |
+ } |
+} |
+ |
+WebInspector.Resource.prototype.__proto__ = WebInspector.Object.prototype; |
+ |
+WebInspector.Resource.CompareByStartTime = function(a, b) |
+{ |
+ if (a.startTime < b.startTime) |
+ return -1; |
+ if (a.startTime > b.startTime) |
+ return 1; |
+ return 0; |
+} |
+ |
+WebInspector.Resource.CompareByResponseReceivedTime = function(a, b) |
+{ |
+ if (a.responseReceivedTime === -1 && b.responseReceivedTime !== -1) |
+ return 1; |
+ if (a.responseReceivedTime !== -1 && b.responseReceivedTime === -1) |
+ return -1; |
+ if (a.responseReceivedTime < b.responseReceivedTime) |
+ return -1; |
+ if (a.responseReceivedTime > b.responseReceivedTime) |
+ return 1; |
+ return 0; |
+} |
+ |
+WebInspector.Resource.CompareByEndTime = function(a, b) |
+{ |
+ if (a.endTime === -1 && b.endTime !== -1) |
+ return 1; |
+ if (a.endTime !== -1 && b.endTime === -1) |
+ return -1; |
+ if (a.endTime < b.endTime) |
+ return -1; |
+ if (a.endTime > b.endTime) |
+ return 1; |
+ return 0; |
+} |
+ |
+WebInspector.Resource.CompareByDuration = function(a, b) |
+{ |
+ if (a.duration < b.duration) |
+ return -1; |
+ if (a.duration > b.duration) |
+ return 1; |
+ return 0; |
+} |
+ |
+WebInspector.Resource.CompareByLatency = function(a, b) |
+{ |
+ if (a.latency < b.latency) |
+ return -1; |
+ if (a.latency > b.latency) |
+ return 1; |
+ return 0; |
+} |
+ |
+WebInspector.Resource.CompareBySize = function(a, b) |
+{ |
+ if (a.contentLength < b.contentLength) |
+ return -1; |
+ if (a.contentLength > b.contentLength) |
+ return 1; |
+ return 0; |
+} |