Changeset 116952 in webkit
- Timestamp:
- May 14, 2012 8:44:05 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r116945 r116952 1 2012-05-14 Vsevolod Vlasov <vsevik@chromium.org> 2 3 Web Inspector: Request / response headers should be stored in name-value pairs array, not a map on front-end. 4 https://bugs.webkit.org/show_bug.cgi?id=86357 5 6 Reviewed by Pavel Feldman. 7 8 * http/tests/inspector/resource-har-conversion.html: 9 * http/tests/inspector/resource-har-headers-expected.txt: 10 * http/tests/inspector/resource-har-headers.html: 11 1 12 2012-05-14 Christophe Dumez <christophe.dumez@intel.com> 2 13 -
trunk/LayoutTests/http/tests/inspector/resource-har-conversion.html
r113863 r116952 37 37 function addCookieHeadersToRequest(request) 38 38 { 39 request.requestHeaders = {40 "Cookie": "a=b; $Path=/path; $Domain=example.com; a1=b1\nc1=d1"41 };39 request.requestHeaders = [ 40 { name: "Cookie", value: "a=b; $Path=/path; $Domain=example.com; a1=b1\nc1=d1" } 41 ]; 42 42 43 request.responseHeaders = {44 "Set-Cookie": "x=y; Path=/path; Domain=example.com; Discard; httpOnly; Secure; Version=1\nx1=y1\nz2=y2"45 };43 request.responseHeaders = [ 44 { name: "Set-Cookie", value: "x=y; Path=/path; Domain=example.com; Discard; httpOnly; Secure; Version=1\nx1=y1\nz2=y2" } 45 ]; 46 46 } 47 47 -
trunk/LayoutTests/http/tests/inspector/resource-har-headers-expected.txt
r105596 r116952 3 3 Resource:{ 4 4 request : { 5 headers : { 6 Request : "request-value" 7 } 5 headers : [ 6 { 7 name : "Request" 8 value : "request-value" 9 } 10 ] 8 11 headersText : "GET http://example.com/inspector-test.js HTTP/1.1\r\nRequest: headers-text" 9 12 headersSize : 72 10 13 } 11 14 response : { 12 headers : { 13 Response : "response-value" 14 } 15 headers : [ 16 { 17 name : "Response" 18 value : "response-value" 19 } 20 ] 15 21 headersText : "HTTP/1.1 200 OK\r\nResponse: headers-text" 16 22 headersSize : 39 -
trunk/LayoutTests/http/tests/inspector/resource-har-headers.html
r113863 r116952 15 15 function setRequestValues(request) 16 16 { 17 request.requestHeaders = {18 "Request": "request-value"19 };17 request.requestHeaders = [ 18 { name: "Request", value: "request-value" } 19 ]; 20 20 request.requestHeadersText = "GET http://example.com/inspector-test.js HTTP/1.1\r\nRequest: headers-text"; 21 21 22 request.responseHeaders = {23 "Response": "response-value"24 };22 request.responseHeaders = [ 23 { name: "Response", value: "response-value" } 24 ]; 25 25 request.responseHeadersText = "HTTP/1.1 200 OK\r\nResponse: headers-text"; 26 26 -
trunk/Source/WebCore/ChangeLog
r116949 r116952 1 2012-05-14 Vsevolod Vlasov <vsevik@chromium.org> 2 3 Web Inspector: Request / response headers should be stored in name-value pairs array, not a map on front-end. 4 https://bugs.webkit.org/show_bug.cgi?id=86357 5 6 Reviewed by Pavel Feldman. 7 8 Storing headers as name-value pairs array information more accurate and allows 9 to treat Set-Cookie headers (which become not parseable when joined by comma) correctly. 10 11 * inspector/front-end/AuditRules.js: 12 (WebInspector.AuditRules.GzipRule.prototype._isCompressed): 13 (WebInspector.AuditRules.CacheControlRule.prototype.responseHeader): 14 (WebInspector.AuditRules.CacheControlRule.prototype.hasResponseHeader): 15 (WebInspector.AuditRules.CacheControlRule.prototype.responseHeaderMatch): 16 * inspector/front-end/HAREntry.js: 17 (WebInspector.HAREntry.prototype._buildRequest): 18 (WebInspector.HAREntry.prototype._buildResponse): 19 * inspector/front-end/NetworkManager.js: 20 (WebInspector.NetworkDispatcher.prototype._headersMapToHeadersArray): 21 (WebInspector.NetworkDispatcher.prototype._updateNetworkRequestWithRequest): 22 (WebInspector.NetworkDispatcher.prototype._updateNetworkRequestWithResponse): 23 (WebInspector.NetworkDispatcher.prototype.webSocketWillSendHandshakeRequest): 24 (WebInspector.NetworkDispatcher.prototype.webSocketHandshakeResponseReceived): 25 * inspector/front-end/NetworkRequest.js: 26 (WebInspector.NetworkRequest.prototype.get transferSize): 27 (WebInspector.NetworkRequest.prototype.get requestHeaders): 28 (WebInspector.NetworkRequest.prototype.get requestHeadersText): 29 (WebInspector.NetworkRequest.prototype.get responseHeaders): 30 (WebInspector.NetworkRequest.prototype.get responseHeadersText): 31 (WebInspector.NetworkRequest.prototype._headerValue): 32 * inspector/front-end/RequestHeadersView.js: 33 (WebInspector.RequestHeadersView.prototype._refreshRequestHeaders): 34 (WebInspector.RequestHeadersView.prototype._refreshResponseHeaders): 35 (WebInspector.RequestHeadersView.prototype._refreshHeaders): 36 * platform/chromium/support/WebHTTPLoadInfo.cpp: 37 (WebKit::addHeader): 38 1 39 2012-05-14 Sriram Neelakandan <sriram.neelakandan@gmail.com> 2 40 -
trunk/Source/WebCore/inspector/front-end/AuditRules.js
r114880 r116952 108 108 _isCompressed: function(request) 109 109 { 110 var encodingHeader = request.responseHeader s["Content-Encoding"];110 var encodingHeader = request.responseHeaderValue("Content-Encoding"); 111 111 if (!encodingHeader) 112 112 return false; … … 518 518 responseHeader: function(request, header) 519 519 { 520 return request.responseHeader s[header];520 return request.responseHeaderValue(header); 521 521 }, 522 522 523 523 hasResponseHeader: function(request, header) 524 524 { 525 return request.responseHeader s[header]!== undefined;525 return request.responseHeaderValue(header) !== undefined; 526 526 }, 527 527 … … 544 544 responseHeaderMatch: function(request, header, regexp) 545 545 { 546 return request.responseHeader s[header]547 ? request.responseHeader s[header].match(new RegExp(regexp, "im"))546 return request.responseHeaderValue(header) 547 ? request.responseHeaderValue(header).match(new RegExp(regexp, "im")) 548 548 : undefined; 549 549 }, -
trunk/Source/WebCore/inspector/front-end/HAREntry.js
r113863 r116952 73 73 url: this._buildRequestURL(this._request.url), 74 74 httpVersion: this._request.requestHttpVersion, 75 headers: this._ buildHeaders(this._request.requestHeaders),75 headers: this._request.requestHeaders, 76 76 queryString: this._buildParameters(this._request.queryParameters || []), 77 77 cookies: this._buildCookies(this._request.requestCookies || []), … … 94 94 statusText: this._request.statusText, 95 95 httpVersion: this._request.responseHttpVersion, 96 headers: this._ buildHeaders(this._request.responseHeaders),96 headers: this._request.responseHeaders, 97 97 cookies: this._buildCookies(this._request.responseCookies || []), 98 98 content: this._buildContent(), … … 153 153 ssl: ssl 154 154 }; 155 },156 157 /**158 * @return {Object}159 */160 _buildHeaders: function(headers)161 {162 var result = [];163 for (var name in headers)164 result.push({ name: name, value: headers[name] });165 return result;166 155 }, 167 156 -
trunk/Source/WebCore/inspector/front-end/NetworkManager.js
r115984 r116952 153 153 WebInspector.NetworkDispatcher.prototype = { 154 154 /** 155 * @param {NetworkAgent.Headers} headersMap 156 * @return {Array.<Object>} 157 */ 158 _headersMapToHeadersArray: function(headersMap) 159 { 160 var result = []; 161 for (var name in headersMap) { 162 var values = headersMap[name].split("\n"); 163 for (var i = 0; i < values.length; ++i) 164 result.push({ name: name, value: values[i] }); 165 } 166 return result; 167 }, 168 169 /** 155 170 * @param {WebInspector.NetworkRequest} networkRequest 156 171 * @param {NetworkAgent.Request} request … … 159 174 { 160 175 networkRequest.requestMethod = request.method; 161 networkRequest.requestHeaders = request.headers;176 networkRequest.requestHeaders = this._headersMapToHeadersArray(request.headers); 162 177 networkRequest.requestFormData = request.postData; 163 178 }, … … 177 192 networkRequest.statusCode = response.status; 178 193 networkRequest.statusText = response.statusText; 179 networkRequest.responseHeaders = response.headers;194 networkRequest.responseHeaders = this._headersMapToHeadersArray(response.headers); 180 195 if (response.headersText) 181 196 networkRequest.responseHeadersText = response.headersText; 182 197 if (response.requestHeaders) 183 networkRequest.requestHeaders = response.requestHeaders;198 networkRequest.requestHeaders = this._headersMapToHeadersArray(response.requestHeaders); 184 199 if (response.requestHeadersText) 185 200 networkRequest.requestHeadersText = response.requestHeadersText; … … 427 442 428 443 networkRequest.requestMethod = "GET"; 429 networkRequest.requestHeaders = request.headers;444 networkRequest.requestHeaders = this._headersMapToHeadersArray(request.headers); 430 445 networkRequest.webSocketRequestKey3 = request.requestKey3; 431 446 networkRequest.startTime = time; … … 447 462 networkRequest.statusCode = response.status; 448 463 networkRequest.statusText = response.statusText; 449 networkRequest.responseHeaders = response.headers;464 networkRequest.responseHeaders = this._headersMapToHeadersArray(response.headers); 450 465 networkRequest.webSocketChallengeResponse = response.challengeResponse; 451 466 networkRequest.responseReceivedTime = time; -
trunk/Source/WebCore/inspector/front-end/NetworkRequest.js
r115804 r116952 241 241 // work for chunks with non-trivial encodings. We need a way to 242 242 // get actual transfer size from the network stack. 243 var bodySize = Number(this.responseHeader s["Content-Length"]|| this.resourceSize);243 var bodySize = Number(this.responseHeaderValue("Content-Length") || this.resourceSize); 244 244 return this.responseHeadersSize + bodySize; 245 245 }, … … 400 400 401 401 /** 402 * @return { Object}402 * @return {Array.<Object>} 403 403 */ 404 404 get requestHeaders() 405 405 { 406 return this._requestHeaders || {};406 return this._requestHeaders || []; 407 407 }, 408 408 … … 423 423 if (this._requestHeadersText === undefined) { 424 424 this._requestHeadersText = this.requestMethod + " " + this.url + " HTTP/1.1\r\n"; 425 for (var key in this.requestHeaders)426 this._requestHeadersText += key + ": " + this.requestHeaders[key]+ "\r\n";425 for (var i = 0; i < this.requestHeaders; ++i) 426 this._requestHeadersText += this.requestHeaders[i].name + ": " + this.requestHeaders[i].value + "\r\n"; 427 427 } 428 428 return this._requestHeadersText; … … 453 453 454 454 this._sortedRequestHeaders = []; 455 for (var key in this.requestHeaders) 456 this._sortedRequestHeaders.push({header: key, value: this.requestHeaders[key]}); 457 this._sortedRequestHeaders.sort(function(a,b) { return a.header.localeCompare(b.header) }); 458 455 this._sortedRequestHeaders = this.requestHeaders.slice(); 456 this._sortedRequestHeaders.sort(function(a,b) { return a.name.toLowerCase().localeCompare(b.name.toLowerCase()) }); 459 457 return this._sortedRequestHeaders; 460 458 }, … … 504 502 505 503 /** 506 * @return { Object}504 * @return {Array.<Object>} 507 505 */ 508 506 get responseHeaders() 509 507 { 510 return this._responseHeaders || {};508 return this._responseHeaders || []; 511 509 }, 512 510 … … 527 525 if (this._responseHeadersText === undefined) { 528 526 this._responseHeadersText = "HTTP/1.1 " + this.statusCode + " " + this.statusText + "\r\n"; 529 for (var key in this.responseHeaders)530 this._responseHeadersText += key + ": " + this.responseHeaders[key]+ "\r\n";527 for (var i = 0; i < this.requestHeaders; ++i) 528 this._responseHeadersText += this.responseHeaders[i].name + ": " + this.responseHeaders[i].value + "\r\n"; 531 529 } 532 530 return this._responseHeadersText; … … 555 553 if (this._sortedResponseHeaders !== undefined) 556 554 return this._sortedResponseHeaders; 557 555 558 556 this._sortedResponseHeaders = []; 559 for (var key in this.responseHeaders) 560 this._sortedResponseHeaders.push({header: key, value: this.responseHeaders[key]}); 561 this._sortedResponseHeaders.sort(function(a,b) { return a.header.localeCompare(b.header) }); 562 557 this._sortedResponseHeaders = this.responseHeaders.slice(); 558 this._sortedResponseHeaders.sort(function(a,b) { return a.name.toLowerCase().localeCompare(b.name.toLowerCase()) }); 563 559 return this._sortedResponseHeaders; 564 560 }, … … 652 648 { 653 649 headerName = headerName.toLowerCase(); 654 for (var header in headers) { 655 if (header.toLowerCase() === headerName) 656 return headers[header]; 657 } 650 651 var values = []; 652 for (var i = 0; i < headers.length; ++i) { 653 if (headers[i].name.toLowerCase() === headerName) 654 values.push(headers[i].value); 655 } 656 // Set-Cookie values should be separated by '\n', not comma, otherwise cookies could not be parsed. 657 if (headerName === "set-cookie") 658 return values.join("\n"); 659 return values.join(", "); 658 660 }, 659 661 -
trunk/Source/WebCore/inspector/front-end/RequestHeadersView.js
r114117 r116952 270 270 var additionalRow = null; 271 271 if (typeof this._request.webSocketRequestKey3 !== "undefined") 272 additionalRow = { header: "(Key3)", value: this._request.webSocketRequestKey3};272 additionalRow = {name: "(Key3)", value: this._request.webSocketRequestKey3}; 273 273 if (this._showRequestHeadersText) 274 274 this._refreshHeadersText(WebInspector.UIString("Request Headers"), this._request.sortedRequestHeaders, this._request.requestHeadersText, this._requestHeadersTreeElement); … … 289 289 var additionalRow = null; 290 290 if (typeof this._request.webSocketChallengeResponse !== "undefined") 291 additionalRow = { header: "(Challenge Response)", value: this._request.webSocketChallengeResponse};291 additionalRow = {name: "(Challenge Response)", value: this._request.webSocketChallengeResponse}; 292 292 if (this._showResponseHeadersText) 293 293 this._refreshHeadersText(WebInspector.UIString("Response Headers"), this._request.sortedResponseHeaders, this._request.responseHeadersText, this._responseHeadersTreeElement); … … 355 355 for (var i = 0; i < length; ++i) { 356 356 var headerTreeElement = new TreeElement(null, null, false); 357 headerTreeElement.title = this._formatHeader(headers[i]. header, headers[i].value);357 headerTreeElement.title = this._formatHeader(headers[i].name, headers[i].value); 358 358 headerTreeElement.selectable = false; 359 359 headersTreeElement.appendChild(headerTreeElement); … … 362 362 if (additionalRow) { 363 363 var headerTreeElement = new TreeElement(null, null, false); 364 headerTreeElement.title = this._formatHeader(additionalRow. header, additionalRow.value);364 headerTreeElement.title = this._formatHeader(additionalRow.name, additionalRow.value); 365 365 headerTreeElement.selectable = false; 366 366 headersTreeElement.appendChild(headerTreeElement); -
trunk/Source/WebCore/platform/chromium/support/WebHTTPLoadInfo.cpp
r112754 r116952 105 105 { 106 106 HTTPHeaderMap::AddResult result = map->add(name, value); 107 // It is important that values are separated by '\n', not comma, otherwise Set-Cookie header is not parseable. 107 108 if (!result.isNewEntry) 108 result.iterator->second += " ," + String(value);109 result.iterator->second += "\n" + String(value); 109 110 } 110 111
Note: See TracChangeset
for help on using the changeset viewer.