Added additional uri field to routeInformationUpdated to accept entir… (#40250)

Added additional uri field to routeInformationUpdated to accept entir…
diff --git a/lib/web_ui/lib/src/engine/window.dart b/lib/web_ui/lib/src/engine/window.dart
index 11af5ef..f48f790 100644
--- a/lib/web_ui/lib/src/engine/window.dart
+++ b/lib/web_ui/lib/src/engine/window.dart
@@ -191,8 +191,23 @@
           return true;
         case 'routeInformationUpdated':
           assert(arguments != null);
+          final String? uriString = arguments!.tryString('uri');
+          final String path;
+          if (uriString != null) {
+            final Uri uri = Uri.parse(uriString);
+            // Need to remove scheme and authority.
+            path = Uri.decodeComponent(
+              Uri(
+                path: uri.path.isEmpty ? '/' : uri.path,
+                queryParameters: uri.queryParametersAll.isEmpty ? null : uri.queryParametersAll,
+                fragment: uri.fragment.isEmpty ? null : uri.fragment,
+              ).toString(),
+            );
+          } else {
+            path = arguments.tryString('location')!;
+          }
           browserHistory.setRouteName(
-            arguments!.tryString('location'),
+            path,
             state: arguments['state'],
             replace: arguments.tryBool('replace') ?? false,
           );
diff --git a/lib/web_ui/test/window_test.dart b/lib/web_ui/test/window_test.dart
index b356b6f..d37bdbd 100644
--- a/lib/web_ui/test/window_test.dart
+++ b/lib/web_ui/test/window_test.dart
@@ -301,6 +301,30 @@
     expect(actualState['state4']['substate2'], 'string2');
   });
 
+  test('routeInformationUpdated can handle uri',
+      () async {
+    await window.debugInitializeHistory(TestUrlStrategy.fromEntry(
+      const TestHistoryEntry('initial state', null, '/initial'),
+    ), useSingle: false);
+    expect(window.browserHistory, isA<MultiEntriesBrowserHistory>());
+
+    // routeInformationUpdated does not
+    final Completer<void> callback = Completer<void>();
+    window.sendPlatformMessage(
+      'flutter/navigation',
+      const JSONMethodCodec().encodeMethodCall(const MethodCall(
+        'routeInformationUpdated',
+        <String, dynamic>{
+          'uri': 'http://myhostname.com/baz?abc=def#fragment',
+        },
+      )),
+      (_) { callback.complete(); },
+    );
+    await callback.future;
+    expect(window.browserHistory, isA<MultiEntriesBrowserHistory>());
+    expect(window.browserHistory.urlStrategy!.getPath(), '/baz?abc=def#fragment');
+  });
+
   test('can replace in MultiEntriesBrowserHistory',
       () async {
     await window.debugInitializeHistory(TestUrlStrategy.fromEntry(