Add Null Safety hints to Webdriver

This only adds comments that contain the hints for the migration tool
and as such does not change the behavior of the code in any way. But
it might be useful to document how we migrated the package. The next
CL will migrate the package to Null Safety and remove all these
comments.

PiperOrigin-RevId: 330909885
diff --git a/lib/src/async/web_driver.dart b/lib/src/async/web_driver.dart
index 460e14f..5a8819d 100644
--- a/lib/src/async/web_driver.dart
+++ b/lib/src/async/web_driver.dart
@@ -190,13 +190,13 @@
 
   /// Take a screenshot of the current page as PNG and return it as
   /// base64-encoded string.
-  Future<String> captureScreenshotAsBase64() => _client.send(
+  Future<String /*!*/ > captureScreenshotAsBase64() => _client.send(
       _handler.core.buildScreenshotRequest(),
       _handler.core.parseScreenshotResponse);
 
   /// Take a screenshot of the specified element as PNG and return it as
   /// base64-encoded string.
-  Future<String> captureElementScreenshotAsBase64(WebElement element) =>
+  Future<String /*!*/ > captureElementScreenshotAsBase64(WebElement element) =>
       _client.send(_handler.core.buildElementScreenshotRequest(element.id),
           _handler.core.parseScreenshotResponse);
 
diff --git a/lib/src/common/session.dart b/lib/src/common/session.dart
index 7d66d1c..9291907 100644
--- a/lib/src/common/session.dart
+++ b/lib/src/common/session.dart
@@ -2,7 +2,7 @@
 
 class SessionInfo {
   /// Id of the session.
-  final String id;
+  final String /*!*/ id;
 
   /// Spec of the session.
   ///
diff --git a/lib/src/common/web_element.dart b/lib/src/common/web_element.dart
index 3eb8b5e..6d0cc6b 100644
--- a/lib/src/common/web_element.dart
+++ b/lib/src/common/web_element.dart
@@ -3,7 +3,7 @@
 
 /// Common interface for web element, containing only the element id.
 abstract class WebElement {
-  String get id;
+  String /*!*/ get id;
 
   Map<String, String> toJson() => {jsonWireElementStr: id, w3cElementStr: id};
 }
diff --git a/lib/src/common/webdriver_handler.dart b/lib/src/common/webdriver_handler.dart
index a2ffa04..4e7f266 100644
--- a/lib/src/common/webdriver_handler.dart
+++ b/lib/src/common/webdriver_handler.dart
@@ -53,7 +53,7 @@
 
   /// Parses general response got from web driver server.
   dynamic parseGeneralResponse(
-      WebDriverResponse response, dynamic Function(String) createElement);
+      WebDriverResponse response, dynamic Function(String /*!*/) createElement);
 }
 
 abstract class SessionHandler {
@@ -75,19 +75,19 @@
   WebDriverRequest buildCurrentUrlRequest();
 
   /// Parses response for 'Get Current URL'.
-  String parseCurrentUrlResponse(WebDriverResponse response);
+  String /*!*/ parseCurrentUrlResponse(WebDriverResponse response);
 
   /// Builds request for 'Get Title'.
   WebDriverRequest buildTitleRequest();
 
   /// Parses response for 'Get Title'.
-  String parseTitleResponse(WebDriverResponse response);
+  String /*!*/ parseTitleResponse(WebDriverResponse response);
 
   /// Builds request for 'Get Page Source'.
   WebDriverRequest buildPageSourceRequest();
 
   /// Parses response for 'Get Page Source'.
-  String parsePageSourceResponse(WebDriverResponse response);
+  String /*!*/ parsePageSourceResponse(WebDriverResponse response);
 
   /// Builds request for 'Take Screenshot'.
   WebDriverRequest buildScreenshotRequest();
@@ -96,21 +96,21 @@
   WebDriverRequest buildElementScreenshotRequest(String elementId);
 
   /// Parses response for 'Take Screenshot' to get a base64 encoded image.
-  String parseScreenshotResponse(WebDriverResponse response);
+  String /*!*/ parseScreenshotResponse(WebDriverResponse response);
 
   /// Builds request for 'Execute Async Script'.
   WebDriverRequest buildExecuteAsyncRequest(String script, List args);
 
   /// Parses response for 'Execute Async Script'.
   dynamic parseExecuteAsyncResponse(
-      WebDriverResponse response, dynamic Function(String) createElement);
+      WebDriverResponse response, dynamic Function(String /*!*/) createElement);
 
   /// Builds request for 'Execute Script'.
   WebDriverRequest buildExecuteRequest(String script, List args);
 
   /// Parses response for 'Execute Script'.
   dynamic parseExecuteResponse(
-      WebDriverResponse response, dynamic Function(String) createElement);
+      WebDriverResponse response, dynamic Function(String /*!*/) createElement);
 
   /// Builds request for 'Delete Session'.
   WebDriverRequest buildDeleteSessionRequest();
