diff --git a/dwds/lib/dart_web_debug_service.dart b/dwds/lib/dart_web_debug_service.dart index 7d8bd7ea0..b68e07416 100644 --- a/dwds/lib/dart_web_debug_service.dart +++ b/dwds/lib/dart_web_debug_service.dart @@ -16,6 +16,7 @@ import 'package:dwds/src/readers/asset_reader.dart'; import 'package:dwds/src/servers/devtools.dart'; import 'package:dwds/src/servers/extension_backend.dart'; import 'package:dwds/src/services/expression_compiler.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:logging/logging.dart'; import 'package:shelf/shelf.dart'; import 'package:sse/server/sse_handler.dart'; @@ -87,6 +88,7 @@ class Dwds { Future Function()? isFlutterApp, }) async { globalLoadStrategy = loadStrategy; + globalIsInternalBuild = isInternalBuild; isFlutterApp ??= () => Future.value(true); DevTools? devTools; diff --git a/dwds/lib/src/debugging/classes.dart b/dwds/lib/src/debugging/classes.dart index 8154b7ee5..1cd7da567 100644 --- a/dwds/lib/src/debugging/classes.dart +++ b/dwds/lib/src/debugging/classes.dart @@ -3,9 +3,9 @@ // BSD-style license that can be found in the LICENSE file. import 'package:dwds/src/debugging/metadata/class.dart'; -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/services/chrome_debug_exception.dart'; import 'package:dwds/src/utilities/domain.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:dwds/src/utilities/shared.dart'; import 'package:vm_service/vm_service.dart'; import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; diff --git a/dwds/lib/src/debugging/debugger.dart b/dwds/lib/src/debugging/debugger.dart index e506205ba..c537b1140 100644 --- a/dwds/lib/src/debugging/debugger.dart +++ b/dwds/lib/src/debugging/debugger.dart @@ -13,6 +13,7 @@ import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/services/chrome_debug_exception.dart'; import 'package:dwds/src/utilities/dart_uri.dart'; import 'package:dwds/src/utilities/domain.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:dwds/src/utilities/objects.dart' show Property; import 'package:dwds/src/utilities/server.dart'; import 'package:dwds/src/utilities/shared.dart'; diff --git a/dwds/lib/src/debugging/inspector.dart b/dwds/lib/src/debugging/inspector.dart index 2e2d56147..c0ad63129 100644 --- a/dwds/lib/src/debugging/inspector.dart +++ b/dwds/lib/src/debugging/inspector.dart @@ -14,11 +14,11 @@ import 'package:dwds/src/debugging/instance.dart'; import 'package:dwds/src/debugging/libraries.dart'; import 'package:dwds/src/debugging/location.dart'; import 'package:dwds/src/debugging/remote_debugger.dart'; -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/readers/asset_reader.dart'; import 'package:dwds/src/utilities/conversions.dart'; import 'package:dwds/src/utilities/dart_uri.dart'; import 'package:dwds/src/utilities/domain.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:dwds/src/utilities/objects.dart'; import 'package:dwds/src/utilities/server.dart'; import 'package:dwds/src/utilities/shared.dart'; diff --git a/dwds/lib/src/debugging/instance.dart b/dwds/lib/src/debugging/instance.dart index e3c310cb6..51eb47318 100644 --- a/dwds/lib/src/debugging/instance.dart +++ b/dwds/lib/src/debugging/instance.dart @@ -7,9 +7,9 @@ import 'dart:math'; import 'package:dwds/src/debugging/inspector.dart'; import 'package:dwds/src/debugging/metadata/class.dart'; import 'package:dwds/src/debugging/metadata/function.dart'; -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/utilities/conversions.dart'; import 'package:dwds/src/utilities/domain.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:dwds/src/utilities/objects.dart'; import 'package:dwds/src/utilities/shared.dart'; import 'package:logging/logging.dart'; diff --git a/dwds/lib/src/debugging/libraries.dart b/dwds/lib/src/debugging/libraries.dart index 5f3570a95..5a1158109 100644 --- a/dwds/lib/src/debugging/libraries.dart +++ b/dwds/lib/src/debugging/libraries.dart @@ -4,9 +4,9 @@ import 'package:collection/collection.dart'; import 'package:dwds/src/debugging/metadata/class.dart'; -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/services/chrome_debug_exception.dart'; import 'package:dwds/src/utilities/domain.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:logging/logging.dart'; import 'package:vm_service/vm_service.dart'; import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; diff --git a/dwds/lib/src/debugging/location.dart b/dwds/lib/src/debugging/location.dart index 0eb3b0457..e00996561 100644 --- a/dwds/lib/src/debugging/location.dart +++ b/dwds/lib/src/debugging/location.dart @@ -4,9 +4,9 @@ import 'package:async/async.dart'; import 'package:dwds/src/debugging/modules.dart'; -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/readers/asset_reader.dart'; import 'package:dwds/src/utilities/dart_uri.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:logging/logging.dart'; import 'package:path/path.dart' as p; import 'package:source_maps/parser.dart'; diff --git a/dwds/lib/src/debugging/metadata/class.dart b/dwds/lib/src/debugging/metadata/class.dart index ed92e0648..8c600c6a0 100644 --- a/dwds/lib/src/debugging/metadata/class.dart +++ b/dwds/lib/src/debugging/metadata/class.dart @@ -2,9 +2,9 @@ // 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. -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/services/chrome_debug_exception.dart'; import 'package:dwds/src/utilities/domain.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:logging/logging.dart'; import 'package:vm_service/vm_service.dart'; import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; diff --git a/dwds/lib/src/debugging/metadata/function.dart b/dwds/lib/src/debugging/metadata/function.dart index b0fb7b6b7..297c0e7af 100644 --- a/dwds/lib/src/debugging/metadata/function.dart +++ b/dwds/lib/src/debugging/metadata/function.dart @@ -3,7 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'package:dwds/src/debugging/remote_debugger.dart'; -import 'package:dwds/src/loaders/strategy.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:dwds/src/utilities/server.dart'; import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; diff --git a/dwds/lib/src/debugging/modules.dart b/dwds/lib/src/debugging/modules.dart index 3b1635eb1..03835c583 100644 --- a/dwds/lib/src/debugging/modules.dart +++ b/dwds/lib/src/debugging/modules.dart @@ -3,8 +3,8 @@ // BSD-style license that can be found in the LICENSE file. import 'package:async/async.dart'; -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/utilities/dart_uri.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:logging/logging.dart'; /// Tracks modules for the compiled application. diff --git a/dwds/lib/src/loaders/legacy.dart b/dwds/lib/src/loaders/legacy.dart index 2271e619a..1f5736896 100644 --- a/dwds/lib/src/loaders/legacy.dart +++ b/dwds/lib/src/loaders/legacy.dart @@ -76,6 +76,11 @@ class LegacyStrategy extends LoadStrategy { /// final String? Function(String entrypoint) _packageConfigLocator; + /// Returns the relative path in google3, determined by the [absolutePath]. + /// + /// Returns `null` if not a google3 app. + final String? Function(String absolutePath) _g3RelativePath; + final Uri? _appEntrypoint; LegacyStrategy( @@ -88,6 +93,7 @@ class LegacyStrategy extends LoadStrategy { AssetReader assetReader, this._appEntrypoint, this._packageConfigLocator, + this._g3RelativePath, ) : super(assetReader); @override @@ -137,4 +143,7 @@ class LegacyStrategy extends LoadStrategy { @override String? packageConfigLocator(String entrypoint) => _packageConfigLocator(entrypoint); + + @override + String? g3RelativePath(String absolutePath) => _g3RelativePath(absolutePath); } diff --git a/dwds/lib/src/loaders/require.dart b/dwds/lib/src/loaders/require.dart index 34105c3bc..aa347db72 100644 --- a/dwds/lib/src/loaders/require.dart +++ b/dwds/lib/src/loaders/require.dart @@ -286,4 +286,7 @@ if(!window.\$requireLoader) { @override String? packageConfigLocator(String entrypoint) => null; + + @override + String? g3RelativePath(String absolutePath) => null; } diff --git a/dwds/lib/src/loaders/strategy.dart b/dwds/lib/src/loaders/strategy.dart index ccb0f4101..ff5aa6c4e 100644 --- a/dwds/lib/src/loaders/strategy.dart +++ b/dwds/lib/src/loaders/strategy.dart @@ -9,12 +9,6 @@ import 'package:dwds/src/utilities/dart_uri.dart'; import 'package:path/path.dart' as p; import 'package:shelf/shelf.dart'; -late LoadStrategy _globalLoadStrategy; - -set globalLoadStrategy(LoadStrategy strategy) => _globalLoadStrategy = strategy; - -LoadStrategy get globalLoadStrategy => _globalLoadStrategy; - abstract class LoadStrategy { final AssetReader _assetReader; final _providers = {}; @@ -116,6 +110,11 @@ abstract class LoadStrategy { /// String? packageConfigLocator(String entrypoint); + /// Returns the relative path in google3, determined by the [absolutePath]. + /// + /// Returns `null` if not a google3 app. + String? g3RelativePath(String absolutePath); + /// The absolute path to the app's package config, or null if not provided by /// [packageConfigLocator]. String get packageConfigPath { diff --git a/dwds/lib/src/services/chrome_proxy_service.dart b/dwds/lib/src/services/chrome_proxy_service.dart index 968d15d85..df36fbfd0 100644 --- a/dwds/lib/src/services/chrome_proxy_service.dart +++ b/dwds/lib/src/services/chrome_proxy_service.dart @@ -18,12 +18,12 @@ import 'package:dwds/src/debugging/modules.dart'; import 'package:dwds/src/debugging/remote_debugger.dart'; import 'package:dwds/src/debugging/skip_list.dart'; import 'package:dwds/src/events.dart'; -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/readers/asset_reader.dart'; import 'package:dwds/src/services/batched_expression_evaluator.dart'; import 'package:dwds/src/services/expression_compiler.dart'; import 'package:dwds/src/services/expression_evaluator.dart'; import 'package:dwds/src/utilities/dart_uri.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:dwds/src/utilities/shared.dart'; import 'package:logging/logging.dart' hide LogRecord; import 'package:pub_semver/pub_semver.dart' as semver; diff --git a/dwds/lib/src/services/expression_evaluator.dart b/dwds/lib/src/services/expression_evaluator.dart index d8c9cc86a..9d76617d2 100644 --- a/dwds/lib/src/services/expression_evaluator.dart +++ b/dwds/lib/src/services/expression_evaluator.dart @@ -6,11 +6,11 @@ import 'package:dwds/src/debugging/dart_scope.dart'; import 'package:dwds/src/debugging/debugger.dart'; import 'package:dwds/src/debugging/location.dart'; import 'package:dwds/src/debugging/modules.dart'; -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/services/expression_compiler.dart'; import 'package:dwds/src/services/javascript_builder.dart'; import 'package:dwds/src/utilities/conversions.dart'; import 'package:dwds/src/utilities/domain.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:dwds/src/utilities/objects.dart' as chrome; import 'package:logging/logging.dart'; import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; diff --git a/dwds/lib/src/utilities/dart_uri.dart b/dwds/lib/src/utilities/dart_uri.dart index a1ad96464..b250bb1a9 100644 --- a/dwds/lib/src/utilities/dart_uri.dart +++ b/dwds/lib/src/utilities/dart_uri.dart @@ -2,7 +2,9 @@ // 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. +import 'package:dwds/data/extension_request.dart'; import 'package:dwds/src/loaders/strategy.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:logging/logging.dart'; import 'package:package_config/package_config.dart'; import 'package:path/path.dart' as p; @@ -134,11 +136,27 @@ class DartUri { static final Map _resolvedUriToUri = {}; /// Returns package, app, or dart uri for a resolved path. - static String? toPackageUri(String uri) => _resolvedUriToUri[uri]; + static String? toPackageUri(String uri) { + final packageUri = _resolvedUriToUri[uri]; + if (packageUri != null) return packageUri; + + // If this is an internal app, then the given uri might be g3-relative: + if (globalIsInternalBuild) { + final resolvedUri = _g3RelativeUriToResolvedUri[uri]; + return _resolvedUriToUri[resolvedUri]; + } + + return null; + } /// Returns resolved path for a package, app, or dart uri. static String? toResolvedUri(String uri) => _uriToResolvedUri[uri]; + /// Returns a resolved path for a g3-relative URI. + /// + /// This map is empty if not a google3 app. + static final Map _g3RelativeUriToResolvedUri = {}; + /// The directory in which we're running. /// /// We store this here because for tests we may want to act as if we're @@ -165,7 +183,22 @@ class DartUri { /// Record all of the libraries, indexed by their absolute file: URI. static void recordAbsoluteUris(Iterable libraryUris) { for (var uri in libraryUris) { + print('recording $uri'); _recordAbsoluteUri(uri); + if (globalIsInternalBuild) { + _recordG3RelativeUri(uri); + } + } + } + + static void _recordG3RelativeUri(String libraryUri) { + final absoluteUri = _uriToResolvedUri[libraryUri]; + if (absoluteUri == null) return; + + final g3RelativeUri = globalLoadStrategy.g3RelativePath(absoluteUri); + print('now recording $g3RelativeUri'); + if (g3RelativeUri != null) { + _g3RelativeUriToResolvedUri[g3RelativeUri] = absoluteUri; } } diff --git a/dwds/lib/src/utilities/globals.dart b/dwds/lib/src/utilities/globals.dart new file mode 100644 index 000000000..d8881dfd2 --- /dev/null +++ b/dwds/lib/src/utilities/globals.dart @@ -0,0 +1,16 @@ +// Copyright (c) 2023, 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. + +import 'package:dwds/src/loaders/strategy.dart'; + +/// The load strategy for the connected app. +late LoadStrategy _globalLoadStrategy; +set globalLoadStrategy(LoadStrategy strategy) => _globalLoadStrategy = strategy; +LoadStrategy get globalLoadStrategy => _globalLoadStrategy; + +/// Whether or not the connected app is an internal (e.g. google3) app. +bool get globalIsInternalBuild => _isInternalBuild ?? false; +bool? _isInternalBuild; +set globalIsInternalBuild(bool isInternalBuild) => + _isInternalBuild = isInternalBuild; diff --git a/dwds/test/chrome_proxy_service_test.dart b/dwds/test/chrome_proxy_service_test.dart index ae4ae41c6..7db11ad2e 100644 --- a/dwds/test/chrome_proxy_service_test.dart +++ b/dwds/test/chrome_proxy_service_test.dart @@ -9,9 +9,9 @@ import 'dart:async'; import 'dart:convert'; import 'dart:io'; -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/services/chrome_proxy_service.dart'; import 'package:dwds/src/utilities/dart_uri.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:dwds/src/utilities/shared.dart'; import 'package:http/http.dart' as http; import 'package:path/path.dart' as path; diff --git a/dwds/test/dart_uri_test.dart b/dwds/test/dart_uri_test.dart index 4952d33d0..5f4bdbae2 100644 --- a/dwds/test/dart_uri_test.dart +++ b/dwds/test/dart_uri_test.dart @@ -6,8 +6,8 @@ @Timeout(Duration(minutes: 2)) import 'package:dwds/asset_reader.dart'; -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/utilities/dart_uri.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:test/test.dart'; import 'package:test_common/logging.dart'; diff --git a/dwds/test/debugger_test.dart b/dwds/test/debugger_test.dart index 78b551f0e..0ea066475 100644 --- a/dwds/test/debugger_test.dart +++ b/dwds/test/debugger_test.dart @@ -12,7 +12,7 @@ import 'package:dwds/src/debugging/frame_computer.dart'; import 'package:dwds/src/debugging/inspector.dart'; import 'package:dwds/src/debugging/location.dart'; import 'package:dwds/src/debugging/skip_list.dart'; -import 'package:dwds/src/loaders/strategy.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:logging/logging.dart'; import 'package:test/test.dart'; import 'package:vm_service/vm_service.dart' hide LogRecord; diff --git a/dwds/test/expression_evaluator_test.dart b/dwds/test/expression_evaluator_test.dart index 86fda49f1..498fe90d3 100644 --- a/dwds/test/expression_evaluator_test.dart +++ b/dwds/test/expression_evaluator_test.dart @@ -9,9 +9,9 @@ import 'dart:async'; import 'package:dwds/src/debugging/debugger.dart'; import 'package:dwds/src/debugging/location.dart'; import 'package:dwds/src/debugging/skip_list.dart'; -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/services/batched_expression_evaluator.dart'; import 'package:dwds/src/services/expression_evaluator.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:test/test.dart'; import 'package:vm_service/vm_service.dart' hide LogRecord; diff --git a/dwds/test/fixtures/fakes.dart b/dwds/test/fixtures/fakes.dart index 09c7c3cc5..1b2f9b577 100644 --- a/dwds/test/fixtures/fakes.dart +++ b/dwds/test/fixtures/fakes.dart @@ -16,6 +16,7 @@ import 'package:dwds/src/debugging/webkit_debugger.dart'; import 'package:dwds/src/handlers/socket_connections.dart'; import 'package:dwds/src/loaders/require.dart'; import 'package:dwds/src/loaders/strategy.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:dwds/src/utilities/objects.dart'; import 'package:shelf/shelf.dart' as shelf; import 'package:vm_service/vm_service.dart'; @@ -343,6 +344,9 @@ class FakeStrategy extends LoadStrategy { @override String? packageConfigLocator(String entrypoint) => null; + @override + String? g3RelativePath(String absolutePath) => null; + @override ReloadConfiguration get reloadConfiguration => ReloadConfiguration.none; diff --git a/dwds/test/inspector_test.dart b/dwds/test/inspector_test.dart index 6e66a547c..553e66431 100644 --- a/dwds/test/inspector_test.dart +++ b/dwds/test/inspector_test.dart @@ -7,8 +7,8 @@ import 'package:dwds/dwds.dart'; import 'package:dwds/src/debugging/inspector.dart'; -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/utilities/conversions.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:test/test.dart'; import 'package:test_common/test_sdk_configuration.dart'; import 'package:vm_service/vm_service.dart'; diff --git a/dwds/test/instances/common/instance_common.dart b/dwds/test/instances/common/instance_common.dart index ebd2395fc..01ef9c6df 100644 --- a/dwds/test/instances/common/instance_common.dart +++ b/dwds/test/instances/common/instance_common.dart @@ -3,7 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'package:dwds/src/debugging/inspector.dart'; -import 'package:dwds/src/loaders/strategy.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:test/test.dart'; import 'package:test_common/logging.dart'; import 'package:test_common/test_sdk_configuration.dart'; diff --git a/dwds/test/location_test.dart b/dwds/test/location_test.dart index 23248910a..ae74ca008 100644 --- a/dwds/test/location_test.dart +++ b/dwds/test/location_test.dart @@ -8,6 +8,7 @@ import 'package:dwds/asset_reader.dart'; import 'package:dwds/src/debugging/location.dart'; import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/utilities/dart_uri.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:test/test.dart'; import 'fixtures/fakes.dart'; diff --git a/dwds/test/metadata_test.dart b/dwds/test/metadata_test.dart index c5ae1bb0a..ac6c013dc 100644 --- a/dwds/test/metadata_test.dart +++ b/dwds/test/metadata_test.dart @@ -6,7 +6,7 @@ import 'package:dwds/src/debugging/metadata/module_metadata.dart'; import 'package:dwds/src/debugging/metadata/provider.dart'; -import 'package:dwds/src/loaders/strategy.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:test/test.dart'; import 'fixtures/fakes.dart'; diff --git a/dwds/test/skip_list_test.dart b/dwds/test/skip_list_test.dart index e675795f5..c3a50304d 100644 --- a/dwds/test/skip_list_test.dart +++ b/dwds/test/skip_list_test.dart @@ -7,8 +7,8 @@ import 'package:dwds/asset_reader.dart'; import 'package:dwds/src/debugging/location.dart'; import 'package:dwds/src/debugging/skip_list.dart'; -import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/utilities/dart_uri.dart'; +import 'package:dwds/src/utilities/globals.dart'; import 'package:source_maps/parser.dart'; import 'package:test/test.dart';