Fix a bug preventing Dart server apps from connecting to DevTools extensions (#6982)
diff --git a/packages/devtools_extensions/CHANGELOG.md b/packages/devtools_extensions/CHANGELOG.md
index 53344ad..b22d13c 100644
--- a/packages/devtools_extensions/CHANGELOG.md
+++ b/packages/devtools_extensions/CHANGELOG.md
@@ -1,3 +1,34 @@
+## 0.0.12
+* Fix a bug preventing Dart server apps from connecting to DevTools extensions.
+
+## 0.0.11
+* Add error messaging when `extensionManager` or `serviceManager` are accessed before they
+are initialized.
+* Improve dartdoc for `DevToolsExtension`, `extensionManager`, and `serviceManager`.
+* Migrate from `dart:html` to `package:web`.
+* Add `utils.dart` library with helper for message event parsing.
+
+## 0.0.10
+* Bump minimum Dart SDK version to `3.3.0-91.0.dev` and minimum Flutter SDK version to `3.17.0-0.0.pre`.
+* Add a test target to the `app_that_uses_foo` example that can also be debugged
+with the DevTools extension provided by `package:foo`.
+* Add an example of performing expression evaluations from a DevTools extension.
+* Add an example of registering a service extension and calling it from a DevTools extension.
+* Document the DevTools extension examples.
+* Add documentation to [ExtensionManager] public APIs.
+* Fix some bugs with the `build_and_copy` command for Windows.
+* Add an example `launch.json` file in the `example/foo` directory.
+* Clean up the package readme to make instructions Windows-compatible.
+* Update the README with instructions for joining the Flutter Discord server.
+* Bump `package:devtools_shared` dependency to ^6.0.1
+* Bump `package:devtools_app_shared` dependency to ^0.0.7
+* Bump `package:vm_service` dependency to ^13.0.0.
+
+## 0.0.9
+* Add a link to the new #devtools-extension-authors Discord channel in the README.md.
+* Fix typos that incorrectly used snake case instead of camel case for `config.yaml` examples.
+* Add a VS Code launch config for the `app_that_uses_foo` example app.
+
 ## 0.0.8
 * Fix the `build_and_copy` command so that it succeeds when there is not
 an existing `extension/devtools/build` directory.
diff --git a/packages/devtools_extensions/lib/src/template/_simulated_devtools_environment/_simulated_devtools_controller.dart b/packages/devtools_extensions/lib/src/template/_simulated_devtools_environment/_simulated_devtools_controller.dart
index 47d940f..1203c4c 100644
--- a/packages/devtools_extensions/lib/src/template/_simulated_devtools_environment/_simulated_devtools_controller.dart
+++ b/packages/devtools_extensions/lib/src/template/_simulated_devtools_environment/_simulated_devtools_controller.dart
@@ -66,13 +66,9 @@
     // persists on hot restart.
 
     // TODO(kenz): add some validation and error handling if [uri] is bad input.
-    final normalizedUri =
-        uri != null ? normalizeVmServiceUri(uri).toString() : null;
     final event = DevToolsExtensionEvent(
       DevToolsExtensionEventType.vmServiceConnection,
-      data: {
-        ExtensionEventParameters.vmServiceConnectionUri: normalizedUri,
-      },
+      data: {ExtensionEventParameters.vmServiceConnectionUri: uri},
     );
     _postMessageToExtension(event);
   }
diff --git a/packages/devtools_extensions/lib/src/template/_simulated_devtools_environment/_simulated_devtools_environment.dart b/packages/devtools_extensions/lib/src/template/_simulated_devtools_environment/_simulated_devtools_environment.dart
index d2f5a4c..1d0479a 100644
--- a/packages/devtools_extensions/lib/src/template/_simulated_devtools_environment/_simulated_devtools_environment.dart
+++ b/packages/devtools_extensions/lib/src/template/_simulated_devtools_environment/_simulated_devtools_environment.dart
@@ -9,7 +9,6 @@
 import 'package:devtools_app_shared/service.dart';
 import 'package:devtools_app_shared/ui.dart';
 import 'package:devtools_app_shared/utils.dart';
-import 'package:devtools_shared/devtools_shared.dart';
 import 'package:flutter/material.dart';
 
 import '../../api/api.dart';
diff --git a/packages/devtools_extensions/lib/src/template/devtools_extension.dart b/packages/devtools_extensions/lib/src/template/devtools_extension.dart
index e4bcea0..e0dbd50 100644
--- a/packages/devtools_extensions/lib/src/template/devtools_extension.dart
+++ b/packages/devtools_extensions/lib/src/template/devtools_extension.dart
@@ -9,6 +9,7 @@
 import 'package:devtools_app_shared/service.dart';
 import 'package:devtools_app_shared/ui.dart';
 import 'package:devtools_app_shared/utils.dart';
+import 'package:devtools_shared/devtools_shared.dart';
 import 'package:devtools_shared/service.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
diff --git a/packages/devtools_extensions/lib/src/template/extension_manager.dart b/packages/devtools_extensions/lib/src/template/extension_manager.dart
index f4e22d9..df42dce 100644
--- a/packages/devtools_extensions/lib/src/template/extension_manager.dart
+++ b/packages/devtools_extensions/lib/src/template/extension_manager.dart
@@ -165,8 +165,13 @@
 
     try {
       final finishedCompleter = Completer<void>();
+      final normalizedUri = normalizeVmServiceUri(vmServiceUri);
+      if (normalizedUri == null) {
+        throw Exception('unable to normalize uri because it is not absolute');
+      }
+
       final vmService = await connect<VmService>(
-        uri: Uri.parse(vmServiceUri),
+        uri: normalizedUri,
         finishedCompleter: finishedCompleter,
         createService: ({
           // ignore: avoid-dynamic, code needs to match API from VmService.
diff --git a/packages/devtools_extensions/pubspec.yaml b/packages/devtools_extensions/pubspec.yaml
index 095d0ec..c60cc48 100644
--- a/packages/devtools_extensions/pubspec.yaml
+++ b/packages/devtools_extensions/pubspec.yaml
@@ -1,6 +1,6 @@
 name: devtools_extensions
 description: A package for building and supporting extensions for Dart DevTools.
-version: 0.0.8
+version: 0.0.12
 
 repository: https://github.com/flutter/devtools/tree/master/packages/devtools_extensions