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

Side by Side Diff: pkg/shelf/lib/src/response.dart

Issue 232073005: Addressed comments from review https://codereview.chromium.org/226263007 Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « pkg/shelf/lib/src/request.dart ('k') | pkg/shelf/test/request_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library shelf.response; 5 library shelf.response;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 9
10 import 'package:http_parser/http_parser.dart'; 10 import 'package:http_parser/http_parser.dart';
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 /// This indicates that the request has succeeded. 46 /// This indicates that the request has succeeded.
47 /// 47 ///
48 /// [body] is the response body. It may be either a [String], a 48 /// [body] is the response body. It may be either a [String], a
49 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String], 49 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String],
50 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to 50 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to
51 /// UTF-8. 51 /// UTF-8.
52 /// 52 ///
53 /// If [encoding] is passed, the "encoding" field of the Content-Type header 53 /// If [encoding] is passed, the "encoding" field of the Content-Type header
54 /// in [headers] will be set appropriately. If there is no existing 54 /// in [headers] will be set appropriately. If there is no existing
55 /// Content-Type header, it will be set to "application/octet-stream". 55 /// Content-Type header, it will be set to "application/octet-stream".
56 Response.ok(body, {Map<String, String> headers, Encoding encoding}) 56 Response.ok(body, {Map<String, String> headers, Encoding encoding,
57 : this(200, body: body, headers: headers, encoding: encoding); 57 Map<String, Object> context})
58 : this(200, body: body, headers: headers, encoding: encoding, context: con text);
58 59
59 /// Constructs a 301 Moved Permanently response. 60 /// Constructs a 301 Moved Permanently response.
60 /// 61 ///
61 /// This indicates that the requested resource has moved permanently to a new 62 /// This indicates that the requested resource has moved permanently to a new
62 /// URI. [location] is that URI; it can be either a [String] or a [Uri]. It's 63 /// URI. [location] is that URI; it can be either a [String] or a [Uri]. It's
63 /// automatically set as the Location header in [headers]. 64 /// automatically set as the Location header in [headers].
64 /// 65 ///
65 /// [body] is the response body. It may be either a [String], a 66 /// [body] is the response body. It may be either a [String], a
66 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String], 67 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String],
67 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to 68 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to
68 /// UTF-8. 69 /// UTF-8.
69 /// 70 ///
70 /// If [encoding] is passed, the "encoding" field of the Content-Type header 71 /// If [encoding] is passed, the "encoding" field of the Content-Type header
71 /// in [headers] will be set appropriately. If there is no existing 72 /// in [headers] will be set appropriately. If there is no existing
72 /// Content-Type header, it will be set to "application/octet-stream". 73 /// Content-Type header, it will be set to "application/octet-stream".
73 Response.movedPermanently(location, {body, Map<String, String> headers, 74 Response.movedPermanently(location, {body, Map<String, String> headers,
74 Encoding encoding}) 75 Encoding encoding, Map<String, Object> context})
75 : this._redirect(301, location, body, headers, encoding); 76 : this._redirect(301, location, body, headers, encoding, context);
76 77
77 /// Constructs a 302 Found response. 78 /// Constructs a 302 Found response.
78 /// 79 ///
79 /// This indicates that the requested resource has moved temporarily to a new 80 /// This indicates that the requested resource has moved temporarily to a new
80 /// URI. [location] is that URI; it can be either a [String] or a [Uri]. It's 81 /// URI. [location] is that URI; it can be either a [String] or a [Uri]. It's
81 /// automatically set as the Location header in [headers]. 82 /// automatically set as the Location header in [headers].
82 /// 83 ///
83 /// [body] is the response body. It may be either a [String], a 84 /// [body] is the response body. It may be either a [String], a
84 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String], 85 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String],
85 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to 86 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to
86 /// UTF-8. 87 /// UTF-8.
87 /// 88 ///
88 /// If [encoding] is passed, the "encoding" field of the Content-Type header 89 /// If [encoding] is passed, the "encoding" field of the Content-Type header
89 /// in [headers] will be set appropriately. If there is no existing 90 /// in [headers] will be set appropriately. If there is no existing
90 /// Content-Type header, it will be set to "application/octet-stream". 91 /// Content-Type header, it will be set to "application/octet-stream".
91 Response.found(location, {body, Map<String, String> headers, 92 Response.found(location, {body, Map<String, String> headers,
92 Encoding encoding}) 93 Encoding encoding, Map<String, Object> context})
93 : this._redirect(302, location, body, headers, encoding); 94 : this._redirect(302, location, body, headers, encoding, context);
94 95
95 /// Constructs a 303 See Other response. 96 /// Constructs a 303 See Other response.
96 /// 97 ///
97 /// This indicates that the response to the request should be retrieved using 98 /// This indicates that the response to the request should be retrieved using
98 /// a GET request to a new URI. [location] is that URI; it can be either a 99 /// a GET request to a new URI. [location] is that URI; it can be either a
99 /// [String] or a [Uri]. It's automatically set as the Location header in 100 /// [String] or a [Uri]. It's automatically set as the Location header in
100 /// [headers]. 101 /// [headers].
101 /// 102 ///
102 /// [body] is the response body. It may be either a [String], a 103 /// [body] is the response body. It may be either a [String], a
103 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String], 104 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String],
104 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to 105 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to
105 /// UTF-8. 106 /// UTF-8.
106 /// 107 ///
107 /// If [encoding] is passed, the "encoding" field of the Content-Type header 108 /// If [encoding] is passed, the "encoding" field of the Content-Type header
108 /// in [headers] will be set appropriately. If there is no existing 109 /// in [headers] will be set appropriately. If there is no existing
109 /// Content-Type header, it will be set to "application/octet-stream". 110 /// Content-Type header, it will be set to "application/octet-stream".
110 Response.seeOther(location, {body, Map<String, String> headers, 111 Response.seeOther(location, {body, Map<String, String> headers,
111 Encoding encoding}) 112 Encoding encoding, Map<String, Object> context})
112 : this._redirect(303, location, body, headers, encoding); 113 : this._redirect(303, location, body, headers, encoding, context);
113 114
114 /// Constructs a helper constructor for redirect responses. 115 /// Constructs a helper constructor for redirect responses.
115 Response._redirect(int statusCode, location, body, 116 Response._redirect(int statusCode, location, body,
116 Map<String, String> headers, Encoding encoding) 117 Map<String, String> headers, Encoding encoding, Map<String, Object> contex t)
117 : this(statusCode, 118 : this(statusCode,
118 body: body, 119 body: body,
119 encoding: encoding, 120 encoding: encoding,
120 headers: _addHeader( 121 headers: _addHeader(
121 headers, 'location', _locationToString(location))); 122 headers, 'location', _locationToString(location)),
123 context: context);
122 124
123 /// Constructs a 304 Not Modified response. 125 /// Constructs a 304 Not Modified response.
124 /// 126 ///
125 /// This is used to respond to a conditional GET request that provided 127 /// This is used to respond to a conditional GET request that provided
126 /// information used to determine whether the requested resource has changed 128 /// information used to determine whether the requested resource has changed
127 /// since the last request. It indicates that the resource has not changed and 129 /// since the last request. It indicates that the resource has not changed and
128 /// the old value should be used. 130 /// the old value should be used.
129 Response.notModified({Map<String, String> headers}) 131 Response.notModified({Map<String, String> headers, Map<String, Object> context })
130 : this(304, headers: _addHeader( 132 : this(304, headers: _addHeader(
131 headers, 'date', formatHttpDate(new DateTime.now()))); 133 headers, 'date', formatHttpDate(new DateTime.now())),
134 context: context);
132 135
133 /// Constructs a 403 Forbidden response. 136 /// Constructs a 403 Forbidden response.
134 /// 137 ///
135 /// This indicates that the server is refusing to fulfill the request. 138 /// This indicates that the server is refusing to fulfill the request.
136 /// 139 ///
137 /// [body] is the response body. It may be either a [String], a 140 /// [body] is the response body. It may be either a [String], a
138 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String], 141 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String],
139 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to 142 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to
140 /// UTF-8. 143 /// UTF-8.
141 /// 144 ///
142 /// If [encoding] is passed, the "encoding" field of the Content-Type header 145 /// If [encoding] is passed, the "encoding" field of the Content-Type header
143 /// in [headers] will be set appropriately. If there is no existing 146 /// in [headers] will be set appropriately. If there is no existing
144 /// Content-Type header, it will be set to "application/octet-stream". 147 /// Content-Type header, it will be set to "application/octet-stream".
145 Response.forbidden(body, {Map<String, String> headers, 148 Response.forbidden(body, {Map<String, String> headers,
146 Encoding encoding}) 149 Encoding encoding, Map<String, Object> context})
147 : this(403, body: body, headers: headers); 150 : this(403, body: body, headers: headers, context: context);
148 151
149 /// Constructs a 404 Not Found response. 152 /// Constructs a 404 Not Found response.
150 /// 153 ///
151 /// This indicates that the server didn't find any resource matching the 154 /// This indicates that the server didn't find any resource matching the
152 /// requested URI. 155 /// requested URI.
153 /// 156 ///
154 /// [body] is the response body. It may be either a [String], a 157 /// [body] is the response body. It may be either a [String], a
155 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String], 158 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String],
156 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to 159 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to
157 /// UTF-8. 160 /// UTF-8.
158 /// 161 ///
159 /// If [encoding] is passed, the "encoding" field of the Content-Type header 162 /// If [encoding] is passed, the "encoding" field of the Content-Type header
160 /// in [headers] will be set appropriately. If there is no existing 163 /// in [headers] will be set appropriately. If there is no existing
161 /// Content-Type header, it will be set to "application/octet-stream". 164 /// Content-Type header, it will be set to "application/octet-stream".
162 Response.notFound(body, {Map<String, String> headers, Encoding encoding}) 165 Response.notFound(body, {Map<String, String> headers, Encoding encoding,
163 : this(404, body: body, headers: headers); 166 Map<String, Object> context})
167 : this(404, body: body, headers: headers, context: context);
164 168
165 /// Constructs a 500 Internal Server Error response. 169 /// Constructs a 500 Internal Server Error response.
166 /// 170 ///
167 /// This indicates that the server had an internal error that prevented it 171 /// This indicates that the server had an internal error that prevented it
168 /// from fulfilling the request. 172 /// from fulfilling the request.
169 /// 173 ///
170 /// [body] is the response body. It may be either a [String], a 174 /// [body] is the response body. It may be either a [String], a
171 /// [Stream<List<int>>], or `null` to indicate no body. If it's `null` or not 175 /// [Stream<List<int>>], or `null` to indicate no body. If it's `null` or not
172 /// passed, a default error message is used. If it's a [String], [encoding] is 176 /// passed, a default error message is used. If it's a [String], [encoding] is
173 /// used to encode it to a [Stream<List<int>>]. It defaults to UTF-8. 177 /// used to encode it to a [Stream<List<int>>]. It defaults to UTF-8.
174 /// 178 ///
175 /// If [encoding] is passed, the "encoding" field of the Content-Type header 179 /// If [encoding] is passed, the "encoding" field of the Content-Type header
176 /// in [headers] will be set appropriately. If there is no existing 180 /// in [headers] will be set appropriately. If there is no existing
177 /// Content-Type header, it will be set to "application/octet-stream". 181 /// Content-Type header, it will be set to "application/octet-stream".
178 Response.internalServerError({body, Map<String, String> headers, 182 Response.internalServerError({body, Map<String, String> headers,
179 Encoding encoding}) 183 Encoding encoding, Map<String, Object> context})
180 : this(500, 184 : this(500,
181 headers: body == null ? _adjust500Headers(headers) : headers, 185 headers: body == null ? _adjust500Headers(headers) : headers,
182 body: body == null ? 'Internal Server Error' : body); 186 body: body == null ? 'Internal Server Error' : body,
187 context: context);
183 188
184 /// Constructs an HTTP response with the given [statusCode]. 189 /// Constructs an HTTP response with the given [statusCode].
185 /// 190 ///
186 /// [statusCode] must be greater than or equal to 100. 191 /// [statusCode] must be greater than or equal to 100.
187 /// 192 ///
188 /// [body] is the response body. It may be either a [String], a 193 /// [body] is the response body. It may be either a [String], a
189 /// [Stream<List<int>>], or `null` to indicate no body. If it's `null` or not 194 /// [Stream<List<int>>], or `null` to indicate no body. If it's `null` or not
190 /// passed, a default error message is used. If it's a [String], [encoding] is 195 /// passed, a default error message is used. If it's a [String], [encoding] is
191 /// used to encode it to a [Stream<List<int>>]. It defaults to UTF-8. 196 /// used to encode it to a [Stream<List<int>>]. It defaults to UTF-8.
192 /// 197 ///
193 /// If [encoding] is passed, the "encoding" field of the Content-Type header 198 /// If [encoding] is passed, the "encoding" field of the Content-Type header
194 /// in [headers] will be set appropriately. If there is no existing 199 /// in [headers] will be set appropriately. If there is no existing
195 /// Content-Type header, it will be set to "application/octet-stream". 200 /// Content-Type header, it will be set to "application/octet-stream".
196 Response(this.statusCode, {body, Map<String, String> headers, 201 Response(this.statusCode, {body, Map<String, String> headers,
197 Encoding encoding}) 202 Encoding encoding, Map<String, Object> context})
198 : super(_bodyToStream(body, encoding), 203 : super(_bodyToStream(body, encoding),
199 headers: _adjustHeaders(headers, encoding)) { 204 headers: _adjustHeaders(headers, encoding), context: context) {
200 if (statusCode < 100) { 205 if (statusCode < 100) {
201 throw new ArgumentError("Invalid status code: $statusCode."); 206 throw new ArgumentError("Invalid status code: $statusCode.");
202 } 207 }
203 } 208 }
204 } 209 }
205 210
206 /// Converts [body] to a byte stream. 211 /// Converts [body] to a byte stream.
207 /// 212 ///
208 /// [body] may be either a [String], a [Stream<List<int>>], or `null`. If it's a 213 /// [body] may be either a [String], a [Stream<List<int>>], or `null`. If it's a
209 /// [String], [encoding] will be used to convert it to a [Stream<List<int>>]. 214 /// [String], [encoding] will be used to convert it to a [Stream<List<int>>].
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 /// Converts [location], which may be a [String] or a [Uri], to a [String]. 266 /// Converts [location], which may be a [String] or a [Uri], to a [String].
262 /// 267 ///
263 /// Throws an [ArgumentError] if [location] isn't a [String] or a [Uri]. 268 /// Throws an [ArgumentError] if [location] isn't a [String] or a [Uri].
264 String _locationToString(location) { 269 String _locationToString(location) {
265 if (location is String) return location; 270 if (location is String) return location;
266 if (location is Uri) return location.toString(); 271 if (location is Uri) return location.toString();
267 272
268 throw new ArgumentError('Response location must be a String or Uri, was ' 273 throw new ArgumentError('Response location must be a String or Uri, was '
269 '"$location".'); 274 '"$location".');
270 } 275 }
OLDNEW
« no previous file with comments | « pkg/shelf/lib/src/request.dart ('k') | pkg/shelf/test/request_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698