blob: 84c3f4e35c1974f04ed3d98608f8058a4f4faccd [file] [log] [blame]
#!mojo mojo:dart_content_handler
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
import 'dart:mojo_application';
import 'dart:mojo_bindings';
import 'dart:mojo_core';
import 'dart:typed_data';
import 'package:mojo/services/network/public/interfaces/network_service.mojom.dart';
import 'package:mojo/services/network/public/interfaces/url_loader.mojom.dart';
class WGet extends Application {
NetworkServiceClient _networkServiceClient;
UrlLoaderClient _urlLoaderClient;
WGet.fromHandle(MojoHandle shellHandle) : super.fromHandle(shellHandle);
void initialize(List<String> args) {
run(args);
}
run(List<String> args) async {
if (args.length != 2) {
throw "Expected URL argument";
}
ByteData bodyData = await _getUrl(args[1]);
print("read ${bodyData.lengthInBytes} bytes");
_closeClients();
close();
}
Future<ByteData> _getUrl(String url) async {
_initClientsIfNeeded();
var urlRequest = new UrlRequest()
..url = url
..autoFollowRedirects = true;
var urlResponse = await _urlLoaderClient.callStart(urlRequest);
print("url => ${urlResponse.response.url}");
print("status_line => ${urlResponse.response.statusLine}");
print("mime_type => ${urlResponse.response.mimeType}");
return DataPipeDrainer.drainHandle(urlResponse.response.body);
}
void _initClientsIfNeeded() {
if (_networkServiceClient == null) {
var networkServiceClientEndpoint = connectToService(
"mojo:network_service", NetworkServiceInterface.name);
_networkServiceClient =
new NetworkServiceClient(networkServiceClientEndpoint);
}
if (_urlLoaderClient == null) {
_urlLoaderClient = new UrlLoaderClient.unbound();
_networkServiceClient.callCreateUrlLoader(_urlLoaderClient);
}
}
void _closeClients() {
_urlLoaderClient.close();
_networkServiceClient.close();
_urlLoaderClient = null;
_networkServiceClient = null;
}
}
main(List args) {
MojoHandle shellHandle = new MojoHandle(args[0]);
String url = args[1];
var wget = new WGet.fromHandle(shellHandle);
wget.listen();
}