blob: 41795f242ea15c52fae0c1d99ab9421d9e6eb8a3 [file] [log] [blame] [edit]
// Copyright (c) 2019, 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/data/utils.dart';
/// A request to open DevTools.
class DevToolsRequest {
static const type = 'DevToolsRequest';
/// Identifies a given application, across tabs/windows.
final String appId;
/// Identifies a given instance of an application, unique per tab/window.
final String instanceId;
/// Identifies the context in which evaluations should occur.
///
/// Defines execution context for the debug service that connects
/// to chrome via the extension debugger.
/// Can be `null` for local debug service, which gets the execution
/// context from the Chrome runtime.
final int? contextId;
/// Belongs to the tab that requests the DevTools.
///
/// Defines the tab being debugged for the debug service that connects
/// to chrome via the extension debugger.
/// Can be `null` for local debug service, which finds the tab with the
/// correct `dartAppInstanceId` automatically.
final String? tabUrl;
/// Designates this as a request to send back the DevTools URI instead of
/// opening DevTools in a new tab or window.
///
/// Only available on requests coming from the Dart Debug Extension. Is `null`
/// for local debug service.
final bool? uriOnly;
/// Identifies the client that DWDS is attaching to.
///
/// This could be Cider, DevTools (as a standalone app), or DevTools (embedded
/// in Chrome DevTools).
final String? client;
DevToolsRequest({
required this.appId,
required this.instanceId,
this.contextId,
this.tabUrl,
this.uriOnly,
this.client,
});
factory DevToolsRequest.fromJson(List<dynamic> jsonList) {
final json = listToMap(jsonList, type: type);
return DevToolsRequest(
appId: json['appId'] as String,
instanceId: json['instanceId'] as String,
contextId: json['contextId'] as int?,
tabUrl: json['tabUrl'] as String?,
uriOnly: json['uriOnly'] as bool?,
client: json['client'] as String?,
);
}
List<Object?> toJson() {
return [
type,
'appId',
appId,
'instanceId',
instanceId,
if (contextId != null) ...['contextId', contextId],
if (tabUrl != null) ...['tabUrl', tabUrl],
if (uriOnly != null) ...['uriOnly', uriOnly],
if (client != null) ...['client', client],
];
}
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is DevToolsRequest &&
other.appId == appId &&
other.instanceId == instanceId &&
other.contextId == contextId &&
other.tabUrl == tabUrl &&
other.uriOnly == uriOnly &&
other.client == client;
}
@override
int get hashCode =>
Object.hash(appId, instanceId, contextId, tabUrl, uriOnly, client);
@override
String toString() {
return 'DevToolsRequest { '
'appId: $appId, '
'instanceId: $instanceId, '
'contextId: $contextId, '
'tabUrl: $tabUrl, '
'uriOnly: $uriOnly, '
'client: $client, '
'}';
}
}
/// A response to a [DevToolsRequest].
class DevToolsResponse {
static const type = 'DevToolsResponse';
final bool success;
final bool promptExtension;
final String? error;
DevToolsResponse({
required this.success,
required this.promptExtension,
this.error,
});
factory DevToolsResponse.fromJson(List<dynamic> jsonList) {
final json = listToMap(jsonList, type: type);
return DevToolsResponse(
success: json['success'] as bool,
promptExtension: json['promptExtension'] as bool,
error: json['error'] as String?,
);
}
List<Object?> toJson() {
return [
type,
'success',
success,
'promptExtension',
promptExtension,
if (error != null) ...['error', error],
];
}
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is DevToolsResponse &&
other.success == success &&
other.promptExtension == promptExtension &&
other.error == error;
}
@override
int get hashCode => Object.hash(success, promptExtension, error);
@override
String toString() {
return 'DevToolsResponse { '
'success: $success, '
'promptExtension: $promptExtension, '
'error: $error }';
}
}