Changeset 165331 in webkit
- Timestamp:
- Mar 8, 2014 4:56:11 AM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r165327 r165331 1 2014-03-07 Timothy Hatcher <timothy@apple.com> 2 3 Load source maps and their resources asynchronously. 4 5 https://bugs.webkit.org/show_bug.cgi?id=112071 6 7 Reviewed by Joseph Pecoraro. 8 9 * inspector/InspectorPageAgent.cpp: 10 (WebCore::InspectorPageAgent::buildObjectForFrameTree): 11 Honor the hiddenFromInspector flag. 12 13 * inspector/InspectorResourceAgent.cpp: 14 (WebCore::InspectorResourceAgent::willSendRequest): 15 (WebCore::InspectorResourceAgent::markResourceAsCached): 16 (WebCore::InspectorResourceAgent::didReceiveResponse): 17 (WebCore::InspectorResourceAgent::didReceiveData): 18 (WebCore::InspectorResourceAgent::didFinishLoading): 19 (WebCore::InspectorResourceAgent::didFailLoading): 20 (WebCore::InspectorResourceAgent::replayXHR): 21 (WebCore::InspectorResourceAgent::loadResource): 22 * inspector/InspectorResourceAgent.h: 23 Honor the hiddenFromInspector flag by keeping track of 24 hidden identifiers in a HashSet. 25 26 * inspector/protocol/Network.json: 27 (Network.loadResource): Added. 28 29 * platform/network/ResourceRequestBase.h: 30 (WebCore::ResourceRequestBase::hiddenFromInspector): Added. 31 (WebCore::ResourceRequestBase::setHiddenFromInspector): Added. 32 (WebCore::ResourceRequestBase::ResourceRequestBase): 33 Add a flag to hide the request from the Inspector. 34 35 * xml/XMLHttpRequest.cpp: 36 (WebCore::XMLHttpRequest::XMLHttpRequest): 37 (WebCore::XMLHttpRequest::sendForInspector): Added. 38 (WebCore::XMLHttpRequest::sendForInspectorXHRReplay): Renamed. 39 (WebCore::XMLHttpRequest::createRequest): 40 * xml/XMLHttpRequest.h: 41 Make Inspector loads allow cross-origins and hide their request 42 from the Inspector itself. 43 1 44 2014-03-07 Tim Horton <timothy_horton@apple.com> 2 45 -
trunk/Source/WebCore/inspector/InspectorPageAgent.cpp
r165117 r165331 980 980 CachedResource* cachedResource = *it; 981 981 982 if (cachedResource->resourceRequest().hiddenFromInspector()) 983 continue; 984 982 985 RefPtr<Inspector::TypeBuilder::Page::FrameResourceTree::Resources> resourceObject = Inspector::TypeBuilder::Page::FrameResourceTree::Resources::create() 983 986 .setUrl(cachedResource->url()) -
trunk/Source/WebCore/inspector/InspectorResourceAgent.cpp
r165117 r165331 76 76 using namespace Inspector; 77 77 78 typedef Inspector::InspectorNetworkBackendDispatcherHandler::LoadResourceCallback LoadResourceCallback; 79 78 80 namespace WebCore { 79 81 … … 184 186 void InspectorResourceAgent::willSendRequest(unsigned long identifier, DocumentLoader* loader, ResourceRequest& request, const ResourceResponse& redirectResponse) 185 187 { 188 if (request.hiddenFromInspector()) { 189 m_hiddenRequestIdentifiers.add(identifier); 190 return; 191 } 192 186 193 String requestId = IdentifiersFactory::requestId(identifier); 187 194 m_resourcesData->resourceCreated(requestId, m_pageAgent->loaderId(loader)); … … 226 233 void InspectorResourceAgent::markResourceAsCached(unsigned long identifier) 227 234 { 235 if (m_hiddenRequestIdentifiers.contains(identifier)) 236 return; 237 228 238 m_frontendDispatcher->requestServedFromCache(IdentifiersFactory::requestId(identifier)); 229 239 } … … 231 241 void InspectorResourceAgent::didReceiveResponse(unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response, ResourceLoader* resourceLoader) 232 242 { 243 if (m_hiddenRequestIdentifiers.contains(identifier)) 244 return; 245 233 246 String requestId = IdentifiersFactory::requestId(identifier); 234 247 RefPtr<Inspector::TypeBuilder::Network::Response> resourceResponse = buildObjectForResourceResponse(response, loader); … … 275 288 void InspectorResourceAgent::didReceiveData(unsigned long identifier, const char* data, int dataLength, int encodedDataLength) 276 289 { 290 if (m_hiddenRequestIdentifiers.contains(identifier)) 291 return; 292 277 293 String requestId = IdentifiersFactory::requestId(identifier); 278 294 … … 288 304 void InspectorResourceAgent::didFinishLoading(unsigned long identifier, DocumentLoader* loader, double finishTime) 289 305 { 306 if (m_hiddenRequestIdentifiers.remove(identifier)) 307 return; 308 290 309 String requestId = IdentifiersFactory::requestId(identifier); 291 310 if (m_resourcesData->resourceType(requestId) == InspectorPageAgent::DocumentResource) { … … 312 331 void InspectorResourceAgent::didFailLoading(unsigned long identifier, DocumentLoader* loader, const ResourceError& error) 313 332 { 333 if (m_hiddenRequestIdentifiers.remove(identifier)) 334 return; 335 314 336 String requestId = IdentifiersFactory::requestId(identifier); 315 337 … … 595 617 request.setCachePartition(m_pageAgent->mainFrame()->document()->topOrigin()->cachePartition()); 596 618 #endif 619 597 620 CachedResource* cachedResource = memoryCache()->resourceForRequest(request, m_pageAgent->page()->sessionID()); 598 621 if (cachedResource) … … 602 625 for (const auto& header : xhrReplayData->headers()) 603 626 xhr->setRequestHeader(header.key, header.value, IGNORE_EXCEPTION); 604 xhr->sendFromInspector(xhrReplayData->formData(), IGNORE_EXCEPTION); 627 xhr->sendForInspectorXHRReplay(xhrReplayData->formData(), IGNORE_EXCEPTION); 628 } 629 630 namespace { 631 632 class LoadResourceListener final : public EventListener { 633 WTF_MAKE_NONCOPYABLE(LoadResourceListener); 634 public: 635 static PassRefPtr<LoadResourceListener> create(PassRefPtr<LoadResourceCallback> callback) 636 { 637 return adoptRef(new LoadResourceListener(callback)); 638 } 639 640 virtual ~LoadResourceListener() { } 641 642 virtual bool operator==(const EventListener& other) override 643 { 644 return this == &other; 645 } 646 647 virtual void handleEvent(ScriptExecutionContext*, Event* event) override 648 { 649 if (!m_callback->isActive()) 650 return; 651 652 if (event->type() == eventNames().errorEvent) { 653 m_callback->sendFailure(ASCIILiteral("Error loading resource")); 654 return; 655 } 656 657 if (event->type() != eventNames().readystatechangeEvent) { 658 m_callback->sendFailure(ASCIILiteral("Unexpected event type")); 659 return; 660 } 661 662 XMLHttpRequest* xhr = static_cast<XMLHttpRequest*>(event->target()); 663 if (xhr->readyState() != XMLHttpRequest::DONE) 664 return; 665 666 m_callback->sendSuccess(xhr->responseTextIgnoringResponseType(), xhr->responseMIMEType()); 667 } 668 669 private: 670 LoadResourceListener(PassRefPtr<LoadResourceCallback> callback) 671 : EventListener(EventListener::CPPEventListenerType) 672 , m_callback(callback) { } 673 674 RefPtr<LoadResourceCallback> m_callback; 675 }; 676 677 } // namespace 678 679 void InspectorResourceAgent::loadResource(ErrorString* errorString, const String& frameId, const String& urlString, PassRefPtr<LoadResourceCallback> callback) 680 { 681 Frame* frame = m_pageAgent->assertFrame(errorString, frameId); 682 if (!frame) 683 return; 684 685 Document* document = frame->document(); 686 if (!document) { 687 *errorString = ASCIILiteral("No Document instance for the specified frame"); 688 return; 689 } 690 691 RefPtr<XMLHttpRequest> xhr = XMLHttpRequest::create(*document); 692 693 ExceptionCode ec = 0; 694 xhr->open(ASCIILiteral("GET"), document->completeURL(urlString), ec); 695 if (ec) { 696 *errorString = ASCIILiteral("Error creating request"); 697 return; 698 } 699 700 RefPtr<LoadResourceListener> loadResourceListener = LoadResourceListener::create(callback); 701 xhr->addEventListener(eventNames().abortEvent, loadResourceListener, false); 702 xhr->addEventListener(eventNames().errorEvent, loadResourceListener, false); 703 xhr->addEventListener(eventNames().readystatechangeEvent, loadResourceListener, false); 704 xhr->sendForInspector(ec); 705 706 if (ec) { 707 *errorString = ASCIILiteral("Error sending request"); 708 return; 709 } 605 710 } 606 711 -
trunk/Source/WebCore/inspector/InspectorResourceAgent.h
r164245 r165331 35 35 #include "InspectorWebBackendDispatchers.h" 36 36 #include "InspectorWebFrontendDispatchers.h" 37 #include <wtf/HashSet.h> 37 38 #include <wtf/RefCounted.h> 38 39 #include <wtf/Vector.h> … … 138 139 virtual void setCacheDisabled(ErrorString*, bool cacheDisabled) override; 139 140 141 virtual void loadResource(ErrorString*, const String& frameId, const String& url, PassRefPtr<LoadResourceCallback>) override; 142 140 143 private: 141 144 void enable(); … … 151 154 RefPtr<Inspector::InspectorObject> m_extraRequestHeaders; 152 155 156 HashSet<unsigned long> m_hiddenRequestIdentifiers; 157 153 158 typedef HashMap<ThreadableLoaderClient*, RefPtr<XHRReplayData>> PendingXHRReplayDataMap; 154 159 PendingXHRReplayDataMap m_pendingXHRReplayData; -
trunk/Source/WebCore/inspector/protocol/Network.json
r161556 r165331 191 191 ], 192 192 "description": "Toggles ignoring cache for each request. If <code>true</code>, cache will not be used." 193 }, 194 { 195 "name": "loadResource", 196 "async": true, 197 "parameters": [ 198 { "name": "frameId", "$ref": "FrameId", "description": "Frame to load the resource from." }, 199 { "name": "url", "type": "string", "description": "URL of the resource to load." } 200 ], 201 "returns": [ 202 { "name": "content", "type": "string", "description": "Resource content." }, 203 { "name": "mimeType", "type": "string", "description": "Resource mimeType." } 204 ], 205 "description": "Loads a resource in the context of a frame on the inspected page without cross origin checks." 193 206 } 194 207 ], -
trunk/Source/WebCore/platform/network/ResourceRequestBase.h
r162200 r165331 140 140 void setReportRawHeaders(bool reportRawHeaders) { m_reportRawHeaders = reportRawHeaders; } 141 141 142 #if ENABLE(INSPECTOR) 143 // Whether this request should be hidden from the Inspector. 144 bool hiddenFromInspector() const { return m_hiddenFromInspector; } 145 void setHiddenFromInspector(bool hiddenFromInspector) { m_hiddenFromInspector = hiddenFromInspector; } 146 #endif 147 142 148 static double defaultTimeoutInterval(); // May return 0 when using platform default. 143 149 static void setDefaultTimeoutInterval(double); … … 160 166 , m_reportLoadTiming(false) 161 167 , m_reportRawHeaders(false) 168 #if ENABLE(INSPECTOR) 169 , m_hiddenFromInspector(false) 170 #endif 162 171 , m_priority(ResourceLoadPriorityLow) 163 172 { … … 181 190 , m_reportLoadTiming(false) 182 191 , m_reportRawHeaders(false) 192 #if ENABLE(INSPECTOR) 193 , m_hiddenFromInspector(false) 194 #endif 183 195 , m_priority(ResourceLoadPriorityLow) 184 196 { … … 207 219 bool m_reportLoadTiming : 1; 208 220 bool m_reportRawHeaders : 1; 221 #if ENABLE(INSPECTOR) 222 bool m_hiddenFromInspector : 1; 223 #endif 209 224 ResourceLoadPriority m_priority : 4; 210 225 -
trunk/Source/WebCore/xml/XMLHttpRequest.cpp
r165229 r165331 185 185 , m_uploadComplete(false) 186 186 , m_sameOriginRequest(true) 187 , m_sendingForInspector(false) 187 188 , m_receivedLength(0) 188 189 , m_lastSendLineNumber(0) … … 738 739 } 739 740 740 void XMLHttpRequest::sendFromInspector(PassRefPtr<FormData> formData, ExceptionCode& ec) 741 void XMLHttpRequest::sendForInspector(ExceptionCode& ec) 742 { 743 m_sendingForInspector = true; 744 send(ec); 745 } 746 747 void XMLHttpRequest::sendForInspectorXHRReplay(PassRefPtr<FormData> formData, ExceptionCode& ec) 741 748 { 742 749 m_requestEntityBody = formData ? formData->deepCopy() : 0; … … 775 782 ResourceRequest request(m_url); 776 783 request.setHTTPMethod(m_method); 784 request.setHiddenFromInspector(m_sendingForInspector); 777 785 778 786 InspectorInstrumentation::willLoadXHR(scriptExecutionContext(), this, m_method, m_url, m_async, m_requestEntityBody ? m_requestEntityBody->deepCopy() : 0, m_requestHeaders, m_includeCredentials); … … 792 800 options.preflightPolicy = uploadEvents ? ForcePreflight : ConsiderPreflight; 793 801 options.allowCredentials = (m_sameOriginRequest || m_includeCredentials) ? AllowStoredCredentials : DoNotAllowStoredCredentials; 794 options.crossOriginRequestPolicy = UseAccessControl;802 options.crossOriginRequestPolicy = m_sendingForInspector ? AllowCrossOriginRequests : UseAccessControl; 795 803 options.securityOrigin = securityOrigin(); 796 804 #if ENABLE(RESOURCE_TIMING) -
trunk/Source/WebCore/xml/XMLHttpRequest.h
r165229 r165331 110 110 String responseText(ExceptionCode&); 111 111 String responseTextIgnoringResponseType() const { return m_responseBuilder.toStringPreserveCapacity(); } 112 String responseMIMEType() const; 112 113 Document* responseXML(ExceptionCode&); 113 114 Document* optionalResponseXML() const { return m_responseDocument.get(); } … … 122 123 void didCacheResponseJSON(); 123 124 124 void sendFromInspector(PassRefPtr<FormData>, ExceptionCode&); 125 void sendForInspector(ExceptionCode&); 126 void sendForInspectorXHRReplay(PassRefPtr<FormData>, ExceptionCode&); 125 127 126 128 // Expose HTTP validation methods for other untrusted requests. … … 184 186 virtual void didFailRedirectCheck() override; 185 187 186 String responseMIMEType() const;187 188 bool responseIsXML() const; 188 189 … … 246 247 247 248 bool m_sameOriginRequest; 249 bool m_sendingForInspector; 248 250 249 251 // Used for onprogress tracking -
trunk/Source/WebInspectorUI/ChangeLog
r165093 r165331 1 2014-03-07 Timothy Hatcher <timothy@apple.com> 2 3 Load source maps and their resources asynchronously. 4 5 https://bugs.webkit.org/show_bug.cgi?id=112071 6 7 Reviewed by Joseph Pecoraro. 8 9 * UserInterface/Controllers/SourceMapManager.js: 10 (WebInspector.SourceMapManager.prototype.loadAndParseSourceMap): 11 (WebInspector.SourceMapManager.prototype.downloadSourceMap): 12 (WebInspector.SourceMapManager.prototype.sourceMapLoaded): 13 (WebInspector.SourceMapManager.prototype._loadAndParseSourceMap): 14 Use NetworkAgent.loadResource. 15 16 * UserInterface/Models/SourceMapResource.js: 17 (WebInspector.SourceMapResource.prototype.requestContentFromBackend.sourceMapResourceLoaded): 18 (WebInspector.SourceMapResource.prototype.createSourceCodeTextRange): 19 Use NetworkAgent.loadResource. 20 21 * UserInterface/Protocol/InspectorWebBackendCommands.js: Updated. 22 1 23 2014-03-04 Brian Burg <bburg@apple.com> 2 24 -
trunk/Source/WebInspectorUI/UserInterface/Controllers/SourceMapManager.js
r164543 r165331 62 62 return; 63 63 64 this._loadAndParseSourceMap(sourceMapURL, baseURL, originalSourceCode); 64 function loadAndParseSourceMap() 65 { 66 this._loadAndParseSourceMap(sourceMapURL, baseURL, originalSourceCode); 67 } 68 69 if (!WebInspector.frameResourceManager.mainFrame) { 70 // If we don't have a main frame, then we are likely in the middle of building the resource tree. 71 // Delaying until the next runloop is enough in this case to then start loading the source map. 72 setTimeout(loadAndParseSourceMap.bind(this), 0); 73 return; 74 } 75 76 loadAndParseSourceMap.call(this); 65 77 }, 66 78 … … 71 83 this._downloadingSourceMaps[sourceMapURL] = true; 72 84 73 // FIXME: <rdar://problem/13238886> Source Maps: Frontend needs asynchronous resource loading of content + mime type 74 var response = InspectorFrontendHost.loadResourceSynchronously(sourceMapURL); 75 if (response === undefined) { 76 this._loadAndParseFailed(sourceMapURL); 77 return; 78 } 79 80 if (response.slice(0, 3) === ")]}") { 81 var firstNewlineIndex = response.indexOf("\n"); 82 if (firstNewlineIndex === -1) { 85 function sourceMapLoaded(error, content, mimeType) 86 { 87 if (error) { 83 88 this._loadAndParseFailed(sourceMapURL); 84 89 return; 85 90 } 86 response = response.substring(firstNewlineIndex); 91 92 if (content.slice(0, 3) === ")]}") { 93 var firstNewlineIndex = content.indexOf("\n"); 94 if (firstNewlineIndex === -1) { 95 this._loadAndParseFailed(sourceMapURL); 96 return; 97 } 98 99 content = content.substring(firstNewlineIndex); 100 } 101 102 try { 103 var payload = JSON.parse(content); 104 var baseURL = sourceMapURL.startsWith("data:") ? originalSourceCode.url : sourceMapURL; 105 var sourceMap = new WebInspector.SourceMap(baseURL, payload, originalSourceCode); 106 this._loadAndParseSucceeded(sourceMapURL, sourceMap); 107 } catch(e) { 108 this._loadAndParseFailed(sourceMapURL); 109 } 87 110 } 88 111 89 try { 90 var payload = JSON.parse(response); 91 var baseURL = sourceMapURL.startsWith("data:") ? originalSourceCode.url : sourceMapURL; 92 var sourceMap = new WebInspector.SourceMap(baseURL, payload, originalSourceCode); 93 this._loadAndParseSucceeded(sourceMapURL, sourceMap); 94 } catch(e) { 95 console.error(e.message); 96 this._loadAndParseFailed(sourceMapURL); 97 } 112 var frameIdentifier = null; 113 if (originalSourceCode instanceof WebInspector.Resource && originalSourceCode.parentFrame) 114 frameIdentifier = originalSourceCode.parentFrame.id; 115 116 if (!frameIdentifier) 117 frameIdentifier = WebInspector.frameResourceManager.mainFrame.id; 118 119 NetworkAgent.loadResource(frameIdentifier, sourceMapURL, sourceMapLoaded.bind(this)); 98 120 }, 99 121 -
trunk/Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js
r164543 r165331 68 68 requestContentFromBackend: function(callback) 69 69 { 70 function requestAsyncCallback(body, base64encoded, mimeType) 70 var inlineContent = this._sourceMap.sourceContent(this.url); 71 if (inlineContent) { 72 // Force inline content to be asynchronous to match the expected load pattern. 73 setTimeout(function() { 74 // FIXME: We don't know the MIME-type for inline content. Guess by analyzing the content? 75 // Guess by using the type of the original resource? 76 sourceMapResourceLoaded.call(this, null, inlineContent, "text/javascript"); 77 }.bind(this)); 78 79 return true; 80 } 81 82 function sourceMapResourceLoaded(error, body, mimeType) 71 83 { 72 if (body === null) { 84 const base64encoded = false; 85 86 if (error) { 73 87 this.markAsFailed(); 74 callback( "Failed to load resource", body, base64encoded);88 callback(error, body, base64encoded); 75 89 return; 76 90 } 91 92 var fileExtension = WebInspector.fileExtensionForURL(this.url); 93 var fileExtensionMIMEType = WebInspector.mimeTypeForFileExtension(fileExtension, true) || "text/javascript"; 94 95 // FIXME: Add support for picking the best MIME-type. Right now the file extension is the best bet. 96 mimeType = fileExtensionMIMEType; 77 97 78 98 var oldType = this._type; 79 99 var oldMIMEType = this._mimeType; 80 100 101 // FIXME: This is a layering violation. It should use a helper function on the Resource base-class. 81 102 this._mimeType = mimeType; 82 103 this._type = WebInspector.Resource.Type.fromMIMEType(this._mimeType); … … 97 118 } 98 119 99 this._requestResourceAsynchronously(requestAsyncCallback.bind(this)); 120 var frameIdentifier = null; 121 if (this._sourceMap.originalSourceCode instanceof WebInspector.Resource && this._sourceMap.originalSourceCode.parentFrame) 122 frameIdentifier = this._sourceMap.originalSourceCode.parentFrame.id; 123 124 if (!frameIdentifier) 125 frameIdentifier = WebInspector.frameResourceManager.mainFrame.id; 126 127 NetworkAgent.loadResource(frameIdentifier, this.url, sourceMapResourceLoaded.bind(this)); 128 100 129 return true; 101 130 }, … … 129 158 var endSourceCodeLocation = this.createSourceCodeLocation(textRange.endLine, textRange.endColumn); 130 159 return new WebInspector.SourceCodeTextRange(this._sourceMap.originalSourceCode, startSourceCodeLocation, endSourceCodeLocation); 131 },132 133 // Private134 135 _requestResourceAsynchronously: function(callback)136 {137 // FIXME: <rdar://problem/13238886> Source Maps: Frontend needs asynchronous resource loading of content + mime type138 139 function async()140 {141 var body = this._sourceMap.sourceContent(this.url) || InspectorFrontendHost.loadResourceSynchronously(this.url);142 if (body === undefined)143 body = null;144 var fileExtension = WebInspector.fileExtensionForURL(this.url);145 var mimeType = WebInspector.mimeTypeForFileExtension(fileExtension, true) || "text/javascript";146 callback(body, false, mimeType);147 }148 149 setTimeout(async.bind(this), 0);150 160 } 151 161 }; -
trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorWebBackendCommands.js
r164637 r165331 211 211 InspectorBackend.registerCommand("Network.clearBrowserCookies", [], []); 212 212 InspectorBackend.registerCommand("Network.setCacheDisabled", [{"name": "cacheDisabled", "type": "boolean", "optional": false}], []); 213 InspectorBackend.registerCommand("Network.loadResource", [{"name": "frameId", "type": "string", "optional": false}, {"name": "url", "type": "string", "optional": false}], ["content", "mimeType"]); 213 214 214 215 // Page. … … 287 288 InspectorBackend.registerEnum("Timeline.EventType", {EventDispatch: "EventDispatch", BeginFrame: "BeginFrame", ScheduleStyleRecalculation: "ScheduleStyleRecalculation", RecalculateStyles: "RecalculateStyles", InvalidateLayout: "InvalidateLayout", Layout: "Layout", Paint: "Paint", ScrollLayer: "ScrollLayer", ResizeImage: "ResizeImage", CompositeLayers: "CompositeLayers", ParseHTML: "ParseHTML", TimerInstall: "TimerInstall", TimerRemove: "TimerRemove", TimerFire: "TimerFire", EvaluateScript: "EvaluateScript", MarkLoad: "MarkLoad", MarkDOMContent: "MarkDOMContent", TimeStamp: "TimeStamp", Time: "Time", TimeEnd: "TimeEnd", ScheduleResourceRequest: "ScheduleResourceRequest", ResourceSendRequest: "ResourceSendRequest", ResourceReceiveResponse: "ResourceReceiveResponse", ResourceReceivedData: "ResourceReceivedData", ResourceFinish: "ResourceFinish", XHRReadyStateChange: "XHRReadyStateChange", XHRLoad: "XHRLoad", FunctionCall: "FunctionCall", GCEvent: "GCEvent", RequestAnimationFrame: "RequestAnimationFrame", CancelAnimationFrame: "CancelAnimationFrame", FireAnimationFrame: "FireAnimationFrame", WebSocketCreate: "WebSocketCreate", WebSocketSendHandshakeRequest: "WebSocketSendHandshakeRequest", WebSocketReceiveHandshakeResponse: "WebSocketReceiveHandshakeResponse", WebSocketDestroy: "WebSocketDestroy"}); 288 289 InspectorBackend.registerEvent("Timeline.eventRecorded", ["record"]); 289 InspectorBackend.registerCommand("Timeline.start", [{"name": "maxCallStackDepth", "type": "number", "optional": true} , {"name": "includeDomCounters", "type": "boolean", "optional": true}], []);290 InspectorBackend.registerCommand("Timeline.start", [{"name": "maxCallStackDepth", "type": "number", "optional": true}], []); 290 291 InspectorBackend.registerCommand("Timeline.stop", [], []); 291 292 InspectorBackend.registerCommand("Timeline.supportsFrameInstrumentation", [], ["result"]);
Note: See TracChangeset
for help on using the changeset viewer.