diff --git a/dwds/debug_extension_mv3/web/cider_connection.dart b/dwds/debug_extension_mv3/web/cider_connection.dart index f0e67bb51..5ddd9b063 100644 --- a/dwds/debug_extension_mv3/web/cider_connection.dart +++ b/dwds/debug_extension_mv3/web/cider_connection.dart @@ -13,6 +13,8 @@ import 'package:js/js.dart'; import 'chrome_api.dart'; import 'debug_session.dart'; import 'logger.dart'; +import 'storage.dart'; +import 'utils.dart'; /// Used to identify messages passed to/from Cider. /// @@ -25,6 +27,8 @@ const _ciderDartMessageKey = 'CIDER_DART'; /// Cider extension. enum CiderMessageType { error, + inspectorUrlResponse, + inspectorUrlRequest, startDebugResponse, startDebugRequest, stopDebugResponse, @@ -113,6 +117,8 @@ Future _handleMessageFromCider(dynamic message, Port _) async { await _startDebugging(appId: messageBody); } else if (messageType == CiderMessageType.stopDebugRequest.name) { await _stopDebugging(appId: messageBody); + } else if (messageType == CiderMessageType.inspectorUrlRequest.name) { + await _sendInspectorUrl(appId: messageBody); } } @@ -150,6 +156,45 @@ Future _stopDebugging({String? appId}) async { } } +Future _sendInspectorUrl({String? appId}) async { + if (appId == null) { + _sendNoAppIdError(); + return; + } + final tabId = _tabId(appId); + final alreadyDebugging = isActiveDebugSession(tabId); + if (!alreadyDebugging) { + sendErrorMessageToCider( + errorType: CiderErrorType.invalidRequest, + errorDetails: + 'Cannot send the inspector URL before the debugger has been attached.', + ); + return; + } + final devToolsUri = await fetchStorageObject( + type: StorageObject.devToolsUri, + tabId: tabId, + ); + if (devToolsUri == null) { + sendErrorMessageToCider( + errorType: CiderErrorType.internalError, + errorDetails: 'Failed to fetch the DevTools URI for the inspector.', + ); + return; + } + final inspectorUrl = addQueryParameters( + devToolsUri, + queryParameters: { + 'embed': 'true', + 'page': 'inspector', + }, + ); + sendMessageToCider( + messageType: CiderMessageType.inspectorUrlResponse, + messageBody: inspectorUrl, + ); +} + int _tabId(String appId) { final tabId = appId.split('-').last; return int.parse(tabId); diff --git a/dwds/debug_extension_mv3/web/debug_session.dart b/dwds/debug_extension_mv3/web/debug_session.dart index 898a160fb..991f37937 100644 --- a/dwds/debug_extension_mv3/web/debug_session.dart +++ b/dwds/debug_extension_mv3/web/debug_session.dart @@ -406,7 +406,14 @@ void _routeDwdsEvent(String eventData, SocketClient client, int tabId) { tabId: tabId, ); if (message.method == 'dwds.devtoolsUri') { - if (_tabIdToTrigger[tabId] != Trigger.cider) { + if (_tabIdToTrigger[tabId] == Trigger.cider) { + // Save the DevTools URI so that Cider can request it later: + setStorageObject( + type: StorageObject.devToolsUri, + value: message.params, + tabId: tabId, + ); + } else { _openDevTools(message.params, dartAppTabId: tabId); } }