| Index: dart/pkg/http_base/lib/http_base_html.dart
|
| diff --git a/dart/pkg/http_base/lib/http_base_html.dart b/dart/pkg/http_base/lib/http_base_html.dart
|
| deleted file mode 100644
|
| index 14d57e4528a0352d6213955a156090e61bd77908..0000000000000000000000000000000000000000
|
| --- a/dart/pkg/http_base/lib/http_base_html.dart
|
| +++ /dev/null
|
| @@ -1,99 +0,0 @@
|
| -library http_base.http_base_html;
|
| -
|
| -import 'dart:html';
|
| -import 'dart:async';
|
| -import 'dart:convert';
|
| -import 'dart:typed_data';
|
| -
|
| -import 'http_base.dart';
|
| -export 'http_base.dart';
|
| -
|
| -/// The following headers will be blocked by browsers. See:
|
| -/// http://www.w3.org/TR/XMLHttpRequest/
|
| -const List<String> _BLOCKED_HEADERS = const [
|
| - 'accept-charset', 'accept-encoding', 'access-control-request-headers',
|
| - 'access-control-request-method', 'connection', 'content-length', 'cookie',
|
| - 'cookie2', 'date', 'dnt', 'expect', 'host', 'keep-alive', 'origin',
|
| - 'referer', 'te', 'trailer', 'transfer-encoding', 'upgrade', 'user-agent',
|
| - 'via'];
|
| -
|
| -/// An implementation for [RequestHandler]. It uses dart:html to make http
|
| -/// requests.
|
| -class Client {
|
| - Future<Response> call(Request request) {
|
| - return _bufferData(request.read()).then((Uint8List data) {
|
| - var url = request.url.toString();
|
| - return _request(url, request.method, request.headers, data).then((xhr) {
|
| - var headers = HeadersImpl.Empty.replace(xhr.responseHeaders);
|
| - var body = _readResponse(xhr);
|
| - return new ResponseImpl(xhr.status, headers: headers, body: body);
|
| - });
|
| - });
|
| - }
|
| -
|
| - Future<Uint8List> _bufferData(Stream<List<int>> stream) {
|
| - int size = 0;
|
| -
|
| - return stream.fold([], (buffer, data) {
|
| - size += data.length;
|
| - return buffer..add(data);
|
| - }).then((List<List<int>> buffer) {
|
| - if (size > 0) {
|
| - var data;
|
| - if (buffer.length == 0 && buffer[0] is Uint8List) {
|
| - data = buffer[0];
|
| - } else {
|
| - data = new Uint8List(size);
|
| - int offset = 0;
|
| - for (var bytes in buffer) {
|
| - var end = offset + bytes.length;
|
| - data.setRange(offset, end, bytes);
|
| - offset = end;
|
| - }
|
| - }
|
| - return data;
|
| - }
|
| - return null;
|
| - });
|
| - }
|
| -
|
| - Future<HttpRequest> _request(String url,
|
| - String method,
|
| - Headers headers,
|
| - Uint8List sendData) {
|
| - var completer = new Completer<HttpRequest>();
|
| -
|
| - var xhr = new HttpRequest();
|
| - xhr.open(method, url, async: true);
|
| -
|
| - // Maybe we should use 'arraybuffer' instead?
|
| - xhr.responseType = 'blob';
|
| -
|
| - // TODO: Special case Cookie/Set-Cookie here!
|
| - for (var name in headers.names) {
|
| - xhr.setRequestHeader(name, headers[name]);
|
| - }
|
| -
|
| - xhr.onLoad.first.then((_) => completer.complete(xhr));
|
| - xhr.onError.first.then(completer.completeError);
|
| - xhr.send(sendData);
|
| -
|
| - return completer.future;
|
| - }
|
| -
|
| - Stream<List<int>> _readResponse(HttpRequest request) {
|
| - var controller = new StreamController<List<int>>();
|
| -
|
| - var data = request.response;
|
| - assert (data is Blob);
|
| -
|
| - var reader = new FileReader();
|
| - reader.onLoad.first.then((_) {
|
| - controller.add(reader.result);
|
| - controller.close();
|
| - });
|
| - reader.readAsArrayBuffer(data);
|
| -
|
| - return controller.stream;
|
| - }
|
| -}
|
|
|