summaryrefslogtreecommitdiff
path: root/Source/WebInspectorUI/UserInterface/FrameResourceManager.js
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebInspectorUI/UserInterface/FrameResourceManager.js
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebInspectorUI/UserInterface/FrameResourceManager.js')
-rw-r--r--Source/WebInspectorUI/UserInterface/FrameResourceManager.js586
1 files changed, 0 insertions, 586 deletions
diff --git a/Source/WebInspectorUI/UserInterface/FrameResourceManager.js b/Source/WebInspectorUI/UserInterface/FrameResourceManager.js
deleted file mode 100644
index 2c556f2be..000000000
--- a/Source/WebInspectorUI/UserInterface/FrameResourceManager.js
+++ /dev/null
@@ -1,586 +0,0 @@
-/*
- * Copyright (C) 2013 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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. 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 INC. 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.FrameResourceManager = function()
-{
- WebInspector.Object.call(this);
-
- if (window.PageAgent)
- PageAgent.enable();
- if (window.NetworkAgent)
- NetworkAgent.enable();
-
- this.initialize();
-};
-
-WebInspector.Object.addConstructorFunctions(WebInspector.FrameResourceManager);
-
-WebInspector.FrameResourceManager.Event = {
- FrameWasAdded: "frame-resource-manager-frame-was-added",
- FrameWasRemoved: "frame-resource-manager-frame-was-removed",
- MainFrameDidChange: "frame-resource-manager-main-frame-did-change"
-};
-
-WebInspector.FrameResourceManager.prototype = {
- constructor: WebInspector.FrameResourceManager,
-
- // Public
-
- initialize: function()
- {
- var oldMainFrame = this._mainFrame;
-
- this._frameIdentifierMap = {};
- this._mainFrame = null;
- this._resourceRequestIdentifierMap = {};
-
- if (this._mainFrame !== oldMainFrame)
- this._mainFrameDidChange(oldMainFrame);
-
- this._waitingForMainFrameResourceTreePayload = true;
- if (window.PageAgent)
- PageAgent.getResourceTree(this._processMainFrameResourceTreePayload.bind(this));
- },
-
- get mainFrame()
- {
- return this._mainFrame;
- },
-
- get frames()
- {
- var frames = [];
- for (var key in this._frameIdentifierMap)
- frames.push(this._frameIdentifierMap[key]);
-
- return frames;
- },
-
- frameForIdentifier: function(frameId)
- {
- return this._frameIdentifierMap[frameId] || null;
- },
-
- frameDidNavigate: function(framePayload)
- {
- // Called from WebInspector.PageObserver.
-
- // Ignore this while waiting for the whole frame/resource tree.
- if (this._waitingForMainFrameResourceTreePayload)
- return;
-
- var frameWasLoadedInstantly = false;
-
- var frame = this.frameForIdentifier(framePayload.id);
- if (!frame) {
- // If the frame wasn't known before now, then the main resource was loaded instantly (about:blank, etc.)
- // Make a new resource (which will make the frame). Mark will mark it as loaded at the end too since we
- // don't expect any more events about the load finishing for these frames.
- var frameResource = this._addNewResourceToFrame(null, framePayload.id, framePayload.loaderId, framePayload.url, null, null, null, null, null, framePayload.name, framePayload.securityOrigin);
- frame = frameResource.parentFrame;
- frameWasLoadedInstantly = true;
-
- console.assert(frame);
- if (!frame)
- return;
- }
-
- if (framePayload.loaderId === frame.provisionalLoaderIdentifier) {
- // There was a provisional load in progress, commit it.
- frame.commitProvisionalLoad(framePayload.securityOrigin);
- } else {
- if (frame.mainResource.url !== framePayload.url || frame.loaderIdentifier !== framePayload.loaderId) {
- // Navigations like back/forward do not have provisional loads, so create a new main resource here.
- var mainResource = new WebInspector.Resource(framePayload.url, framePayload.mimeType, null, framePayload.loaderId);
- } else {
- // The main resource is already correct, so reuse it.
- var mainResource = frame.mainResource;
- }
-
- frame.initialize(framePayload.name, framePayload.securityOrigin, framePayload.loaderId, mainResource);
- }
-
- var oldMainFrame = this._mainFrame;
-
- if (framePayload.parentId) {
- var parentFrame = this.frameForIdentifier(framePayload.parentId);
- console.assert(parentFrame);
-
- if (frame === this._mainFrame)
- this._mainFrame = null;
-
- if (frame.parentFrame !== parentFrame)
- parentFrame.addChildFrame(frame);
- } else {
- if (frame.parentFrame)
- frame.parentFrame.removeChildFrame(frame);
- this._mainFrame = frame;
- }
-
- if (this._mainFrame !== oldMainFrame)
- this._mainFrameDidChange(oldMainFrame);
-
- if (frameWasLoadedInstantly)
- frame.mainResource.markAsFinished();
- },
-
- frameDidDetach: function(frameId)
- {
- // Called from WebInspector.PageObserver.
-
- // Ignore this while waiting for the whole frame/resource tree.
- if (this._waitingForMainFrameResourceTreePayload)
- return;
-
- var frame = this.frameForIdentifier(frameId);
- if (!frame)
- return;
-
- if (frame.parentFrame)
- frame.parentFrame.removeChildFrame(frame);
-
- delete this._frameIdentifierMap[frame.id];
-
- var oldMainFrame = this._mainFrame;
-
- if (frame === this._mainFrame)
- this._mainFrame = null;
-
- frame.clearExecutionContexts();
-
- this.dispatchEventToListeners(WebInspector.FrameResourceManager.Event.FrameWasRemoved, {frame: frame});
-
- if (this._mainFrame !== oldMainFrame)
- this._mainFrameDidChange(oldMainFrame);
- },
-
- resourceRequestWillBeSent: function(requestIdentifier, frameIdentifier, loaderIdentifier, request, type, redirectResponse, timestamp, initiator)
- {
- // Called from WebInspector.NetworkObserver.
-
- // Ignore this while waiting for the whole frame/resource tree.
- if (this._waitingForMainFrameResourceTreePayload)
- return;
-
- var resource = this._resourceRequestIdentifierMap[requestIdentifier];
- if (resource) {
- // This is an existing request which is being redirected, update the resource.
- console.assert(redirectResponse);
- resource.updateForRedirectResponse(request.url, request.headers, timestamp);
- return;
- }
-
- var initiatorSourceCodeLocation = this._initiatorSourceCodeLocationFromPayload(initiator);
-
- // This is a new request, make a new resource and add it to the right frame.
- resource = this._addNewResourceToFrame(requestIdentifier, frameIdentifier, loaderIdentifier, request.url, type, request.method, request.headers, request.postData, timestamp, null, null, initiatorSourceCodeLocation);
-
- // Associate the resource with the requestIdentifier so it can be found in future loading events.
- this._resourceRequestIdentifierMap[requestIdentifier] = resource;
- },
-
- markResourceRequestAsServedFromMemoryCache: function(requestIdentifier)
- {
- // Called from WebInspector.NetworkObserver.
-
- // Ignore this while waiting for the whole frame/resource tree.
- if (this._waitingForMainFrameResourceTreePayload)
- return;
-
- var resource = this._resourceRequestIdentifierMap[requestIdentifier];
-
- // We might not have a resource if the inspector was opened during the page load (after resourceRequestWillBeSent is called).
- // We don't want to assert in this case since we do likely have the resource, via PageAgent.getResourceTree. The Resource
- // just doesn't have a requestIdentifier for us to look it up.
- if (!resource)
- return;
-
- resource.markAsCached();
- },
-
- resourceRequestWasServedFromMemoryCache: function(requestIdentifier, frameIdentifier, loaderIdentifier, cachedResourcePayload, timestamp, initiator)
- {
- // Called from WebInspector.NetworkObserver.
-
- // Ignore this while waiting for the whole frame/resource tree.
- if (this._waitingForMainFrameResourceTreePayload)
- return;
-
- console.assert(!(requestIdentifier in this._resourceRequestIdentifierMap));
-
- var initiatorSourceCodeLocation = this._initiatorSourceCodeLocationFromPayload(initiator);
-
- var response = cachedResourcePayload.response;
- var resource = this._addNewResourceToFrame(requestIdentifier, frameIdentifier, loaderIdentifier, cachedResourcePayload.url, cachedResourcePayload.type, null, null, timestamp, null, null, initiatorSourceCodeLocation);
- resource.markAsCached();
- resource.updateForResponse(cachedResourcePayload.url, response.mimeType, cachedResourcePayload.type, response.headers, response.status, response.statusText, timestamp);
- resource.markAsFinished(timestamp);
-
- if (cachedResourcePayload.sourceMapURL)
- WebInspector.sourceMapManager.downloadSourceMap(cachedResourcePayload.sourceMapURL, resource.url, resource);
-
- // No need to associate the resource with the requestIdentifier, since this is the only event
- // sent for memory cache resource loads.
- },
-
- resourceRequestDidReceiveResponse: function(requestIdentifier, frameIdentifier, loaderIdentifier, type, response, timestamp)
- {
- // Called from WebInspector.NetworkObserver.
-
- // Ignore this while waiting for the whole frame/resource tree.
- if (this._waitingForMainFrameResourceTreePayload)
- return;
-
- var resource = this._resourceRequestIdentifierMap[requestIdentifier];
-
- // We might not have a resource if the inspector was opened during the page load (after resourceRequestWillBeSent is called).
- // We don't want to assert in this case since we do likely have the resource, via PageAgent.getResourceTree. The Resource
- // just doesn't have a requestIdentifier for us to look it up, but we can try to look it up by its URL.
- if (!resource) {
- var frame = this.frameForIdentifier(frameIdentifier);
- if (frame)
- resource = frame.resourceForURL(response.url);
-
- // If we find the resource this way we had marked it earlier as finished via PageAgent.getResourceTree.
- // Associate the resource with the requestIdentifier so it can be found in future loading events.
- // and roll it back to an unfinished state, we know now it is still loading.
- if (resource) {
- this._resourceRequestIdentifierMap[requestIdentifier] = resource;
- resource.revertMarkAsFinished();
- }
- }
-
- // If we haven't found an existing Resource by now, then it is a resource that was loading when the inspector
- // opened and we just missed the resourceRequestWillBeSent for it. So make a new resource and add it.
- if (!resource) {
- resource = this._addNewResourceToFrame(requestIdentifier, frameIdentifier, loaderIdentifier, response.url, type, null, response.requestHeaders, timestamp, null, null);
-
- // Associate the resource with the requestIdentifier so it can be found in future loading events.
- this._resourceRequestIdentifierMap[requestIdentifier] = resource;
- }
-
- if (response.fromDiskCache)
- resource.markAsCached();
-
- resource.updateForResponse(response.url, response.mimeType, type, response.headers, response.status, response.statusText, timestamp);
- },
-
- resourceRequestDidReceiveData: function(requestIdentifier, dataLength, encodedDataLength, timestamp)
- {
- // Called from WebInspector.NetworkObserver.
-
- // Ignore this while waiting for the whole frame/resource tree.
- if (this._waitingForMainFrameResourceTreePayload)
- return;
-
- var resource = this._resourceRequestIdentifierMap[requestIdentifier];
-
- // We might not have a resource if the inspector was opened during the page load (after resourceRequestWillBeSent is called).
- // We don't want to assert in this case since we do likely have the resource, via PageAgent.getResourceTree. The Resource
- // just doesn't have a requestIdentifier for us to look it up.
- if (!resource)
- return;
-
- resource.increaseSize(dataLength, timestamp);
-
- if (encodedDataLength !== -1)
- resource.increaseTransferSize(encodedDataLength);
- },
-
- resourceRequestDidFinishLoading: function(requestIdentifier, timestamp, sourceMapURL)
- {
- // Called from WebInspector.NetworkObserver.
-
- // Ignore this while waiting for the whole frame/resource tree.
- if (this._waitingForMainFrameResourceTreePayload)
- return;
-
- // By now we should always have the Resource. Either it was fetched when the inspector first opened with
- // PageAgent.getResourceTree, or it was a currently loading resource that we learned about in resourceRequestDidReceiveResponse.
- var resource = this._resourceRequestIdentifierMap[requestIdentifier];
- console.assert(resource);
- if (!resource)
- return;
-
- resource.markAsFinished(timestamp);
-
- if (sourceMapURL)
- WebInspector.sourceMapManager.downloadSourceMap(sourceMapURL, resource.url, resource);
-
- delete this._resourceRequestIdentifierMap[requestIdentifier];
- },
-
- resourceRequestDidFailLoading: function(requestIdentifier, canceled, timestamp)
- {
- // Called from WebInspector.NetworkObserver.
-
- // Ignore this while waiting for the whole frame/resource tree.
- if (this._waitingForMainFrameResourceTreePayload)
- return;
-
- // By now we should always have the Resource. Either it was fetched when the inspector first opened with
- // PageAgent.getResourceTree, or it was a currently loading resource that we learned about in resourceRequestDidReceiveResponse.
- var resource = this._resourceRequestIdentifierMap[requestIdentifier];
- console.assert(resource);
- if (!resource)
- return;
-
- resource.markAsFailed(canceled, timestamp);
-
- if (resource === resource.parentFrame.provisionalMainResource)
- resource.parentFrame.clearProvisionalLoad();
-
- delete this._resourceRequestIdentifierMap[requestIdentifier];
- },
-
- executionContextCreated: function(contextPayload)
- {
- // Called from WebInspector.RuntimeObserver.
-
- var frame = this.frameForIdentifier(contextPayload.frameId);
- console.assert(frame);
- if (!frame)
- return;
-
- var displayName = contextPayload.name || frame.mainResource.displayName;
- var executionContext = new WebInspector.ExecutionContext(contextPayload.id, displayName, contextPayload.isPageContext, frame);
- frame.addExecutionContext(executionContext);
- },
-
- resourceForURL: function(url)
- {
- if (!this._mainFrame)
- return null;
-
- if (this._mainFrame.mainResource.url === url)
- return this._mainFrame.mainResource;
-
- return this._mainFrame.resourceForURL(url, true);
- },
-
- // Private
-
- _addNewResourceToFrame: function(requestIdentifier, frameIdentifier, loaderIdentifier, url, type, requestMethod, requestHeaders, requestData, timestamp, frameName, frameSecurityOrigin, initiatorSourceCodeLocation)
- {
- console.assert(!this._waitingForMainFrameResourceTreePayload);
- if (this._waitingForMainFrameResourceTreePayload)
- return;
-
- var resource = null;
-
- var frame = this.frameForIdentifier(frameIdentifier);
- if (frame) {
- // This is a new request for an existing frame, which might be the main resource or a new resource.
- if (frame.mainResource.url === url && frame.loaderIdentifier === loaderIdentifier)
- resource = frame.mainResource;
- else if (frame.provisionalMainResource && frame.provisionalMainResource.url === url && frame.provisionalLoaderIdentifier === loaderIdentifier)
- resource = frame.provisionalMainResource;
- else {
- resource = new WebInspector.Resource(url, null, type, loaderIdentifier, requestIdentifier, requestMethod, requestHeaders, requestData, timestamp, initiatorSourceCodeLocation);
- this._addResourceToFrame(frame, resource);
- }
- } else {
- // This is a new request for a new frame, which is always the main resource.
- resource = new WebInspector.Resource(url, null, type, loaderIdentifier, requestIdentifier, requestMethod, requestHeaders, requestData, timestamp, initiatorSourceCodeLocation);
- frame = new WebInspector.Frame(frameIdentifier, frameName, frameSecurityOrigin, loaderIdentifier, resource);
- this._frameIdentifierMap[frame.id] = frame;
-
- // If we don't have a main frame, assume this is it. This can change later in
- // frameDidNavigate when the parent frame is known.
- if (!this._mainFrame) {
- this._mainFrame = frame;
- this._mainFrameDidChange(null);
- }
-
- this._dispatchFrameWasAddedEvent(frame);
- }
-
- console.assert(resource);
-
- return resource;
- },
-
- _addResourceToFrame: function(frame, resource)
- {
- console.assert(!this._waitingForMainFrameResourceTreePayload);
- if (this._waitingForMainFrameResourceTreePayload)
- return;
-
- console.assert(frame);
- console.assert(resource);
-
- if (resource.loaderIdentifier !== frame.loaderIdentifier && !frame.provisionalLoaderIdentifier) {
- // This is the start of a provisional load which happens before frameDidNavigate is called.
- // This resource will be the new mainResource if frameDidNavigate is called.
- frame.startProvisionalLoad(resource);
- return;
- }
-
- // This is just another resource, either for the main loader or the provisional loader.
- console.assert(resource.loaderIdentifier === frame.loaderIdentifier || resource.loaderIdentifier === frame.provisionalLoaderIdentifier);
- frame.addResource(resource);
- },
-
- _initiatorSourceCodeLocationFromPayload: function(initiatorPayload)
- {
- if (!initiatorPayload)
- return null;
-
- var url = null;
- var lineNumber = NaN;
- var columnNumber = 0;
-
- if (initiatorPayload.stackTrace && initiatorPayload.stackTrace.length) {
- var stackTracePayload = initiatorPayload.stackTrace;
- for (var i = 0; i < stackTracePayload.length; ++i) {
- var callFramePayload = stackTracePayload[i];
- if (!callFramePayload.url || callFramePayload.url === "[native code]")
- continue;
-
- url = callFramePayload.url;
-
- // The lineNumber is 1-based, but we expect 0-based.
- lineNumber = callFramePayload.lineNumber - 1;
-
- columnNumber = callFramePayload.columnNumber;
-
- break;
- }
- } else if (initiatorPayload.url) {
- url = initiatorPayload.url;
-
- // The lineNumber is 1-based, but we expect 0-based.
- lineNumber = initiatorPayload.lineNumber - 1;
- }
-
- if (!url || isNaN(lineNumber) || lineNumber < 0)
- return null;
-
- var sourceCode = WebInspector.frameResourceManager.resourceForURL(url);
- if (!sourceCode)
- sourceCode = WebInspector.debuggerManager.scriptsForURL(url)[0];
-
- if (!sourceCode)
- return null;
-
- return sourceCode.createSourceCodeLocation(lineNumber, columnNumber);
- },
-
- _processMainFrameResourceTreePayload: function(error, mainFramePayload)
- {
- console.assert(this._waitingForMainFrameResourceTreePayload);
- delete this._waitingForMainFrameResourceTreePayload;
-
- if (error) {
- console.error(JSON.stringify(error));
- return;
- }
-
- console.assert(mainFramePayload);
- console.assert(mainFramePayload.frame);
-
- this._resourceRequestIdentifierMap = {};
- this._frameIdentifierMap = {};
-
- var oldMainFrame = this._mainFrame;
-
- this._mainFrame = this._addFrameTreeFromFrameResourceTreePayload(mainFramePayload, true);
-
- if (this._mainFrame !== oldMainFrame)
- this._mainFrameDidChange(oldMainFrame);
- },
-
- _createFrame: function(payload)
- {
- // If payload.url is missing or empty then this page is likely the special empty page. In that case
- // we will just say it is "about:blank" so we have a URL, which is required for resources.
- var mainResource = new WebInspector.Resource(payload.url || "about:blank", payload.mimeType, null, payload.loaderId);
- var frame = new WebInspector.Frame(payload.id, payload.name, payload.securityOrigin, payload.loaderId, mainResource);
-
- this._frameIdentifierMap[frame.id] = frame;
-
- mainResource.markAsFinished();
-
- return frame;
- },
-
- _createResource: function(payload, framePayload)
- {
- var resource = new WebInspector.Resource(payload.url, payload.mimeType, payload.type, framePayload.loaderId);
-
- if (payload.sourceMapURL)
- WebInspector.sourceMapManager.downloadSourceMap(payload.sourceMapURL, resource.url, resource);
-
- return resource;
- },
-
- _addFrameTreeFromFrameResourceTreePayload: function(payload, isMainFrame)
- {
- var frame = this._createFrame(payload.frame);
- if (isMainFrame)
- frame.markAsMainFrame();
-
- for (var i = 0; payload.childFrames && i < payload.childFrames.length; ++i)
- frame.addChildFrame(this._addFrameTreeFromFrameResourceTreePayload(payload.childFrames[i], false));
-
- for (var i = 0; payload.resources && i < payload.resources.length; ++i) {
- var resourcePayload = payload.resources[i];
-
- // The main resource is included as a resource. We can skip it since we already created
- // a main resource when we created the Frame. The resource payload does not include anything
- // didn't already get from the frame payload.
- if (resourcePayload.type === "Document" && resourcePayload.url === payload.frame.url)
- continue;
-
- var resource = this._createResource(resourcePayload, payload);
- frame.addResource(resource);
-
- if (resourcePayload.failed || resourcePayload.canceled)
- resource.markAsFailed(resourcePayload.canceled);
- else
- resource.markAsFinished();
- }
-
- this._dispatchFrameWasAddedEvent(frame);
-
- return frame;
- },
-
- _dispatchFrameWasAddedEvent: function(frame)
- {
- this.dispatchEventToListeners(WebInspector.FrameResourceManager.Event.FrameWasAdded, {frame: frame});
- },
-
- _mainFrameDidChange: function(oldMainFrame)
- {
- if (oldMainFrame)
- oldMainFrame.unmarkAsMainFrame();
- if (this._mainFrame)
- this._mainFrame.markAsMainFrame();
- this.dispatchEventToListeners(WebInspector.FrameResourceManager.Event.MainFrameDidChange, {oldMainFrame: oldMainFrame});
- }
-};
-
-WebInspector.FrameResourceManager.prototype.__proto__ = WebInspector.Object.prototype;