@@ -142,19 +142,19 @@
   WebDriverRequest buildSelectedRequest(String elementId);
 
   /// Parses response for 'Is Element Selected'.
-  bool parseSelectedResponse(WebDriverResponse response);
+  bool /*!*/ parseSelectedResponse(WebDriverResponse response);
 
   /// Builds request for 'Is Element Enabled'.
   WebDriverRequest buildEnabledRequest(String elementId);
 
   /// Parses response for 'Is Element Enabled'.
-  bool parseEnabledResponse(WebDriverResponse response);
+  bool /*!*/ parseEnabledResponse(WebDriverResponse response);
 
   /// Builds request for 'Is Element Displayed'.
   WebDriverRequest buildDisplayedRequest(String elementId);
 
   /// Parses response for 'Is Element Displayed'.
-  bool parseDisplayedResponse(WebDriverResponse response);
+  bool /*!*/ parseDisplayedResponse(WebDriverResponse response);
 
   /// Builds request for 'Element Location'.
   WebDriverRequest buildLocationRequest(String elementId);
@@ -174,13 +174,13 @@
   WebDriverRequest buildNameRequest(String elementId);
 
   /// Parses response for 'Element Name'.
-  String parseNameResponse(WebDriverResponse response);
+  String /*!*/ parseNameResponse(WebDriverResponse response);
 
   /// Builds request for 'Element Text'.
   WebDriverRequest buildTextRequest(String elementId);
 
   /// Parses response for 'Element Text'.
-  String parseTextResponse(WebDriverResponse response);
+  String /*!*/ parseTextResponse(WebDriverResponse response);
 
   /// Builds request for 'Element Attribute'.
   WebDriverRequest buildAttributeRequest(String elementId, String name);
@@ -218,13 +218,13 @@
   WebDriverRequest buildFindElementsRequest(By by, [String contextId]);
 
   /// Parses response got for finding elements to get [List] of element id.
-  List<String> parseFindElementsResponse(WebDriverResponse response);
+  List<String> /*!*/ parseFindElementsResponse(WebDriverResponse response);
 
   /// Builds request for finding a single element.
   WebDriverRequest buildFindElementRequest(By by, [String contextId]);
 
   /// Parses response got for finding element to get the element id.
-  String parseFindElementResponse(WebDriverResponse response);
+  String /*!*/ parseFindElementResponse(WebDriverResponse response);
 
   /// Builds request for finding the current active element.
   WebDriverRequest buildFindActiveElementRequest();
@@ -287,7 +287,7 @@
   WebDriverRequest buildGetTextRequest();
 
   /// Parses response for 'Get Alert Text'.
-  String parseGetTextResponse(WebDriverResponse response);
+  String /*!*/ parseGetTextResponse(WebDriverResponse response);
 
   /// Builds request for 'Accept Alert'.
   WebDriverRequest buildAcceptRequest();
@@ -349,7 +349,7 @@
   WebDriverRequest buildGetActiveWindowRequest();
 
   /// Parses response for 'Get Window Handle' to get window id.
-  String parseGetActiveWindowResponse(WebDriverResponse response);
+  String /*!*/ parseGetActiveWindowResponse(WebDriverResponse response);
 
   /// Builds request for 'Set Window Active'.
   WebDriverRequest buildSetActiveRequest(String windowId);
@@ -475,7 +475,7 @@
   WebDriverRequest buildGetAllCookiesRequest();
 
   /// Parses response for 'Get All Cookies'.
-  List<Cookie> parseGetAllCookiesResponse(WebDriverResponse response);
+  List<Cookie> /*!*/ parseGetAllCookiesResponse(WebDriverResponse response);
 }
 
 /// Handler for Timeouts.
