Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(154)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/network/RequestPreviewView.js

Issue 1912973002: [DevTools] JSONView parsing smarter (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 this._emptyWidget = this._createEmptyWidget(); 48 this._emptyWidget = this._createEmptyWidget();
49 this._emptyWidget.show(this.element); 49 this._emptyWidget.show(this.element);
50 this.innerView = this._emptyWidget; 50 this.innerView = this._emptyWidget;
51 } 51 }
52 } else { 52 } else {
53 if (this._emptyWidget) { 53 if (this._emptyWidget) {
54 this._emptyWidget.detach(); 54 this._emptyWidget.detach();
55 delete this._emptyWidget; 55 delete this._emptyWidget;
56 } 56 }
57 57
58 if (!this._previewView) { 58 if (!this._previewView)
59 this._previewView = this._createPreviewView(); 59 this._createPreviewView(handlePreviewView.bind(this));
60 this._previewView.show(this.element); 60 else
61 if (this._previewView instanceof WebInspector.VBoxWithToolbarIte ms) { 61 this.innerView = this._previewView;
62 var toolbar = new WebInspector.Toolbar("network-item-preview -toolbar", this.element); 62 }
63 for (var item of /** @type {!WebInspector.VBoxWithToolbarIte ms} */ (this._previewView).toolbarItems()) 63
64 toolbar.appendToolbarItem(item); 64 /**
65 } 65 * @param {!WebInspector.Widget} view
66 * @this {WebInspector.RequestPreviewView}
67 */
68 function handlePreviewView(view) {
69 this._previewView = view;
70 this._previewView.show(this.element);
71 if (this._previewView instanceof WebInspector.VBoxWithToolbarItems) {
72 var toolbar = new WebInspector.Toolbar("network-item-preview-too lbar", this.element);
73 for (var item of /** @type {!WebInspector.VBoxWithToolbarItems} */ (this._previewView).toolbarItems())
74 toolbar.appendToolbarItem(item);
66 } 75 }
67 this.innerView = this._previewView; 76 this.innerView = this._previewView;
68 } 77 }
69 }, 78 },
70 79
71 _createEmptyWidget: function() 80 _createEmptyWidget: function()
72 { 81 {
73 return this._createMessageView(WebInspector.UIString("This request has n o preview available.")); 82 return this._createMessageView(WebInspector.UIString("This request has n o preview available."));
74 }, 83 },
75 84
76 /** 85 /**
77 * @param {string} message 86 * @param {string} message
78 * @return {!WebInspector.EmptyWidget} 87 * @return {!WebInspector.EmptyWidget}
79 */ 88 */
80 _createMessageView: function(message) 89 _createMessageView: function(message)
81 { 90 {
82 return new WebInspector.EmptyWidget(message); 91 return new WebInspector.EmptyWidget(message);
83 }, 92 },
84 93
85 /** 94 /**
86 * @return {string} 95 * @return {string}
87 */ 96 */
88 _requestContent: function() 97 _requestContent: function()
89 { 98 {
90 var content = this.request.content; 99 var content = this.request.content;
91 return this.request.contentEncoded ? window.atob(content || "") : (conte nt || ""); 100 return this.request.contentEncoded ? window.atob(content || "") : (conte nt || "");
92 }, 101 },
93 102
94 /** 103 /**
104 * @param {?WebInspector.ParsedJSON} parsedJSON
95 * @return {?WebInspector.JSONView} 105 * @return {?WebInspector.JSONView}
96 */ 106 */
97 _jsonView: function() 107 _jsonView: function(parsedJSON)
98 { 108 {
99 var parsedJSON = WebInspector.JSONView.parseJSON(this._requestContent()) ; 109 if (!parsedJSON || typeof parsedJSON.data !== "object")
100 return parsedJSON && new WebInspector.JSONView(parsedJSON); 110 return null;
111 return new WebInspector.JSONView(/** @type {!WebInspector.ParsedJSON} */ (parsedJSON));
101 }, 112 },
102 113
103 /** 114 /**
104 * @return {?WebInspector.XMLView} 115 * @return {?WebInspector.XMLView}
105 */ 116 */
106 _xmlView: function() 117 _xmlView: function()
107 { 118 {
108 var content = this._requestContent(); 119 var content = this._requestContent();
109 var parsedXML = WebInspector.XMLView.parseXML(content, this.request.mime Type); 120 var parsedXML = WebInspector.XMLView.parseXML(content, this.request.mime Type);
110 return parsedXML ? new WebInspector.XMLView(parsedXML) : null; 121 return parsedXML ? new WebInspector.XMLView(parsedXML) : null;
111 }, 122 },
112 123
113 /** 124 /**
114 * @return {?WebInspector.RequestHTMLView} 125 * @return {?WebInspector.RequestHTMLView}
115 */ 126 */
116 _htmlErrorPreview: function() 127 _htmlErrorPreview: function()
117 { 128 {
118 var whitelist = ["text/html", "text/plain", "application/xhtml+xml"]; 129 var whitelist = ["text/html", "text/plain", "application/xhtml+xml"];
119 if (whitelist.indexOf(this.request.mimeType) === -1) 130 if (whitelist.indexOf(this.request.mimeType) === -1)
120 return null; 131 return null;
121 132
122 var dataURL = this.request.asDataURL(); 133 var dataURL = this.request.asDataURL();
123 if (dataURL === null) 134 if (dataURL === null)
124 return null; 135 return null;
125 136
126 return new WebInspector.RequestHTMLView(this.request, dataURL); 137 return new WebInspector.RequestHTMLView(this.request, dataURL);
127 }, 138 },
128 139
129 _createPreviewView: function() 140 /**
141 * @param {function(!WebInspector.Widget)} callback
142 */
143 _createPreviewView: function(callback)
130 { 144 {
131 if (this.request.contentError()) 145 if (this.request.contentError()) {
132 return this._createMessageView(WebInspector.UIString("Failed to load response data")); 146 callback(this._createMessageView(WebInspector.UIString("Failed to lo ad response data")));
133 147 return;
134 var mimeType = this.request.mimeType || "";
135 if (mimeType.endsWith("json") || mimeType.endsWith("javascript")) {
136 var jsonView = this._jsonView();
137 if (jsonView)
138 return jsonView;
139 }
140
141 if (this.request.hasErrorStatusCode()) {
142 var htmlErrorPreview = this._htmlErrorPreview();
143 if (htmlErrorPreview)
144 return htmlErrorPreview;
145 } 148 }
146 149
147 var xmlView = this._xmlView(); 150 var xmlView = this._xmlView();
148 if (xmlView) 151 if (xmlView)
149 return xmlView; 152 return xmlView;
150 153
151 if (this.request.resourceType() === WebInspector.resourceTypes.XHR) { 154 WebInspector.JSONView.parseJSON(this._requestContent()).then(chooseView. bind(this)).then(callback);
152 var jsonView = this._jsonView(); 155
153 if (jsonView) 156 /**
154 return jsonView; 157 * @this {WebInspector.RequestPreviewView}
155 var htmlErrorPreview = this._htmlErrorPreview(); 158 * @param {?WebInspector.ParsedJSON} jsonData
156 if (htmlErrorPreview) 159 * @return {!WebInspector.Widget}
157 return htmlErrorPreview; 160 */
161 function chooseView(jsonData)
162 {
163 if (jsonData) {
164 var jsonView = this._jsonView(jsonData);
165 if (jsonView)
166 return jsonView;
167 }
168
169 if (this.request.hasErrorStatusCode() || this.request.resourceType() === WebInspector.resourceTypes.XHR) {
170 var htmlErrorPreview = this._htmlErrorPreview();
171 if (htmlErrorPreview)
172 return htmlErrorPreview;
173 }
174
175 if (this._responseView.sourceView)
176 return this._responseView.sourceView;
177
178 if (this.request.resourceType() === WebInspector.resourceTypes.Other )
179 return this._createEmptyWidget();
180
181 return WebInspector.RequestView.nonSourceViewForRequest(this.request );
158 } 182 }
159
160 if (this._responseView.sourceView)
161 return this._responseView.sourceView;
162
163 if (this.request.resourceType() === WebInspector.resourceTypes.Other)
164 return this._createEmptyWidget();
165
166 return WebInspector.RequestView.nonSourceViewForRequest(this.request);
167 }, 183 },
168 184
169 __proto__: WebInspector.RequestContentView.prototype 185 __proto__: WebInspector.RequestContentView.prototype
170 } 186 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698