Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(222)

Unified Diff: examples/dart/wget.dart

Issue 816113004: Dart: Adds a content handler and a test. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | mojo/BUILD.gn » ('j') | mojo/public/dart/src/application.dart » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: examples/dart/wget.dart
diff --git a/examples/dart/wget.dart b/examples/dart/wget.dart
new file mode 100644
index 0000000000000000000000000000000000000000..427dc705df02f3315cf3f8b25a1ab9b2e5eb9256
--- /dev/null
+++ b/examples/dart/wget.dart
@@ -0,0 +1,79 @@
+#!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_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 ClientApplication {
+ NetworkServiceClient _networkServiceClient;
+ URLLoaderClient _urlLoaderClient;
+
+ WGet(MojoMessagePipeEndpoint endpoint) : super(endpoint);
+
+ WGet.fromHandle(int shellHandle) : super.fromHandle(shellHandle);
+
+ 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
+ ..auto_follow_redirects = true;
+
+ var urlResponse = await _urlLoaderClient.callStart(urlRequest);
+ print("url => ${urlResponse.response.url}");
+ print("status_line => ${urlResponse.response.status_line}");
+ print("mime_type => ${urlResponse.response.mime_type}");
+
+ return DataPipeDrainer.drainHandle(urlResponse.response.body);
+ }
+
+ void _initClientsIfNeeded() {
+ if (_networkServiceClient == null) {
+ var networkServiceClientEndpoint = connectToService(
+ "mojo:network_service", NetworkServiceInterface.name);
+ _networkServiceClient =
+ new NetworkServiceClient(networkServiceClientEndpoint)..open();
+ }
+ if (_urlLoaderClient == null) {
+ var urlLoaderPipe = new MojoMessagePipe();
+ _networkServiceClient.callCreateURLLoader(
+ urlLoaderPipe.endpoints[1].handle);
+ _urlLoaderClient =
+ new URLLoaderClient(urlLoaderPipe.endpoints[0])..open();
+ }
+ }
+
+ void _closeClients() {
+ _urlLoaderClient.close();
+ _networkServiceClient.close();
+ _urlLoaderClient = null;
+ _networkServiceClient = null;
+ }
+}
+
+main(List args) {
+ int shellHandle = args[0];
+ String url = args[1];
+ var wget = new WGet.fromHandle(shellHandle);
+ wget.listen();
+}
« no previous file with comments | « no previous file | mojo/BUILD.gn » ('j') | mojo/public/dart/src/application.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698