#!mojo mojo:sky_viewer
<sky>
<script>
import '/sky/framework/embedder.dart';
import 'dart:async';
import 'dart:typed_data';
import "dart:sky.internals" as internals;
import 'dart:mojo.bindings';
import 'dart:mojo.core';

import 'package:mojo/services/network/public/interfaces/network_service.mojom.dart';
import 'package:mojo/services/network/public/interfaces/url_loader.mojom.dart';

Future<String> run(url) async {
  var networkService= new NetworkServiceProxy.unbound();
  embedder.connectToService("mojo:network_service", networkService);

  var urlLoader = new UrlLoaderProxy.unbound();
  networkService.ptr.createUrlLoader(urlLoader);

  var urlRequest = new UrlRequest()
      ..url = url
      ..autoFollowRedirects = true;
  var urlResponse = await urlLoader.ptr.start(urlRequest);

  urlLoader.close();
  networkService.close();

  print("url => ${urlResponse.response.url}");
  print("status_line => ${urlResponse.response.statusLine}");
  print("mime_type => ${urlResponse.response.mimeType}");

  ByteData bodyData =
      await DataPipeDrainer.drainHandle(urlResponse.response.body);
  print("read ${bodyData.lengthInBytes} bytes");

  return new String.fromCharCodes(new Uint8List.view(bodyData.buffer));
}

main() async {
  var url = "http://127.0.0.1:8000/sky/tests/services/resources/pass.txt";
  var result = await run(url);
  internals.notifyTestComplete(result);
}
</script>
</sky>
