diff --git a/dwds/debug_extension_mv3/tool/update_dev_files.dart b/dwds/debug_extension_mv3/tool/update_dev_files.dart index 99d7db809..7cc2f4838 100644 --- a/dwds/debug_extension_mv3/tool/update_dev_files.dart +++ b/dwds/debug_extension_mv3/tool/update_dev_files.dart @@ -9,7 +9,7 @@ void main() async { await _updateManifestJson(); } -/// Adds the Googler extension key. +/// Adds the Googler extension key, and prefixes the extension name with "DEV". Future _updateManifestJson() async { final manifestJson = File('compiled/manifest.json'); final extensionKeyTxt = File('extension_key.txt'); @@ -19,7 +19,11 @@ Future _updateManifestJson() async { return _transformDevFile(manifestJson, (line) { if (_matchesKey(line: line, key: 'name')) { return [ - line, + _newKeyValue( + oldLine: line, + newKey: 'name', + newValue: '[DEV] MV3 Dart Debug Extension', + ), if (extensionKey != null) _newKeyValue( oldLine: line, diff --git a/dwds/debug_extension_mv3/web/background.dart b/dwds/debug_extension_mv3/web/background.dart index f1b853444..224101e23 100644 --- a/dwds/debug_extension_mv3/web/background.dart +++ b/dwds/debug_extension_mv3/web/background.dart @@ -18,6 +18,7 @@ import 'lifeline_ports.dart'; import 'logger.dart'; import 'messaging.dart'; import 'storage.dart'; +import 'utils.dart'; import 'web_api.dart'; const _authSuccessResponse = 'Dart Debug Authentication Success!'; @@ -69,7 +70,8 @@ Future _authenticateUser(String extensionUrl, int tabId) async { final response = await fetchRequest(authUrl); final responseBody = response.body ?? ''; if (!responseBody.contains(_authSuccessResponse)) { - debugWarn('Not authenticated: ${response.status} / $responseBody'); + debugError('Not authenticated: ${response.status} / $responseBody', + verbose: true); _showWarningNotification('Please re-authenticate and try again.'); await _createTab(authUrl, inNewWindow: false); return false; @@ -128,7 +130,8 @@ void _setDebuggableIcon() { } void _setDefaultIcon() { - chrome.action.setIcon(IconInfo(path: 'dart_grey.png'), /*callback*/ null); + final iconPath = isDevMode() ? 'dart_dev.png' : 'dart_grey.png'; + chrome.action.setIcon(IconInfo(path: iconPath), /*callback*/ null); } Future _fetchDebugInfo(int tabId) { diff --git a/dwds/debug_extension_mv3/web/chrome_api.dart b/dwds/debug_extension_mv3/web/chrome_api.dart index 14d4c368f..ec2fb3632 100644 --- a/dwds/debug_extension_mv3/web/chrome_api.dart +++ b/dwds/debug_extension_mv3/web/chrome_api.dart @@ -75,6 +75,8 @@ class Runtime { external void sendMessage( String? id, Object? message, Object? options, Function? callback); + external Object getManifest(); + external ConnectionHandler get onConnect; external OnMessageHandler get onMessage; diff --git a/dwds/debug_extension_mv3/web/detector.dart b/dwds/debug_extension_mv3/web/detector.dart index 35bf64bc6..fdd3fcb35 100644 --- a/dwds/debug_extension_mv3/web/detector.dart +++ b/dwds/debug_extension_mv3/web/detector.dart @@ -24,7 +24,7 @@ void _registerListeners() { void _onDartAppReadyEvent(Event event) { final debugInfo = getProperty(event, 'detail') as String?; if (debugInfo == null) { - debugWarn('Can\'t debug Dart app without debug info.'); + debugError('Can\'t debug Dart app without debug info.', verbose: true); return; } _sendMessageToBackgroundScript( diff --git a/dwds/debug_extension_mv3/web/logger.dart b/dwds/debug_extension_mv3/web/logger.dart index a2dddb65d..d0599eca8 100644 --- a/dwds/debug_extension_mv3/web/logger.dart +++ b/dwds/debug_extension_mv3/web/logger.dart @@ -7,10 +7,7 @@ library logger; import 'package:js/js.dart'; -import 'web_api.dart'; - -// Switch to true for debug logging. -bool _enableDebugLogging = true; +import 'utils.dart'; enum _LogLevel { info, @@ -18,30 +15,63 @@ enum _LogLevel { error, } -debugLog(String msg, {String? prefix}) { - _log(msg, prefix: prefix); +debugLog( + String msg, { + String? prefix, + bool verbose = false, +}) { + _log(msg, prefix: prefix, verbose: verbose); } -debugWarn(String msg, {String? prefix}) { - _log(msg, prefix: prefix, level: _LogLevel.warn); +debugWarn( + String msg, { + String? prefix, + bool verbose = false, +}) { + _log(msg, prefix: prefix, level: _LogLevel.warn, verbose: verbose); } -debugError(String msg, {String? prefix}) { - _log(msg, prefix: prefix, level: _LogLevel.error); +debugError( + String msg, { + String? prefix, + bool verbose = false, +}) { + _log(msg, prefix: prefix, level: _LogLevel.error, verbose: verbose); } -void _log(String msg, {_LogLevel? level, String? prefix}) { - if (!_enableDebugLogging) return; +void _log( + String msg, { + bool verbose = false, + _LogLevel? level, + String? prefix, +}) { + if (!verbose && !isDevMode()) return; final logMsg = prefix != null ? '[$prefix] $msg' : msg; final logLevel = level ?? _LogLevel.info; switch (logLevel) { case _LogLevel.error: - console.error(logMsg); + _console.error(logMsg); break; case _LogLevel.warn: - console.warn(logMsg); + _console.warn(logMsg); break; case _LogLevel.info: - console.log(logMsg); + _console.log(logMsg); } } + +@JS('console') +external _Console get _console; + +@JS() +@anonymous +class _Console { + external void log(String header, + [String style1, String style2, String style3]); + + external void warn(String header, + [String style1, String style2, String style3]); + + external void error(String header, + [String style1, String style2, String style3]); +} diff --git a/dwds/debug_extension_mv3/web/manifest.json b/dwds/debug_extension_mv3/web/manifest.json index 777d059ee..fa1beeef4 100644 --- a/dwds/debug_extension_mv3/web/manifest.json +++ b/dwds/debug_extension_mv3/web/manifest.json @@ -1,5 +1,5 @@ { - "name": "[MV3] Dart Debug Extension", + "name": "MV3 Dart Debug Extension", "version": "1.0", "manifest_version": 3, "action": { diff --git a/dwds/debug_extension_mv3/web/utils.dart b/dwds/debug_extension_mv3/web/utils.dart new file mode 100644 index 000000000..44ab3803c --- /dev/null +++ b/dwds/debug_extension_mv3/web/utils.dart @@ -0,0 +1,23 @@ +// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@JS() +library utils; + +import 'dart:js_util'; + +import 'package:js/js.dart'; + +import 'chrome_api.dart'; + +bool? _isDevMode; + +bool isDevMode() { + if (_isDevMode != null) { + return _isDevMode!; + } + final extensionManifest = chrome.runtime.getManifest(); + final extensionName = getProperty(extensionManifest, 'name') ?? ''; + return extensionName.contains('DEV'); +}