@@ -508,5 +508,5 @@
   WebDriverRequest buildGetLogsRequest(String logType);
 
   /// Parses response for 'Get Logs'.
-  List<LogEntry> parseGetLogsResponse(WebDriverResponse response);
+  List<LogEntry> /*!*/ parseGetLogsResponse(WebDriverResponse response);
 }
diff --git a/lib/src/handler/infer_handler.dart b/lib/src/handler/infer_handler.dart
index abc895f..25d96b5 100644
--- a/lib/src/handler/infer_handler.dart
+++ b/lib/src/handler/infer_handler.dart
@@ -84,7 +84,7 @@
 
   @override
   SessionInfo parseCreateResponse(WebDriverResponse response) {
-    Map responseBody;
+    Map /*!*/ responseBody;
     try {
       responseBody = json.decode(response.body);
     } catch (e) {
diff --git a/lib/src/handler/json_wire/utils.dart b/lib/src/handler/json_wire/utils.dart
index 01a1f20..bc2f04f 100644
--- a/lib/src/handler/json_wire/utils.dart
+++ b/lib/src/handler/json_wire/utils.dart
@@ -96,13 +96,13 @@
 /// Prefix to represent element in webdriver uri.
 ///
 /// When [elementId] is null, it means root element.
-String elementPrefix(String elementId) =>
+String elementPrefix(String /*?*/ elementId) =>
     elementId == null ? '' : 'element/$elementId/';
 
 /// Deserializes json object returned by WebDriver server.
 ///
 /// Mainly it handles the element object rebuild.
-dynamic deserialize(result, dynamic Function(String) createElement) {
+dynamic deserialize(result, dynamic Function(String /*!*/) createElement) {
   if (result is Map) {
     if (result.containsKey(jsonWireElementStr)) {
       return createElement(result[jsonWireElementStr]);
diff --git a/lib/src/handler/json_wire/window.dart b/lib/src/handler/json_wire/window.dart
index 323d2ce..391bfed 100644
--- a/lib/src/handler/json_wire/window.dart
+++ b/lib/src/handler/json_wire/window.dart
@@ -24,7 +24,7 @@
       WebDriverRequest.getRequest('window_handles');
 
   @override
-  List<String> parseGetWindowsResponse(WebDriverResponse response) =>
+  List<String> /*!*/ parseGetWindowsResponse(WebDriverResponse response) =>
       parseJsonWireResponse(response).cast<String>();
 
   @override
diff --git a/lib/src/handler/w3c/core.dart b/lib/src/handler/w3c/core.dart
index bf852e8..ed91a33 100644
--- a/lib/src/handler/w3c/core.dart
+++ b/lib/src/handler/w3c/core.dart
@@ -44,8 +44,8 @@
           'execute/async', {'script': script, 'args': serialize(args)});
 
   @override
-  dynamic parseExecuteAsyncResponse(
-          WebDriverResponse response, dynamic Function(String) createElement) =>
+  dynamic parseExecuteAsyncResponse(WebDriverResponse response,
+          dynamic Function(String /*!*/) createElement) =>
       deserialize(parseW3cResponse(response), createElement);
 
   @override
@@ -54,8 +54,8 @@
           'execute/sync', {'script': script, 'args': serialize(args)});
 
   @override
-  dynamic parseExecuteResponse(
-          WebDriverResponse response, dynamic Function(String) createElement) =>
+  dynamic parseExecuteResponse(WebDriverResponse response,
+          dynamic Function(String /*!*/) createElement) =>
       deserialize(parseW3cResponse(response), createElement);
 
   @override
diff --git a/lib/src/handler/w3c/utils.dart b/lib/src/handler/w3c/utils.dart
index 84f7901..a9ba56c 100644
--- a/lib/src/handler/w3c/utils.dart
+++ b/lib/src/handler/w3c/utils.dart
@@ -119,7 +119,7 @@
 String elementPrefix(String elementId) =>
     elementId == null ? '' : 'element/$elementId/';
 
-dynamic deserialize(result, dynamic Function(String) createElement) {
+dynamic deserialize(result, dynamic Function(String /*!*/) createElement) {
   if (result is Map) {
     if (result.containsKey(w3cElementStr)) {
       return createElement(result[w3cElementStr]);
diff --git a/lib/src/handler/w3c/window.dart b/lib/src/handler/w3c/window.dart
index 9b1829a..9e713fa 100644
--- a/lib/src/handler/w3c/window.dart
+++ b/lib/src/handler/w3c/window.dart
@@ -24,7 +24,7 @@
       WebDriverRequest.getRequest('window/handles');
 
   @override
-  List<String> parseGetWindowsResponse(WebDriverResponse response) =>
+  List<String> /*!*/ parseGetWindowsResponse(WebDriverResponse response) =>
       parseW3cResponse(response).cast<String>();
 
   @override
diff --git a/lib/src/request/async_xhr_request_client.dart b/lib/src/request/async_xhr_request_client.dart
index 72327f2..9b723cc 100644
--- a/lib/src/request/async_xhr_request_client.dart
+++ b/lib/src/request/async_xhr_request_client.dart
@@ -27,7 +27,7 @@
 
     headers.addAll(_headers);
 
-    HttpRequest httpRequest;
+    HttpRequest /*!*/ httpRequest;
 
     try {
       httpRequest = await HttpRequest.request(resolve(request.uri).toString(),
diff --git a/lib/src/sync/web_driver.dart b/lib/src/sync/web_driver.dart
index 6ffe382..112fb27 100644
--- a/lib/src/sync/web_driver.dart
+++ b/lib/src/sync/web_driver.dart
@@ -202,15 +202,15 @@
 
   /// Take a screenshot of the current page as PNG and return it as
   /// base64-encoded string.
-  String captureScreenshotAsBase64() => _client.send(
+  String /*!*/ captureScreenshotAsBase64() => _client.send(
       _handler.core.buildScreenshotRequest(),
       _handler.core.parseScreenshotResponse);
 
   /// Take a screenshot of the specified element as PNG and return it as
   /// base64-encoded string.
-  String captureElementScreenshotAsBase64(WebElement element) => _client.send(
-      _handler.core.buildElementScreenshotRequest(element.id),
-      _handler.core.parseScreenshotResponse);
+  String /*!*/ captureElementScreenshotAsBase64(WebElement element) =>
+      _client.send(_handler.core.buildElementScreenshotRequest(element.id),
+          _handler.core.parseScreenshotResponse);
 
   /// Take a screenshot of the current page as PNG as list of uint8.
   List<int> captureScreenshotAsList() {
diff --git a/lib/src/sync/web_element.dart b/lib/src/sync/web_element.dart
index ebe8840..545e030 100644
--- a/lib/src/sync/web_element.dart
+++ b/lib/src/sync/web_element.dart
@@ -74,11 +74,12 @@
     var p = this;
     final result = <String>[];
     while (p.id != null) {
-      if (_parentCache.containsKey(p.id)) {
+      var id = p.id;
+      if (_parentCache.containsKey(id)) {
         break;
       }
-      result.add(p.id);
-      _parentCache[p.id] = (p = p.parent).id;
+      result.add(id);
+      _parentCache[id] = (p = p.parent).id;
     }
 
     if (p.id != null) {
diff --git a/lib/support/async.dart b/lib/support/async.dart
index d754005..f97a2fe 100644
--- a/lib/support/async.dart
+++ b/lib/support/async.dart
@@ -57,7 +57,7 @@
     var endTime = now.add(timeout);
     while (true) {
       try {
-        var value = await condition();
+        T /*?*/ value = await condition();
         if (mMatcher != null) {
           _matcherExpect(value, mMatcher);
         }
diff --git a/lib/support/firefox_profile.dart b/lib/support/firefox_profile.dart
index 68d0130..a2fbadc 100644
--- a/lib/support/firefox_profile.dart
+++ b/lib/support/firefox_profile.dart
@@ -176,7 +176,7 @@
   }
 
   /// Helper for [loadPrefsFile]
-  static bool _ignoreLine(String line) {
+  static bool _ignoreLine(String /*?*/ line) {
     line ??= '';
     line = line.trim();
     if (line.isEmpty ||
@@ -290,8 +290,8 @@
       return InvalidOption('Not a valid prefs option: "$prefs".')
           as PrefsOption<T>;
     }
-    final name = match.group(1);
-    final valueString = match.group(2);
+    final name = match.group(1) /*!*/;
+    final valueString = match.group(2) /*!*/;
     if (valueString.startsWith('"') && valueString.endsWith('"')) {
       final value = valueString
           .substring(1, valueString.length - 1)