Use default service extension states in UI even when they are not available (#9813)
diff --git a/packages/devtools_app/lib/src/service/service_extension_widgets.dart b/packages/devtools_app/lib/src/service/service_extension_widgets.dart
index 2c63148..7fdd4b4 100644
--- a/packages/devtools_app/lib/src/service/service_extension_widgets.dart
+++ b/packages/devtools_app/lib/src/service/service_extension_widgets.dart
@@ -538,12 +538,9 @@
   void _onMainIsolateChanged() => _initExtensionState();
 
   void _initExtensionState() {
-    if (serviceConnection.serviceManager.serviceExtensionManager
-        .isServiceExtensionAvailable(widget.serviceExtension.extension)) {
-      final state = serviceConnection.serviceManager.serviceExtensionManager
-          .getServiceExtensionState(widget.serviceExtension.extension);
-      _setValueFromState(state.value);
-    }
+    final state = serviceConnection.serviceManager.serviceExtensionManager
+        .getServiceExtensionState(widget.serviceExtension.extension);
+    _setValueFromState(state.value);
 
     unawaited(
       serviceConnection.serviceManager.serviceExtensionManager
diff --git a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
index 639875d..787e89c 100644
--- a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
+++ b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
@@ -24,7 +24,8 @@
 
 ## Performance updates
 
-TODO: Remove this section if there are not any updates.
+- Fixed an issue where 'More Debug Options' showed options as unselected in
+profile mode even when selected. [#9813](https://github.com/flutter/devtools/issues/9813)
 
 ## CPU profiler updates
 
diff --git a/packages/devtools_app/test/service/service_extension_widgets_test.dart b/packages/devtools_app/test/service/service_extension_widgets_test.dart
index e100a75..109ca9a 100644
--- a/packages/devtools_app/test/service/service_extension_widgets_test.dart
+++ b/packages/devtools_app/test/service/service_extension_widgets_test.dart
@@ -222,6 +222,62 @@
       expect(toggle.value, false, reason: 'The extension is disabled.');
     });
   });
+
+  group('ServiceExtensionCheckbox', () {
+    testWidgets('shows value state even when unavailable', (
+      WidgetTester tester,
+    ) async {
+      final ext = extensions.disableClipLayers;
+      final customFake = _UnavailableServiceExtensionManager();
+      customFake.makeUnavailable(ext.extension);
+
+      // Override the serviceExtensionManager on mockServiceManager
+      when(mockServiceManager.serviceExtensionManager).thenReturn(customFake);
+
+      // Set state to enabled: false (which means clips not disabled -> checked true)
+      await customFake.setServiceExtensionState(
+        ext.extension,
+        enabled: false,
+        value: false,
+      );
+
+      final checkbox = ServiceExtensionCheckbox(serviceExtension: ext);
+      await tester.pumpWidget(wrap(Scaffold(body: Center(child: checkbox))));
+      await tester.pumpAndSettle();
+
+      final checkboxFinder = find.byType(Checkbox);
+      expect(checkboxFinder, findsOneWidget);
+
+      final checkboxWidget = tester.widget<Checkbox>(checkboxFinder);
+      expect(checkboxWidget.value, isTrue);
+      expect(checkboxWidget.onChanged, isNull);
+    });
+  });
+}
+
+base class _UnavailableServiceExtensionManager
+    extends FakeServiceExtensionManager {
+  final _unavailableExtensions = <String>{};
+
+  void makeUnavailable(String name) {
+    _unavailableExtensions.add(name);
+  }
+
+  @override
+  Future<bool> waitForServiceExtensionAvailable(String name) {
+    if (_unavailableExtensions.contains(name)) {
+      return Future.value(false);
+    }
+    return super.waitForServiceExtensionAvailable(name);
+  }
+
+  @override
+  bool isServiceExtensionAvailable(String name) {
+    if (_unavailableExtensions.contains(name)) {
+      return false;
+    }
+    return super.isServiceExtensionAvailable(name);
+  }
 }
 
 void registerServiceExtension(