| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 /** | 5 /** |
| 6 * This contains a reader that accesses data using the HttpRequest | 6 * This contains a reader that accesses data using the HttpRequest |
| 7 * facility, and thus works only in the web browser. | 7 * facility, and thus works only in the web browser. |
| 8 */ | 8 */ |
| 9 | 9 |
| 10 library http_request_data_reader; | 10 library http_request_data_reader; |
| 11 | 11 |
| 12 import 'dart:async'; | 12 import 'dart:async'; |
| 13 import 'dart:html'; | 13 import 'dart:html'; |
| 14 import 'intl_helpers.dart'; | 14 import 'intl_helpers.dart'; |
| 15 | 15 |
| 16 class HTTPRequestDataReader implements LocaleDataReader { | 16 class HTTPRequestDataReader implements LocaleDataReader { |
| 17 | 17 |
| 18 /** The base url from which we read the data. */ | 18 /** The base url from which we read the data. */ |
| 19 String url; | 19 String url; |
| 20 HTTPRequestDataReader(this.url); | 20 HTTPRequestDataReader(this.url); |
| 21 | 21 |
| 22 Future read(String locale) { | 22 Future read(String locale) { |
| 23 // TODO(alanknight): Remove this once it's not necessary for Chrome. | 23 // TODO(alanknight): Remove this once it's not necessary for Chrome. |
| 24 // Without it, the tests will be flaky on Chrome. Issue 11834. | 24 // Without it, the tests will be flaky on Chrome. Issue 11834. |
| 25 var someNumber = new DateTime.now().millisecondsSinceEpoch; | 25 var someNumber = new DateTime.now().millisecondsSinceEpoch; |
| 26 return HttpRequest.getString('$url$locale.json?cacheBlocker=$someNumber'); | 26 var request = new HttpRequest(); |
| 27 request.timeout = 5000; |
| 28 return _getString('$url$locale.json?cacheBlocker=$someNumber', request) |
| 29 .then((r) => r.responseText); |
| 30 } |
| 31 |
| 32 /// Read a string with the given request. This is a stripped down copy |
| 33 /// of HttpRequest getString, but was the simplest way I could find to |
| 34 /// issue a request with a timeout. |
| 35 Future<HttpRequest> _getString(String url, HttpRequest xhr) { |
| 36 var completer = new Completer<HttpRequest>(); |
| 37 xhr.open('GET', url, async: true); |
| 38 xhr.onLoad.listen((e) { |
| 39 // Note: file:// URIs have status of 0. |
| 40 if ((xhr.status >= 200 && xhr.status < 300) || |
| 41 xhr.status == 0 || xhr.status == 304) { |
| 42 completer.complete(xhr); |
| 43 } else { |
| 44 completer.completeError(e); |
| 45 } |
| 46 }); |
| 47 |
| 48 xhr.onError.listen(completer.completeError); |
| 49 xhr.send(); |
| 50 |
| 51 return completer.future; |
| 27 } | 52 } |
| 28 } | 53 } |
| OLD | NEW |