diff --git a/dwds/CHANGELOG.md b/dwds/CHANGELOG.md index 0852bb353..cc59c5d7f 100644 --- a/dwds/CHANGELOG.md +++ b/dwds/CHANGELOG.md @@ -1,3 +1,8 @@ +## 10.0.2-dev + +- Fix missing sdk libraries in `getObject()` calls. +- Fix incorrect `rootLib` returned by `ChromeProxyService`. + ## 10.0.1 - Support `webkit_inspection_protocol` version `^1.0.0`. diff --git a/dwds/lib/src/debugging/classes.dart b/dwds/lib/src/debugging/classes.dart index d455681b8..71557b0a0 100644 --- a/dwds/lib/src/debugging/classes.dart +++ b/dwds/lib/src/debugging/classes.dart @@ -66,8 +66,14 @@ class ClassHelper extends Domain { throw UnsupportedError('unknown library: $libraryId'); } var libraryRef = await inspector.libraryHelper.libraryRefFor(libraryId); + if (libraryRef == null) { + throw Exception('Could not find library: $libraryId'); + } var classRef = classRefFor(libraryId, splitId.last); clazz = await _constructClass(libraryRef, classRef); + if (clazz == null) { + throw Exception('Could not contruct class: $classRef'); + } return _classes[objectId] = clazz; } diff --git a/dwds/lib/src/debugging/inspector.dart b/dwds/lib/src/debugging/inspector.dart index 014472ba1..06656456e 100644 --- a/dwds/lib/src/debugging/inspector.dart +++ b/dwds/lib/src/debugging/inspector.dart @@ -4,6 +4,7 @@ // @dart = 2.9 +import 'package:logging/logging.dart'; import 'package:path/path.dart' as p; import 'package:vm_service/vm_service.dart'; import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; @@ -33,6 +34,8 @@ class AppInspector extends Domain { Future> get scriptRefs => _cachedScriptRefs ??= _getScripts(); + final _logger = Logger('AppInspector'); + /// Map of scriptRef ID to [ScriptRef]. final _scriptRefsById = {}; @@ -80,18 +83,11 @@ class AppInspector extends Domain { Future _initialize() async { var libraries = await libraryHelper.libraryRefs; - isolate.libraries.addAll(libraries); + isolate.rootLib = await libraryHelper.rootLib; + isolate.libraries.addAll(libraries); await DartUri.recordAbsoluteUris(libraries.map((lib) => lib.uri)); - // This relies on the convention that the 2nd to last library is the root - // library (and the last one is the bootstrap library). - if (libraries.length >= 2) { - isolate.rootLib = libraries[libraries.length - 2]; - } else { - isolate.rootLib = libraries.last; - } - isolate.extensionRPCs.addAll(await _getExtensionRpcs()); } @@ -328,15 +324,28 @@ function($argsString) { Future getObject(String isolateId, String objectId, {int offset, int count}) async { - var library = await _getLibrary(isolateId, objectId); - if (library != null) return library; - var clazz = await classHelper.forObjectId(objectId); - if (clazz != null) return clazz; - var scriptRef = _scriptRefsById[objectId]; - if (scriptRef != null) return await _getScript(isolateId, scriptRef); - var instance = await instanceHelper.instanceFor(remoteObjectFor(objectId), - offset: offset, count: count); - if (instance != null) return instance; + try { + var library = await _getLibrary(isolateId, objectId); + if (library != null) { + return library; + } + var clazz = await classHelper.forObjectId(objectId); + if (clazz != null) { + return clazz; + } + var scriptRef = _scriptRefsById[objectId]; + if (scriptRef != null) { + return await _getScript(isolateId, scriptRef); + } + var instance = await instanceHelper.instanceFor(remoteObjectFor(objectId), + offset: offset, count: count); + if (instance != null) { + return instance; + } + } catch (e, s) { + _logger.log(Level.FINE, 'getObject failed with exception: $e:$s'); + rethrow; + } throw UnsupportedError('Only libraries, instances, classes, and scripts ' 'are supported for getObject'); } diff --git a/dwds/lib/src/debugging/libraries.dart b/dwds/lib/src/debugging/libraries.dart index cafdfa9c6..1d46b7c89 100644 --- a/dwds/lib/src/debugging/libraries.dart +++ b/dwds/lib/src/debugging/libraries.dart @@ -20,8 +20,22 @@ class LibraryHelper extends Domain { /// Map of libraryRef ID to [LibraryRef]. final _libraryRefsById = {}; + LibraryRef _rootLib; + LibraryHelper(AppInspector Function() provider) : super(provider); + Future get rootLib async { + if (_rootLib != null) return _rootLib; + // TODO: read entrypoint from app metadata. + // Issue: https://github.com/dart-lang/webdev/issues/1290 + var libraries = await libraryRefs; + _rootLib = libraries.firstWhere((lib) => lib.name.contains('org-dartlang')); + _rootLib = + _rootLib ?? libraries.firstWhere((lib) => lib.name.contains('main')); + _rootLib = _rootLib ?? (libraries.isNotEmpty ? libraries.last : null); + return _rootLib; + } + /// Returns all libraryRefs in the app. /// /// Note this can return a cached result. diff --git a/dwds/lib/src/debugging/metadata/provider.dart b/dwds/lib/src/debugging/metadata/provider.dart index 33cf1cfbf..0f8080d26 100644 --- a/dwds/lib/src/debugging/metadata/provider.dart +++ b/dwds/lib/src/debugging/metadata/provider.dart @@ -27,6 +27,45 @@ class MetadataProvider { final Map> _scripts = {}; final _metadataMemoizer = AsyncMemoizer(); + /// Implicitly imported libraries in any DDC component. + /// + /// Currently dart_sdk module does not come with the metadata. + /// To allow evaluation of expressions that use libraries and + /// types from the SDK (such as a dart Type object), add the + /// metadata for dart_sdk manually. + /// + /// TODO: Generate sdk module metadata to be consumed by debugger. + /// Issue: https://github.com/dart-lang/sdk/issues/45477 + List get sdkLibraries => const [ + 'dart:_runtime', + 'dart:_debugger', + 'dart:_foreign_helper', + 'dart:_interceptors', + 'dart:_internal', + 'dart:_isolate_helper', + 'dart:_js_helper', + 'dart:_js_primitives', + 'dart:_metadata', + 'dart:_native_typed_data', + 'dart:async', + 'dart:collection', + 'dart:convert', + 'dart:developer', + 'dart:io', + 'dart:isolate', + 'dart:js', + 'dart:js_util', + 'dart:math', + 'dart:typed_data', + 'dart:indexed_db', + 'dart:html', + 'dart:html_common', + 'dart:svg', + 'dart:web_audio', + 'dart:web_gl', + 'dart:web_sql' + ]; + MetadataProvider(this.entrypoint, this._assetReader) : _soundNullSafety = false; @@ -150,6 +189,7 @@ class MetadataProvider { entrypoint.replaceAll('.bootstrap.js', '.ddc_merged_metadata'); var merged = await _assetReader.metadataContents(serverPath); if (merged != null) { + _addSdkMetadata(); for (var contents in merged.split('\n')) { try { if (contents == null || @@ -197,6 +237,16 @@ class MetadataProvider { } } } + + void _addSdkMetadata() { + var moduleName = 'dart_sdk'; + + for (var lib in sdkLibraries) { + _libraries.add(lib); + _scripts[lib] = []; + _scriptToModule[lib] = moduleName; + } + } } class AbsoluteImportUriException implements Exception { diff --git a/dwds/lib/src/debugging/modules.dart b/dwds/lib/src/debugging/modules.dart index d5541ab5d..c62ae3962 100644 --- a/dwds/lib/src/debugging/modules.dart +++ b/dwds/lib/src/debugging/modules.dart @@ -75,7 +75,10 @@ class Modules { var scriptToModule = await provider.scriptToModule; for (var script in scriptToModule.keys) { - var serverPath = DartUri(script, _root).serverPath; + var serverPath = script.startsWith('dart:') + ? script + : DartUri(script, _root).serverPath; + _sourceToModule[serverPath] = scriptToModule[script]; _sourceToLibrary[serverPath] = Uri.parse(script); _libraryToModule[script] = scriptToModule[script]; diff --git a/dwds/lib/src/injected/client.js b/dwds/lib/src/injected/client.js index 8c9774c8d..c7415d283 100644 --- a/dwds/lib/src/injected/client.js +++ b/dwds/lib/src/injected/client.js @@ -1,4 +1,4 @@ -// Generated by dart2js (fast startup emitter, strong), the Dart to JavaScript compiler version: 2.13.0-161.0.dev. +// Generated by dart2js (fast startup emitter, strong), the Dart to JavaScript compiler version: 2.13.0-165.0.dev. // The code supports the following hooks: // dartPrint(message): // if this function is defined it is called instead of the Dart [print] @@ -3664,6 +3664,9 @@ getRange$2$ax: function(receiver, a0, a1) { return J.getInterceptor$ax(receiver).getRange$2(receiver, a0, a1); }, + indexOf$1$s: function(receiver, a0) { + return J.getInterceptor$s(receiver).indexOf$1(receiver, a0); + }, keys$0$x: function(receiver) { return J.getInterceptor$x(receiver).keys$0(receiver); }, @@ -6267,7 +6270,7 @@ _s67_ = string$._null_; if (start === end) return ""; - if (!P._Uri__isAlphabeticCharacter(J.getInterceptor$s(scheme)._codeUnitAt$1(scheme, start))) { + if (!P._Uri__isAlphabeticCharacter(J._codeUnitAt$1$s(scheme, start))) { P._Uri__fail(scheme, start, "Scheme not starting with alphabetic character"); H.ReachabilityError$(_s67_); } @@ -7136,6 +7139,9 @@ jsPromise.then(H.convertDartClosureToJS(new P.promiseToFuture_closure(completer, $T), 1), H.convertDartClosureToJS(new P.promiseToFuture_closure0(completer), 1)); return t1; }, + NullRejectionException: function NullRejectionException(t0) { + this.isUndefined = t0; + }, promiseToFuture_closure: function promiseToFuture_closure(t0, t1) { this.completer = t0; this.T = t1; @@ -8269,7 +8275,7 @@ }, _getRawName: function(type) { var $name = J.toString$0$(type), - genericsStart = J.getInterceptor$s($name).indexOf$1($name, "<"); + genericsStart = J.indexOf$1$s($name, "<"); return genericsStart === -1 ? $name : C.JSString_methods.substring$2($name, 0, genericsStart); }, BuiltJsonSerializers: function BuiltJsonSerializers(t0, t1, t2, t3, t4) { @@ -8330,7 +8336,7 @@ }, FullType__getRawName: function(type) { var $name = J.toString$0$(type), - genericsStart = J.getInterceptor$s($name).indexOf$1($name, "<"); + genericsStart = J.indexOf$1$s($name, "<"); return genericsStart === -1 ? $name : C.JSString_methods.substring$2($name, 0, genericsStart); }, DeserializationError_DeserializationError: function(json, type, error) { @@ -17711,6 +17717,11 @@ return this.super$JsObject$$indexSet(0, property, value); } }; + P.NullRejectionException.prototype = { + toString$0: function(_) { + return "Promise was rejected with a value of `" + (this.isUndefined ? "undefined" : "null") + "`."; + } + }; P.promiseToFuture_closure.prototype = { call$1: function(r) { return this.completer.complete$1(0, this.T._eval$1("0/?")._as(r)); @@ -17719,6 +17730,8 @@ }; P.promiseToFuture_closure0.prototype = { call$1: function(e) { + if (e == null) + return this.completer.completeError$1(new P.NullRejectionException(e === undefined)); return this.completer.completeError$1(e); }, $signature: 5 @@ -19362,7 +19375,7 @@ H.throwExpression(P.ArgumentError$("null key")); J.$indexSet$ax(t3.get$_safeMap(), t6, serializer); $name = J.toString$0$(t6); - genericsStart = J.getInterceptor$s($name).indexOf$1($name, "<"); + genericsStart = J.indexOf$1$s($name, "<"); t6 = genericsStart === -1 ? $name : C.JSString_methods.substring$2($name, 0, genericsStart); t7 = t2.$ti; t7._eval$1("1*")._as(t6); @@ -23129,7 +23142,7 @@ _inherit = hunkHelpers.inherit, _inheritMany = hunkHelpers.inheritMany; _inherit(P.Object, null); - _inheritMany(P.Object, [H.JS_CONST, J.Interceptor, J.ArrayIterator, P.Iterable, H.CastIterator, H.Closure, P.MapMixin, P.Error, H.ListIterator, P.Iterator, H.EmptyIterator, H.FixedLengthListMixin, H.UnmodifiableListMixin, P._ListBase_Object_ListMixin, H.Symbol, P.MapView, H.ConstantMap, H.JSInvocationMirror, H.TypeErrorDecoder, H.NullThrownFromJavaScriptException, H.ExceptionAndStackTrace, H._StackTrace, H._Required, H.LinkedHashMapCell, H.LinkedHashMapKeyIterator, H.JSSyntaxRegExp, H._MatchImplementation, H.Rti, H._FunctionParameters, H._Type, P._TimerImpl, P._AsyncAwaitCompleter, P.AsyncError, P._Completer, P._FutureListener, P._Future, P._AsyncCallbackEntry, P.Stream, P.StreamSubscription, P.StreamTransformerBase, P._StreamController, P._SyncStreamControllerDispatch, P._AsyncStreamControllerDispatch, P._BufferingStreamSubscription, P._StreamSinkWrapper, P._DelayedEvent, P._DelayedDone, P._PendingEvents, P._StreamIterator, P._ZoneFunction, P._RunNullaryZoneFunction, P._RunUnaryZoneFunction, P._RunBinaryZoneFunction, P._RegisterNullaryZoneFunction, P._RegisterUnaryZoneFunction, P._RegisterBinaryZoneFunction, P._ZoneSpecification, P._ZoneDelegate, P._Zone, P._HashMapKeyIterator, P.__SetBase_Object_SetMixin, P._HashSetIterator, P._LinkedHashSetCell, P._LinkedHashSetIterator, P.IterableMixin, P.ListMixin, P._UnmodifiableMapMixin, P._ListQueueIterator, P.SetMixin, P._SplayTreeNode, P._SplayTree, P._SplayTreeIterator, P.Codec, P._JsonStringifier, P._BigIntImpl, P.DateTime, P.Duration, P.OutOfMemoryError, P.StackOverflowError, P._Exception, P.FormatException, P.IntegerDivisionByZeroException, P.Null, P._StringStackTrace, P.StringBuffer, P._Uri, P.UriData, P._SimpleUri, W.CssStyleDeclarationBase, W.EventStreamProvider, W._Html5NodeValidator, W.ImmutableListMixin, W.NodeValidatorBuilder, W._SimpleNodeValidator, W._SvgNodeValidator, W.FixedSizeListIterator, W._DOMWindowCrossFrame, W._SameOriginUriPolicy, W._ValidatingTreeSanitizer, P._AcceptStructuredClone, P.JsObject, P._JSRandom, P._Random, O.DelegatingStreamSink, S.BuiltList, S.ListBuilder, M.BuiltListMultimap, M.ListMultimapBuilder, A.BuiltMap, A.MapBuilder, L.BuiltSet, L.SetBuilder, E.BuiltSetMultimap, E.SetMultimapBuilder, Y.EnumClass, Y.IndentingBuiltValueToStringHelper, A.JsonObject, U.FullType, O.BigIntSerializer, R.BoolSerializer, Y.BuiltJsonSerializers, Y.BuiltJsonSerializersBuilder, R.BuiltListMultimapSerializer, K.BuiltListSerializer, K.BuiltMapSerializer, R.BuiltSetMultimapSerializer, O.BuiltSetSerializer, Z.DateTimeSerializer, D.DoubleSerializer, K.DurationSerializer, Q.Int64Serializer, B.IntSerializer, O.JsonObjectSerializer, K.NumSerializer, K.RegExpSerializer, M.StringSerializer, O.UriSerializer, U.DefaultEquality, U.IterableEquality, U.ListEquality, U._UnorderedEquality, U._MapEntry, U.MapEquality, U.DeepCollectionEquality, Q.BuildResult, Q._$BuildStatusSerializer, Q._$BuildResultSerializer, Q.BuildResultBuilder, E.ConnectRequest, E._$ConnectRequestSerializer, E.ConnectRequestBuilder, M.DevToolsRequest, M.DevToolsResponse, M._$DevToolsRequestSerializer, M._$DevToolsResponseSerializer, M.DevToolsRequestBuilder, M.DevToolsResponseBuilder, X.ErrorResponse, X._$ErrorResponseSerializer, X.ErrorResponseBuilder, S.ExtensionRequest, S.ExtensionResponse, S.ExtensionEvent, S.BatchedEvents, S._$ExtensionRequestSerializer, S._$ExtensionResponseSerializer, S._$ExtensionEventSerializer, S._$BatchedEventsSerializer, S.ExtensionRequestBuilder, S.ExtensionResponseBuilder, S.ExtensionEventBuilder, S.BatchedEventsBuilder, M.IsolateExit, M.IsolateStart, M._$IsolateExitSerializer, M._$IsolateStartSerializer, M.IsolateExitBuilder, M.IsolateStartBuilder, A.RunRequest, A._$RunRequestSerializer, R.SocketClient, V.Int64, Y.Level, L.LogRecord, F.Logger, R.StreamChannelMixin, K._GuaranteeSink, B.StreamChannelController, K.Uuid, E.WebSocketChannelException, Z.LegacyRestarter, Q.ReloadingManager, X.HotReloadFailedException, X.RequireRestarter]); + _inheritMany(P.Object, [H.JS_CONST, J.Interceptor, J.ArrayIterator, P.Iterable, H.CastIterator, H.Closure, P.MapMixin, P.Error, H.ListIterator, P.Iterator, H.EmptyIterator, H.FixedLengthListMixin, H.UnmodifiableListMixin, P._ListBase_Object_ListMixin, H.Symbol, P.MapView, H.ConstantMap, H.JSInvocationMirror, H.TypeErrorDecoder, H.NullThrownFromJavaScriptException, H.ExceptionAndStackTrace, H._StackTrace, H._Required, H.LinkedHashMapCell, H.LinkedHashMapKeyIterator, H.JSSyntaxRegExp, H._MatchImplementation, H.Rti, H._FunctionParameters, H._Type, P._TimerImpl, P._AsyncAwaitCompleter, P.AsyncError, P._Completer, P._FutureListener, P._Future, P._AsyncCallbackEntry, P.Stream, P.StreamSubscription, P.StreamTransformerBase, P._StreamController, P._SyncStreamControllerDispatch, P._AsyncStreamControllerDispatch, P._BufferingStreamSubscription, P._StreamSinkWrapper, P._DelayedEvent, P._DelayedDone, P._PendingEvents, P._StreamIterator, P._ZoneFunction, P._RunNullaryZoneFunction, P._RunUnaryZoneFunction, P._RunBinaryZoneFunction, P._RegisterNullaryZoneFunction, P._RegisterUnaryZoneFunction, P._RegisterBinaryZoneFunction, P._ZoneSpecification, P._ZoneDelegate, P._Zone, P._HashMapKeyIterator, P.__SetBase_Object_SetMixin, P._HashSetIterator, P._LinkedHashSetCell, P._LinkedHashSetIterator, P.IterableMixin, P.ListMixin, P._UnmodifiableMapMixin, P._ListQueueIterator, P.SetMixin, P._SplayTreeNode, P._SplayTree, P._SplayTreeIterator, P.Codec, P._JsonStringifier, P._BigIntImpl, P.DateTime, P.Duration, P.OutOfMemoryError, P.StackOverflowError, P._Exception, P.FormatException, P.IntegerDivisionByZeroException, P.Null, P._StringStackTrace, P.StringBuffer, P._Uri, P.UriData, P._SimpleUri, W.CssStyleDeclarationBase, W.EventStreamProvider, W._Html5NodeValidator, W.ImmutableListMixin, W.NodeValidatorBuilder, W._SimpleNodeValidator, W._SvgNodeValidator, W.FixedSizeListIterator, W._DOMWindowCrossFrame, W._SameOriginUriPolicy, W._ValidatingTreeSanitizer, P._AcceptStructuredClone, P.JsObject, P.NullRejectionException, P._JSRandom, P._Random, O.DelegatingStreamSink, S.BuiltList, S.ListBuilder, M.BuiltListMultimap, M.ListMultimapBuilder, A.BuiltMap, A.MapBuilder, L.BuiltSet, L.SetBuilder, E.BuiltSetMultimap, E.SetMultimapBuilder, Y.EnumClass, Y.IndentingBuiltValueToStringHelper, A.JsonObject, U.FullType, O.BigIntSerializer, R.BoolSerializer, Y.BuiltJsonSerializers, Y.BuiltJsonSerializersBuilder, R.BuiltListMultimapSerializer, K.BuiltListSerializer, K.BuiltMapSerializer, R.BuiltSetMultimapSerializer, O.BuiltSetSerializer, Z.DateTimeSerializer, D.DoubleSerializer, K.DurationSerializer, Q.Int64Serializer, B.IntSerializer, O.JsonObjectSerializer, K.NumSerializer, K.RegExpSerializer, M.StringSerializer, O.UriSerializer, U.DefaultEquality, U.IterableEquality, U.ListEquality, U._UnorderedEquality, U._MapEntry, U.MapEquality, U.DeepCollectionEquality, Q.BuildResult, Q._$BuildStatusSerializer, Q._$BuildResultSerializer, Q.BuildResultBuilder, E.ConnectRequest, E._$ConnectRequestSerializer, E.ConnectRequestBuilder, M.DevToolsRequest, M.DevToolsResponse, M._$DevToolsRequestSerializer, M._$DevToolsResponseSerializer, M.DevToolsRequestBuilder, M.DevToolsResponseBuilder, X.ErrorResponse, X._$ErrorResponseSerializer, X.ErrorResponseBuilder, S.ExtensionRequest, S.ExtensionResponse, S.ExtensionEvent, S.BatchedEvents, S._$ExtensionRequestSerializer, S._$ExtensionResponseSerializer, S._$ExtensionEventSerializer, S._$BatchedEventsSerializer, S.ExtensionRequestBuilder, S.ExtensionResponseBuilder, S.ExtensionEventBuilder, S.BatchedEventsBuilder, M.IsolateExit, M.IsolateStart, M._$IsolateExitSerializer, M._$IsolateStartSerializer, M.IsolateExitBuilder, M.IsolateStartBuilder, A.RunRequest, A._$RunRequestSerializer, R.SocketClient, V.Int64, Y.Level, L.LogRecord, F.Logger, R.StreamChannelMixin, K._GuaranteeSink, B.StreamChannelController, K.Uuid, E.WebSocketChannelException, Z.LegacyRestarter, Q.ReloadingManager, X.HotReloadFailedException, X.RequireRestarter]); _inheritMany(J.Interceptor, [J.JSBool, J.JSNull, J.JavaScriptObject, J.JSArray, J.JSNumber, J.JSString, H.NativeByteBuffer, H.NativeTypedData, W.EventTarget, W.AccessibleNodeList, W.Blob, W.Event, W.CssTransformComponent, W.CssRule, W._CssStyleDeclaration_Interceptor_CssStyleDeclarationBase, W.CssStyleValue, W.DataTransferItemList, W.DomException, W.DomImplementation, W._DomRectList_Interceptor_ListMixin, W.DomRectReadOnly, W._DomStringList_Interceptor_ListMixin, W.DomTokenList, W._FileList_Interceptor_ListMixin, W.Gamepad, W.History, W._HtmlCollection_Interceptor_ListMixin, W.ImageData, W.Location, W.MediaList, W._MidiInputMap_Interceptor_MapMixin, W._MidiOutputMap_Interceptor_MapMixin, W.MimeType, W._MimeTypeArray_Interceptor_ListMixin, W._NodeList_Interceptor_ListMixin, W.Plugin, W._PluginArray_Interceptor_ListMixin, W._RtcStatsReport_Interceptor_MapMixin, W.SpeechGrammar, W._SpeechGrammarList_Interceptor_ListMixin, W.SpeechRecognitionResult, W._Storage_Interceptor_MapMixin, W.StyleSheet, W._TextTrackCueList_Interceptor_ListMixin, W.TimeRanges, W.Touch, W._TouchList_Interceptor_ListMixin, W.TrackDefaultList, W.Url, W.__CssRuleList_Interceptor_ListMixin, W.__GamepadList_Interceptor_ListMixin, W.__NamedNodeMap_Interceptor_ListMixin, W.__SpeechRecognitionResultList_Interceptor_ListMixin, W.__StyleSheetList_Interceptor_ListMixin, P.KeyRange, P.Length, P._LengthList_Interceptor_ListMixin, P.Number, P._NumberList_Interceptor_ListMixin, P.PointList, P._StringList_Interceptor_ListMixin, P.Transform, P._TransformList_Interceptor_ListMixin, P.AudioBuffer, P._AudioParamMap_Interceptor_MapMixin, P._SqlResultSetRowList_Interceptor_ListMixin]); _inheritMany(J.JavaScriptObject, [J.PlainJavaScriptObject, J.UnknownJavaScriptObject, J.JavaScriptFunction, S.Promise, X.RequireLoader, X.JsError, X.JsMap]); _inherit(J.JSUnmodifiableArray, J.JSArray); diff --git a/dwds/lib/src/version.dart b/dwds/lib/src/version.dart index 230d7bdd1..b52e3fa43 100644 --- a/dwds/lib/src/version.dart +++ b/dwds/lib/src/version.dart @@ -1,2 +1,2 @@ // Generated code. Do not modify. -const packageVersion = '10.0.1'; +const packageVersion = '10.0.2-dev'; diff --git a/dwds/pubspec.yaml b/dwds/pubspec.yaml index f7faaec94..147a3b93f 100644 --- a/dwds/pubspec.yaml +++ b/dwds/pubspec.yaml @@ -1,6 +1,6 @@ name: dwds # Every time this changes you need to run `pub run build_runner build`. -version: 10.0.1 +version: 10.0.2-dev homepage: https://github.com/dart-lang/webdev/tree/master/dwds description: >- A service that proxies between the Chrome debug protocol and the Dart VM diff --git a/dwds/test/build_daemon_evaluate_test.dart b/dwds/test/build_daemon_evaluate_test.dart index 9d7f2cb3b..4f55a0b5b 100644 --- a/dwds/test/build_daemon_evaluate_test.dart +++ b/dwds/test/build_daemon_evaluate_test.dart @@ -403,7 +403,7 @@ void main() async { tearDown(() async {}); test('uses symbol from the same library', () async { - var library = isolate.libraries.first; + var library = isolate.rootLib; var result = await setup.service .evaluate(isolate.id, library.id, 'MainClass(0).toString()'); @@ -416,7 +416,7 @@ void main() async { }); test('uses symbol from another library', () async { - var library = isolate.libraries.first; + var library = isolate.rootLib; var result = await setup.service.evaluate( isolate.id, library.id, 'TestLibraryClass(0,1).toString()'); @@ -429,7 +429,7 @@ void main() async { }); test('closure call', () async { - var library = isolate.libraries.first; + var library = isolate.rootLib; var result = await setup.service .evaluate(isolate.id, library.id, '(() => 42)()'); diff --git a/dwds/test/chrome_proxy_service_test.dart b/dwds/test/chrome_proxy_service_test.dart index a9ee05d45..d8a4806a7 100644 --- a/dwds/test/chrome_proxy_service_test.dart +++ b/dwds/test/chrome_proxy_service_test.dart @@ -21,6 +21,7 @@ import 'package:vm_service/vm_service.dart'; import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; import 'fixtures/context.dart'; +import 'fixtures/logging.dart'; final context = TestContext(); @@ -32,7 +33,11 @@ WipConnection get tabConnection => context.tabConnection; void main() { group('shared context', () { setUpAll(() async { - await context.setUp(); + configureLogWriter( + customLogWriter: (level, message, + {loggerName, error, stackTrace, verbose}) => + printOnFailure('[$level] $loggerName: $message')); + await context.setUp(verbose: true); }); tearDownAll(() async { @@ -237,7 +242,7 @@ void main() { setUpAll(() async { var vm = await service.getVM(); isolate = await service.getIsolate(vm.isolates.first.id); - bootstrap = isolate.libraries.first; + bootstrap = isolate.rootLib; }); group('top level methods', () { @@ -383,7 +388,7 @@ void main() { setUpAll(() async { var vm = await service.getVM(); isolate = await service.getIsolate(vm.isolates.first.id); - bootstrap = isolate.libraries.first; + bootstrap = isolate.rootLib; rootLibrary = await service.getObject(isolate.id, bootstrap.id) as Library; }); @@ -424,6 +429,12 @@ void main() { ])); }); + test('Runtime classes', () async { + var testClass = await service.getObject( + isolate.id, 'classes|dart:_runtime|_Type') as Class; + expect(testClass.name, '_Type'); + }); + test('String', () async { var worldRef = await service.evaluate( isolate.id, bootstrap.id, "helloString('world')") as InstanceRef; @@ -929,11 +940,18 @@ void main() { setUp(() async { vm = await service.getVM(); isolate = await service.getIsolate(vm.isolates.first.id); - bootstrap = isolate.libraries.first; + bootstrap = isolate.rootLib; testInstance = await service.evaluate( isolate.id, bootstrap.id, 'myInstance') as InstanceRef; }); + test('rootLib', () async { + expect( + bootstrap, + const TypeMatcher().having((library) => library.name, + 'name', 'org-dartlang-app:///example/hello_world/main.dart')); + }); + test('toString()', () async { var remote = await service.invoke(isolate.id, testInstance.id, 'toString', []); diff --git a/dwds/test/events_test.dart b/dwds/test/events_test.dart index 0c766a03b..c47fe0736 100644 --- a/dwds/test/events_test.dart +++ b/dwds/test/events_test.dart @@ -60,7 +60,7 @@ void main() { setUpAll(() async { var vm = await service.getVM(); isolate = await service.getIsolate(vm.isolates.first.id); - bootstrap = isolate.libraries.first; + bootstrap = isolate.rootLib; }); test('emits EVALUATE events on evaluation success', () async { diff --git a/dwds/test/frontend_server_evaluate_test.dart b/dwds/test/frontend_server_evaluate_test.dart index 1e9d949f9..1b1073999 100644 --- a/dwds/test/frontend_server_evaluate_test.dart +++ b/dwds/test/frontend_server_evaluate_test.dart @@ -220,7 +220,7 @@ void main() async { tearDown(() async {}); test('uses symbol from the same library', () async { - var library = isolate.libraries.first; + var library = isolate.rootLib; var result = await setup.service .evaluate(isolate.id, library.id, 'MainClass(0).toString()'); @@ -231,7 +231,7 @@ void main() async { }); test('uses symbol from another library', () async { - var library = isolate.libraries.first; + var library = isolate.rootLib; var result = await setup.service.evaluate( isolate.id, library.id, 'TestLibraryClass(0,1).toString()'); @@ -244,7 +244,7 @@ void main() async { }); test('closure call', () async { - var library = isolate.libraries.first; + var library = isolate.rootLib; var result = await setup.service .evaluate(isolate.id, library.id, '(() => 42)()'); diff --git a/dwds/test/inspector_test.dart b/dwds/test/inspector_test.dart index 0c1df9451..aa2b16874 100644 --- a/dwds/test/inspector_test.dart +++ b/dwds/test/inspector_test.dart @@ -105,7 +105,7 @@ void main() { setUp(() async { isolateId = inspector.isolate.id; - bootstrapLibrary = inspector.isolate.libraries.first; + bootstrapLibrary = inspector.isolate.rootLib; instance = await inspector.evaluate( isolateId, bootstrapLibrary.id, 'libraryPublicFinal'); }); diff --git a/webdev/test/e2e_test.dart b/webdev/test/e2e_test.dart index 5e9a8f2e1..a0065e7f0 100644 --- a/webdev/test/e2e_test.dart +++ b/webdev/test/e2e_test.dart @@ -364,7 +364,7 @@ void main() { vmService = await vmServiceConnectUri(wsUri); var vm = await vmService.getVM(); var isolate = await vmService.getIsolate(vm.isolates.first.id); - var library = isolate.libraries.first; + var library = isolate.rootLib; await vmService.streamListen('Debug'); @@ -476,7 +476,7 @@ void main() { vmService = await vmServiceConnectUri(wsUri); var vm = await vmService.getVM(); var isolate = await vmService.getIsolate(vm.isolates.first.id); - var library = isolate.libraries.first; + var library = isolate.rootLib; await vmService.streamListen('Debug');