[e2e] e2e web changes part1: registering web extension. (#2502)
* e2e web changes part1: registering web extension.
* update pubspec yaml version
* update changelog
* changes by format tool
diff --git a/packages/e2e/CHANGELOG.md b/packages/e2e/CHANGELOG.md
index 93cf094..da2d71b 100644
--- a/packages/e2e/CHANGELOG.md
+++ b/packages/e2e/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.2.4+1
+
+* Registering web service extension for using e2e with web.
+
## 0.2.4
* Fixed problem with XCTest in XCode 11.3 where the testing bundles were getting
diff --git a/packages/e2e/lib/_extension_io.dart b/packages/e2e/lib/_extension_io.dart
new file mode 100644
index 0000000..a8e66fc
--- /dev/null
+++ b/packages/e2e/lib/_extension_io.dart
@@ -0,0 +1,13 @@
+// Copyright 2019 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.
+
+/// The dart:io implementation of [registerWebServiceExtension].
+///
+/// See also:
+///
+/// * [_extension_web.dart], which has the dart:html implementation
+void registerWebServiceExtension(
+ Future<Map<String, dynamic>> Function(Map<String, String>) call) {
+ throw UnsupportedError('Use registerServiceExtension instead');
+}
diff --git a/packages/e2e/lib/_extension_web.dart b/packages/e2e/lib/_extension_web.dart
new file mode 100644
index 0000000..8bf5950
--- /dev/null
+++ b/packages/e2e/lib/_extension_web.dart
@@ -0,0 +1,32 @@
+// Copyright 2019 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:convert';
+import 'dart:html' as html;
+import 'dart:js';
+import 'dart:js_util' as js_util;
+
+/// The dart:html implementation of [registerWebServiceExtension].
+///
+/// Registers Web Service Extension for Flutter Web application.
+///
+/// window.$flutterDriver will be called by Flutter Web Driver to process
+/// Flutter command.
+///
+/// See also:
+///
+/// * [_extension_io.dart], which has the dart:io implementation
+void registerWebServiceExtension(
+ Future<Map<String, dynamic>> Function(Map<String, String>) call) {
+ js_util.setProperty(html.window, '\$flutterDriver',
+ allowInterop((dynamic message) async {
+ // ignore: undefined_function, undefined_identifier
+ final Map<String, String> params = Map<String, String>.from(
+ jsonDecode(message as String) as Map<String, dynamic>);
+ final Map<String, dynamic> result =
+ Map<String, dynamic>.from(await call(params));
+ context['\$flutterDriverResult'] = json.encode(result);
+ }));
+}
diff --git a/packages/e2e/lib/e2e.dart b/packages/e2e/lib/e2e.dart
index 5682ae2..afcbeb0 100644
--- a/packages/e2e/lib/e2e.dart
+++ b/packages/e2e/lib/e2e.dart
@@ -8,6 +8,8 @@
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
+import '_extension_io.dart' if (dart.library.html) '_extension_web.dart';
+
/// A subclass of [LiveTestWidgetsFlutterBinding] that reports tests results
/// on a channel to adapt them to native instrumentation test format.
class E2EWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding {
@@ -70,6 +72,10 @@
};
}
+ if (kIsWeb) {
+ registerWebServiceExtension(callback);
+ }
+
registerServiceExtension(name: 'driver', callback: callback);
}
diff --git a/packages/e2e/pubspec.yaml b/packages/e2e/pubspec.yaml
index 7cecccc..760d0b8 100644
--- a/packages/e2e/pubspec.yaml
+++ b/packages/e2e/pubspec.yaml
@@ -1,6 +1,6 @@
name: e2e
description: Runs tests that use the flutter_test API as integration tests.
-version: 0.2.4
+version: 0.2.4+1
homepage: https://github.com/flutter/plugins/tree/master/packages/e2e
environment: