OLD | NEW |
| (Empty) |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 /** | |
6 * This contains a reader that accesses data using the HttpRequest | |
7 * facility, and thus works only in the web browser. | |
8 */ | |
9 | |
10 library http_request_data_reader; | |
11 | |
12 import 'dart:async'; | |
13 import 'dart:html'; | |
14 import 'intl_helpers.dart'; | |
15 | |
16 class HttpRequestDataReader implements LocaleDataReader { | |
17 | |
18 /** The base url from which we read the data. */ | |
19 String url; | |
20 HttpRequestDataReader(this.url); | |
21 | |
22 Future read(String locale) { | |
23 // TODO(alanknight): Remove this once it's not necessary for Chrome. | |
24 // Without it, the tests will be flaky on Chrome. Issue 11834. | |
25 var someNumber = new DateTime.now().millisecondsSinceEpoch; | |
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 || | |
42 xhr.status == 304) { | |
43 completer.complete(xhr); | |
44 } else { | |
45 completer.completeError(e); | |
46 } | |
47 }); | |
48 | |
49 xhr.onError.listen(completer.completeError); | |
50 xhr.send(); | |
51 | |
52 return completer.future; | |
53 } | |
54 } | |
OLD | NEW |