From 272887e129fc0ca09f81a3a672d67b9aca32d385 Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Tue, 30 Aug 2022 13:38:13 -0700 Subject: [PATCH 1/3] Scaffold for the MV3 Dart Debug Extension --- dwds/debug_extension_mv3/.gitignore | 3 + dwds/debug_extension_mv3/build.yaml | 26 ++ dwds/debug_extension_mv3/pubspec.yaml | 31 +++ .../tool/build_extension.sh | 20 ++ .../tool/copy_builder.dart | 42 ++++ .../tool/update_dev_files.dart | 78 ++++++ dwds/debug_extension_mv3/web/background.dart | 19 ++ dwds/debug_extension_mv3/web/chrome_api.dart | 232 ++++++++++++++++++ dwds/debug_extension_mv3/web/dart_dev.png | Bin 0 -> 4743 bytes dwds/debug_extension_mv3/web/manifest.json | 11 + dwds/debug_extension_mv3/web/web_api.dart | 26 ++ 11 files changed, 488 insertions(+) create mode 100644 dwds/debug_extension_mv3/.gitignore create mode 100644 dwds/debug_extension_mv3/build.yaml create mode 100644 dwds/debug_extension_mv3/pubspec.yaml create mode 100755 dwds/debug_extension_mv3/tool/build_extension.sh create mode 100644 dwds/debug_extension_mv3/tool/copy_builder.dart create mode 100644 dwds/debug_extension_mv3/tool/update_dev_files.dart create mode 100644 dwds/debug_extension_mv3/web/background.dart create mode 100644 dwds/debug_extension_mv3/web/chrome_api.dart create mode 100644 dwds/debug_extension_mv3/web/dart_dev.png create mode 100644 dwds/debug_extension_mv3/web/manifest.json create mode 100644 dwds/debug_extension_mv3/web/web_api.dart diff --git a/dwds/debug_extension_mv3/.gitignore b/dwds/debug_extension_mv3/.gitignore new file mode 100644 index 000000000..4878cbe8b --- /dev/null +++ b/dwds/debug_extension_mv3/.gitignore @@ -0,0 +1,3 @@ +build/ +compiled/ +extension_key.txt diff --git a/dwds/debug_extension_mv3/build.yaml b/dwds/debug_extension_mv3/build.yaml new file mode 100644 index 000000000..e709b3de6 --- /dev/null +++ b/dwds/debug_extension_mv3/build.yaml @@ -0,0 +1,26 @@ +targets: + $default: + builders: + build_web_compilers|entrypoint: + options: + dart2js_args: + - -O1 # Note: Change to -04 for minified JS. + - --csp + generate_for: + - web/**.dart + extension|client_js_copy_builder: + enabled: true + +builders: + client_js_copy_builder: + import: "tool/copy_builder.dart" + builder_factories: + - copyBuilder + build_extensions: + { + "web/{{}}.dart.js": ["compiled/{{}}.dart.js"], + "web/{{}}.png": ["compiled/{{}}.png"], + "web/manifest.json": ["compiled/manifest.json"], + } + auto_apply: none + build_to: source diff --git a/dwds/debug_extension_mv3/pubspec.yaml b/dwds/debug_extension_mv3/pubspec.yaml new file mode 100644 index 000000000..8bbc7e4a5 --- /dev/null +++ b/dwds/debug_extension_mv3/pubspec.yaml @@ -0,0 +1,31 @@ +name: extension +publish_to: none +version: 1.30.0 +homepage: https://github.com/dart-lang/webdev +description: >- + A chrome extension for Dart debugging. + +environment: + sdk: '>=2.12.0 <3.0.0' + +dependencies: + async: ^2.3.0 + collection: ^1.15.0 + js: ^0.6.1+1 + pub_semver: ^2.0.0 + sse: ^4.1.0 + web_socket_channel: ^2.0.0 + +dev_dependencies: + build: ^2.0.0 + build_web_compilers: ^3.0.0 + build_runner: ^2.0.6 + built_collection: ^5.0.0 + dwds: ^11.0.0 + webdev: ^2.0.0 + +dependency_overrides: + webdev: + path: ../../webdev + dwds: + path: .. diff --git a/dwds/debug_extension_mv3/tool/build_extension.sh b/dwds/debug_extension_mv3/tool/build_extension.sh new file mode 100755 index 000000000..c2e46aaca --- /dev/null +++ b/dwds/debug_extension_mv3/tool/build_extension.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Copyright 2022 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# INSTRUCTIONS: + +# Builds the unminifed dart2js app (see DDC issue: https://github.com/dart-lang/sdk/issues/49869): +# ./tool/build_extension.sh + +echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +echo "Building dart2js-compiled extension to /compiled directory." +echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +dart run build_runner build web --delete-conflicting-outputs --output build --release + +echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +echo "Updating manifest.json in /compiled directory." +echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +dart tool/update_dev_files.dart diff --git a/dwds/debug_extension_mv3/tool/copy_builder.dart b/dwds/debug_extension_mv3/tool/copy_builder.dart new file mode 100644 index 000000000..7b815594c --- /dev/null +++ b/dwds/debug_extension_mv3/tool/copy_builder.dart @@ -0,0 +1,42 @@ +// 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:build/build.dart'; + +/// Factory for the build script. +Builder copyBuilder(_) => _CopyBuilder(); + +class _CopyBuilder extends Builder { + @override + Map> get buildExtensions => { + "web/{{}}.dart.js": ["compiled/{{}}.dart.js"], + "web/{{}}.png": ["compiled/{{}}.png"], + "web/{{}}.html": ["compiled/{{}}.html"], + "web/{{}}.css": ["compiled/{{}}.css"], + "web/manifest.json": ["compiled/manifest.json"], + }; + + @override + void build(BuildStep buildStep) async { + final inputAsset = buildStep.inputId; + final allowedOutputs = buildStep.allowedOutputs; + + if (allowedOutputs.length != 1) { + return; + } + + final outputAsset = allowedOutputs.first; + await _copyBinaryFile(buildStep, + inputAsset: inputAsset, outputAsset: outputAsset); + } + + Future _copyBinaryFile( + BuildStep buildStep, { + required AssetId inputAsset, + required AssetId outputAsset, + }) { + return buildStep.writeAsBytes( + outputAsset, buildStep.readAsBytes(inputAsset)); + } +} diff --git a/dwds/debug_extension_mv3/tool/update_dev_files.dart b/dwds/debug_extension_mv3/tool/update_dev_files.dart new file mode 100644 index 000000000..22bb4c4cb --- /dev/null +++ b/dwds/debug_extension_mv3/tool/update_dev_files.dart @@ -0,0 +1,78 @@ +// 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. + +import 'dart:io'; + +void main() async { + _updateManifestJson(); +} + +/// Adds the Googler extension key. +Future _updateManifestJson() async { + final manifestJson = File('compiled/manifest.json'); + final extensionKeyTxt = File('extension_key.txt'); + final extensionKey = await extensionKeyTxt.exists() + ? await extensionKeyTxt.readAsString() + : null; + _transformDevFile(manifestJson, (line) { + if (_matchesKey(line: line, key: 'name')) { + return [ + line, + if (extensionKey != null) + _newKeyValue( + oldLine: line, + newKey: 'key', + newValue: extensionKey, + ), + ]; + } else { + return [line]; + } + }); +} + +Future _transformDevFile( + File devFile, List Function(String) transformLine) async { + final lines = devFile.readAsLinesSync(); + final newLines = []; + for (final line in lines) { + newLines.addAll(transformLine(line)); + } + final content = newLines.joinWithNewLine(); + return devFile.writeAsStringSync(content); +} + +bool _matchesKey({required String line, required String key}) { + return line.trimLeft().startsWith('"$key":'); +} + +String _newKeyValue({ + required String oldLine, + String? newKey, + String? newValue, +}) { + final lineStart = oldLine.leftPadding(); + final key = newKey != null ? '"$newKey": ' : ''; + final value = newValue != null ? '"$newValue"' : ''; + final lineEnd = oldLine.trim().endsWith(',') ? ',' : ''; + return '$lineStart$key$value$lineEnd'; +} + +extension LeftPaddingExtension on String { + String leftPadding() { + String padding = ''; + int idx = 0; + while (idx < length && this[idx] == ' ') { + padding += ' '; + idx++; + } + return padding; + } +} + +extension JoinExtension on List { + String joinWithNewLine() { + return '${join('\n')}\n'; + } +} diff --git a/dwds/debug_extension_mv3/web/background.dart b/dwds/debug_extension_mv3/web/background.dart new file mode 100644 index 000000000..43e347c0d --- /dev/null +++ b/dwds/debug_extension_mv3/web/background.dart @@ -0,0 +1,19 @@ +// 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 background; + +import 'package:js/js.dart'; + +import 'chrome_api.dart'; +import 'web_api.dart'; + +void main() { + console.log('Running Dart Debug Extension.'); + // Detect clicks on the Dart Debug Extension icon. + chrome.action.onClicked.addListener(allowInterop((_) { + console.log('Detected click on the Dart Debug Extension icon.'); + })); +} diff --git a/dwds/debug_extension_mv3/web/chrome_api.dart b/dwds/debug_extension_mv3/web/chrome_api.dart new file mode 100644 index 000000000..fae444653 --- /dev/null +++ b/dwds/debug_extension_mv3/web/chrome_api.dart @@ -0,0 +1,232 @@ +// 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. + +import 'package:js/js.dart'; + +@JS() +external Chrome get chrome; + +@JS() +@anonymous +class Chrome { + external Action get action; +} + +@JS() +@anonymous +class Action { + // https://developer.chrome.com/docs/extensions/reference/action/#event-onClicked + external OnClickedHandler get onClicked; +} + +@JS() +@anonymous +class BrowserAction { + // https://developer.chrome.com/docs/extensions/reference/browserAction/#method-setIcon + external void setIcon(IconInfo iconInfo, Function? callback); + + // https://developer.chrome.com/docs/extensions/reference/browserAction/#event-onClicked + external OnClickedHandler get onClicked; +} + +@JS() +@anonymous +class OnClickedHandler { + external void addListener(void Function(Tab tab) callback); +} + +@JS() +@anonymous +class Debugger { + // https://developer.chrome.com/docs/extensions/reference/debugger/#method-attach + external void attach( + Debuggee target, String requiredVersion, Function? callback); + + // https://developer.chrome.com/docs/extensions/reference/debugger/#method-detach + external void detach(Debuggee target, Function? callback); + + // https://developer.chrome.com/docs/extensions/reference/debugger/#method-sendCommand + external void sendCommand(Debuggee target, String method, + Object? commandParams, Function? callback); + + // https://developer.chrome.com/docs/extensions/reference/debugger/#event-onDetach + external OnDetachHandler get onDetach; + + // https://developer.chrome.com/docs/extensions/reference/debugger/#event-onEvent + external OnEventHandler get onEvent; +} + +@JS() +@anonymous +class OnDetachHandler { + external void addListener( + void Function(Debuggee source, String reason) callback); +} + +@JS() +@anonymous +class OnEventHandler { + external void addListener( + void Function(Debuggee source, String method, Object? params) callback); +} + +@JS() +@anonymous +class Runtime { + // https://developer.chrome.com/docs/extensions/reference/runtime/#method-sendMessage + external void sendMessage( + String? id, Object? message, Object? options, Function? callback); + + // https://developer.chrome.com/docs/extensions/reference/runtime/#property-lastError + // Note: Not checking the lastError when one occurs throws a runtime exception. + external ChromeError? get lastError; + + // https://developer.chrome.com/docs/extensions/reference/runtime/#event-onMessage + external OnMessageHandler get onMessage; + + // https://developer.chrome.com/docs/extensions/reference/runtime/#event-onMessageExternal + external OnMessageHandler get onMessageExternal; +} + +@JS() +@anonymous +class OnMessageHandler { + external void addListener( + void Function(dynamic, MessageSender, Function) callback); +} + +@JS() +@anonymous +class Tabs { + // https://developer.chrome.com/docs/extensions/reference/tabs/#method-query + external List query( + QueryInfo queryInfo, void Function(List) callback); + + // https://developer.chrome.com/docs/extensions/reference/tabs/#event-onActivated + external OnActivatedHandler get onActivated; + + // https://developer.chrome.com/docs/extensions/reference/tabs/#event-onCreated + external OnCreatedHandler get onCreated; + + // https://developer.chrome.com/docs/extensions/reference/tabs/#event-onRemoved + external OnRemovedHandler get onRemoved; +} + +@JS() +@anonymous +class OnActivatedHandler { + external void addListener(void Function(ActiveInfo activeInfo) callback); +} + +@JS() +@anonymous +class OnCreatedHandler { + external void addListener(void Function(Tab tab) callback); +} + +@JS() +@anonymous +class OnRemovedHandler { + external void addListener( + void Function(int tabId, RemoveInfo removeInfo) callback); +} + +@JS() +@anonymous +class WebNavigation { + // https://developer.chrome.com/docs/extensions/reference/webNavigation/#event-onCommitted + external OnCommittedHandler get onCommitted; +} + +@JS() +@anonymous +class OnCommittedHandler { + external void addListener(void Function(NavigationInfo details) callback); +} + +@JS() +@anonymous +class Windows { + external OnFocusChangedHandler get onFocusChanged; +} + +@JS() +@anonymous +class OnFocusChangedHandler { + external void addListener(void Function(int windowId) callback); +} + +@JS() +@anonymous +class ActiveInfo { + external int get tabId; +} + +@JS() +class ChromeError { + external String get message; +} + +@JS() +@anonymous +class Debuggee { + external int get tabId; + external String get extensionId; + external String get targetId; + external factory Debuggee({int tabId, String? extensionId, String? targetId}); +} + +@JS() +@anonymous +class IconInfo { + external String get path; + external factory IconInfo({String path}); +} + +@JS() +@anonymous +class MessageSender { + external String? get id; + external Tab? get tab; + external String? get url; + external factory MessageSender({String? id, String? url, Tab? tab}); +} + +@JS() +@anonymous +class NavigationInfo { + external String get transitionType; + external int get tabId; +} + +@JS() +@anonymous +class QueryInfo { + external bool get active; + external bool get currentWindow; + external factory QueryInfo({bool? active, bool? currentWindow}); +} + +@JS() +@anonymous +class RemoveInfo { + external int get windowId; + external bool get isWindowClosing; +} + +@JS() +@anonymous +class Tab { + external int get id; + external String get url; +} + +@JS() +@anonymous +class UrlFilter { + external String? get hostContains; + external String? get hostEquals; + external String? get hostPrefix; + external String? get hostSuffix; +} diff --git a/dwds/debug_extension_mv3/web/dart_dev.png b/dwds/debug_extension_mv3/web/dart_dev.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0479209a0a4dbe62160bc2bafaaf34ce578470 GIT binary patch literal 4743 zcmY*dcQ{+WTHeHGFqa9L6qntdP0=wy$gm32BU;AqW6fBqSxp|v>Gee0k7JUdeRzA6~2mEgc#zmIHNK+fGi1x6Diwg<~3USDh!{Kll4?71bT_u(O z&@Uocj)xe`BPj&J$Hzy|=awMa!x14YDJh8%5r{IPtJct{#QrI z-qY5@=@G^W?FRp&Yi)z}!pL%P{Au*>^UpakP7eR=1%(j*YF|)g z{$!=JJe=$=I{(p^6PEcK`TuhN=_7;q)BOJ&=ATLb&R&cvM=pc-_uAyhnJnf>0D$7u zl@#=_1e@u;DAq34j~};=yeFWO>XhH$k?LemIJw;PCJJ=9mB@<(tbS@m)A8yatDf_m z>gcb_%W@s&78jpA;F=(PokQy3Uc+H!mUqod=d#FyP414q(wo*Nr2jvsonI|-$|H;i;?Bo#UN9EvP-onvETm%O)TWciXB znwuZ1OgO9X(JyQ7ZKs$C9{3u`RqQ<{ZZ9RAOE$D{;=3Bn&l+Pi+^R({g z(W$(Bvgj)`qYsH#*ksIvBsO%*Q*GsjqQ6^W0Sl{$zJwEo(hd~acF z+#r!suuO4a%k@xbw$vorfC%^a*t_V>15Iv!4@YaRN*aI~m!n?Xto)c<#l?HUkJ4Af zhn5k7lH)B~{c~shae@BZw@@Pj5OyrE-CtYNWLsp;&#p#~OPBUJgPGQ9v3TI9KE>Eb z71by}1r_;#Ra_9c=jm2G^v%XYdWZ@^E9{(Z`EYz4o4CuNf^T9>{Mv8@%pJ}uwq>pc zB9l@+V`?Z&V`Pt4b0t~5x?XeYfH|zm*k{7{gsG@x7)OutcXPh|SN0yhVbvG}>8l}yJ$ncbKJ=+nwj8Umc(d;bVQMd(J)z`*@q z+Z~r#!r@oI)WAw{D*If@w%iw!`Rs5uKEJ~2v?Z*72dd`Igx6Lzcrq?jLmWyuL6G3| zj#8mMSwkU<9?)m^LDduz4l!BuxJSvaBzvK^H|O1xFJdZ?JcHnKCMPsWD-KX%8kUQ9 zHf3sfO8_5EGi3817guO{YSYz_US?uE^|N?0bV-YxPyi^=$HnxAP?IVZ?)Z7JCY72R zd?@m!F1Dlq3RH*rkpnBfId@vqJHD$QKWvoMxi$^$B!)*JEe2NZ7T7`JMEYeTG{?=UCz}Fq1dtKttlT!hv~#@8LEWO1bX>*sRqMofHtZ*6{vqq zW+$x^3Zh5ItSC|21LXK+d;Y?JMt=n}Qnie%_$W8=W$tM`xHd7k`#zy|p%@xLeL2aT z8*OARlfEv>YR9fkI2TO9RzF(95x5zukkygcL@m#xx8NFzBm+&8XBkmn)K~UHkabmF z_=FnGqClPV%0%QPu)CP{x#LiYwq@J(RwD^O=kmCaYFspi)dBrmVYP}%~jMquT+#USfSLx>=Xt{(II z5r!lOrpY@``6-}zRD-_{X65&%V}}sojgdPdjdAra{p1`)b~Ube{#LUWV`-Cc4c}oZ zdM)6T0mttDwKn_08OC3|WUG75RFEeqynrl^`g|uMka%xkp<9pU++jP>jGN`zkPWxp z5se*9M^6;&yY=#kEf2^^P|v7iof_mbQ`vDwi)K28h^Mr zgDP+1M1q0#mV}tur*{|vpb@J5r&f z!N$3>wT>fbxdB-&$gi7kq`(n}I*5PxN*8YYHtW0o-r4YB-jy#-`nd&OM88o>RhP#b z6;H<7XDGPEZoIv|+Mj&JwkHd4in<)#cAeARoKl%Nmu;OJm`%P^sGMV;4}6yjP}Rpc(S_tx+TR{JEOa1!Q#KU6Y)e)3E5v7f^58McgD1n1E?*btmuBiZi^u5q zZXXvx+`k4QEPIa0=}Q$7f>oH-=NbC~O3YW7#dsDiK!U;cCAdH^_MK?WwR#uU_b~b8 zN|hqj_(HAWB@6G}=YvKqLb5do8J{qLqfh^=>045*Jh&XhzhaJN{W3jFtbi@zkd?sJzVhC>5q-6|czpblz=IE7nf+^9wg*{- zb!=N6F%bTD@(!6d8$;>0U&<)VQ(kpRmy09kyHT+DY4kS8s(DKQhHNkyF4_K2s5u3r zaObb5w+&f{k`mxH>7(CS#@_jq+duYf*(l0BvWZ_YX-!lg?mDU8eD~vpiW>>Ymnfj6 zY77rD`B@-&nxw}K#)eLA^wXdDR5pgCE1?;Prtb=NjaYH)wFj7&A5EeMgDEwmm4waO zdG-{dI^=t3WbQ|OG4TtmU2^dDA7u~6cve_=oB5khy|s}v-C1+0;2Nx_l{+{Pjjf55 zI*;Vp--|b^3!wnZG^5SuC%8iSuK7$lFOZNwGuXTr>OvH;z;ax%Yd34#cl2hXC*`{L zj~W<6%TQ9{1-9#3r%M`fXS(eA8seKv)wh?_E+5ECb?a@jYU*7Q)+TZ@B|(IRrXM$n z%RR@b#=t#(MwWL*E%@n2OEkHIy0fry$Tc9C8ygSW{H*EH>RE3tct7$B%kRo&6eN7X zDT!i^d=|k(nXaW?@4om!T+!9pHLNyln%$5NJvR0FxMEt?_kwWztA@a$<GP z43^c@uf~fbq`2A5*%gi65Bk4bk&#&)SR~!Z$!oC0)Xt$xNi^C~NG&Wcf9-v;rzX+D z=3H6Y$qIR0kaGV?dXzu3NnrXTFTfb0id%dQE1rq|Ww|A58O=0^s8399ajIez3k*DL z4Srf*8Nr`M9B0LR_(F(kd$LV|uD}suQxA+9E00&Su5^hGuRJH23q#yBJbgUINlMWi zyF31|&oITVTC6+{Npt=c;7nyzYy7xO%;w%0 zYk7a{0U{t*2AQ*I=2v`!xRDjrcKTk;C~0Utk2W_{ppCamKv%t2VX|!(@yh3$ppE_G z;}6Pl^*jv4(4k?O7sQ>&x)7J0RSCq+{XxZ+Twe59gowjc9J364)8e6OY4+BOqQOJj z&WsNZs%9e;`lM5rQ&SdZ&gJHD{s_gl7)VERyu*pgel33oh5q$N%xSh1*+Rf$===a>+YXOd&Cnp(kJF5yP zezSwIhQ+YuVPLs4?0K$lJN%hM7yaU+r@i!gMqjot-?`NzX&~wD75F(|p z&@VipMWLPrsv{FUe_lVBQf(C9v&##9ZH#-q(==`KT3z~1eQG*!b+kn^m9@!}>U&8^ z65ktuNElKTp9+pSFM{zCv`#0jomoJTrRVQge-BS8+T8V9;mBH3zmmHoT-t=_M_Y$) z)rY6Ihh%eg zsBTwxgCF}nJDFAk@{dMMyfNctYz_OWJE7T`v`(?eVVv}<4?{uiM3g>q!=n!#05leZ z+4~wG7xc<z7Xf>ac>#_rco34#ka7|&Az!gpGC|)`AvQR z6cQ-XEA^qG2^F9%&B@8R@kwG9cF=4~K9}rh%{NzF;EM?olhsIp7d}bW4^CNdJoLZ}~}W}wduXegmW6xd!0 z#mU&L$yFHs=4u%PFs;W*%xDWLE>&AmK7C*~2VE`JD#+jwkNc*9M7|_-uxw7Q!rA*) zZ}YDt0=P60;e?6-9!{Q}a-?SrdjM5>>uLwOX_BBkWn?+z#VFrs@-#d=s<#Sc5j$yu zLcUmt4&;;Hb1wFX;ny}q$hfv?1^cR1zXQouTXzU`(bwa=i&AmZRZz4O7Zotp-UJ`{Bt?sQ5lNS)`#+88VY62-*D!+LMCu*1_AQCHWhjX8kE9c>c!@SU)Fo^5$N zZ`t;I1Wz|oW(Ol$<6|jEC5JTH<@nK%;F#NZwBsdWli9cjxk&B2$U=~{Y}E}YAwod* z#&_4j?^%G3flzPilXkw%kDu=SELoo;33isPu4W;^K_;s0`vPFkW@zJWl#G{>`WZf2 zyOA!8&==(D05wMBP|OzNv$OJh5qZW03aPJPc&>D<>j$ScY7vMUF7#~6Z#urH(|go9 zEk!xXk23E*^%$vjo&0(z%EZrXNhzsDpGOSDTKo@waNZtbK=-xT6Hx2<`}^m}iO5}w z@UxM|h?Q$axG#CWiJsLXfIAZ54Pf_ES>>$>W_C5lIlX|I4ziLl+((nw)kV4>UCXw-&Yyb;e3FC%=4GmNuaPWMrf*B)MKu zgpNB?Djz+iO{f4_WO^lf&UMk;Z0;tjtG7&D?mkG!isuA)dG~BrIgi3&VG4Fykig#7 zYJl8!bhDa_aVasg_U@$wNl;W+_W7NasX2@WXT)Y9cL;U!txJG6CUK68@w6`Ir<)_! zJk*E9=EPWT5C-f}$n6KWzZoio`AFaV;iYYAe7}zi*gZmS-@CmpVJzN4Rqc2cr%oCe zwpigRWM^RCEeh-~8?>i{oNe)M)^RmU12Vu4sX;Qhz}j{#-?jf{tvn}yci2uI#^08C zu6!ep*E0tJE68RHY;S(8%_Exk*_+1IZK7t)j%NR-)cNHpiL5|<3QF-mzjf4=?< Date: Tue, 30 Aug 2022 13:53:03 -0700 Subject: [PATCH 2/3] Clean up --- dwds/debug_extension_mv3/build.yaml | 2 +- dwds/debug_extension_mv3/pubspec.yaml | 18 +- .../tool/build_extension.sh | 2 +- .../tool/copy_builder.dart | 2 - dwds/debug_extension_mv3/web/background.dart | 2 +- dwds/debug_extension_mv3/web/chrome_api.dart | 193 +----------------- dwds/debug_extension_mv3/web/web_api.dart | 11 - 7 files changed, 6 insertions(+), 224 deletions(-) diff --git a/dwds/debug_extension_mv3/build.yaml b/dwds/debug_extension_mv3/build.yaml index e709b3de6..cdffb3aa9 100644 --- a/dwds/debug_extension_mv3/build.yaml +++ b/dwds/debug_extension_mv3/build.yaml @@ -8,7 +8,7 @@ targets: - --csp generate_for: - web/**.dart - extension|client_js_copy_builder: + mv3_extension|client_js_copy_builder: enabled: true builders: diff --git a/dwds/debug_extension_mv3/pubspec.yaml b/dwds/debug_extension_mv3/pubspec.yaml index 8bbc7e4a5..b94ad1564 100644 --- a/dwds/debug_extension_mv3/pubspec.yaml +++ b/dwds/debug_extension_mv3/pubspec.yaml @@ -1,31 +1,17 @@ -name: extension +name: mv3_extension publish_to: none version: 1.30.0 homepage: https://github.com/dart-lang/webdev description: >- - A chrome extension for Dart debugging. + A Chrome extension for Dart debugging. environment: sdk: '>=2.12.0 <3.0.0' dependencies: - async: ^2.3.0 - collection: ^1.15.0 js: ^0.6.1+1 - pub_semver: ^2.0.0 - sse: ^4.1.0 - web_socket_channel: ^2.0.0 dev_dependencies: build: ^2.0.0 build_web_compilers: ^3.0.0 build_runner: ^2.0.6 - built_collection: ^5.0.0 - dwds: ^11.0.0 - webdev: ^2.0.0 - -dependency_overrides: - webdev: - path: ../../webdev - dwds: - path: .. diff --git a/dwds/debug_extension_mv3/tool/build_extension.sh b/dwds/debug_extension_mv3/tool/build_extension.sh index c2e46aaca..4600bb4b4 100755 --- a/dwds/debug_extension_mv3/tool/build_extension.sh +++ b/dwds/debug_extension_mv3/tool/build_extension.sh @@ -12,7 +12,7 @@ echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" echo "Building dart2js-compiled extension to /compiled directory." echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" -dart run build_runner build web --delete-conflicting-outputs --output build --release +dart run build_runner build web --output build --release echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" echo "Updating manifest.json in /compiled directory." diff --git a/dwds/debug_extension_mv3/tool/copy_builder.dart b/dwds/debug_extension_mv3/tool/copy_builder.dart index 7b815594c..07a0c79ab 100644 --- a/dwds/debug_extension_mv3/tool/copy_builder.dart +++ b/dwds/debug_extension_mv3/tool/copy_builder.dart @@ -12,8 +12,6 @@ class _CopyBuilder extends Builder { Map> get buildExtensions => { "web/{{}}.dart.js": ["compiled/{{}}.dart.js"], "web/{{}}.png": ["compiled/{{}}.png"], - "web/{{}}.html": ["compiled/{{}}.html"], - "web/{{}}.css": ["compiled/{{}}.css"], "web/manifest.json": ["compiled/manifest.json"], }; diff --git a/dwds/debug_extension_mv3/web/background.dart b/dwds/debug_extension_mv3/web/background.dart index 43e347c0d..b1478cba4 100644 --- a/dwds/debug_extension_mv3/web/background.dart +++ b/dwds/debug_extension_mv3/web/background.dart @@ -12,7 +12,7 @@ import 'web_api.dart'; void main() { console.log('Running Dart Debug Extension.'); - // Detect clicks on the Dart Debug Extension icon. + // Detect clicks on the Dart Debug Extension icon. chrome.action.onClicked.addListener(allowInterop((_) { console.log('Detected click on the Dart Debug Extension icon.'); })); diff --git a/dwds/debug_extension_mv3/web/chrome_api.dart b/dwds/debug_extension_mv3/web/chrome_api.dart index fae444653..efc23d2a3 100644 --- a/dwds/debug_extension_mv3/web/chrome_api.dart +++ b/dwds/debug_extension_mv3/web/chrome_api.dart @@ -23,9 +23,6 @@ class Action { @JS() @anonymous class BrowserAction { - // https://developer.chrome.com/docs/extensions/reference/browserAction/#method-setIcon - external void setIcon(IconInfo iconInfo, Function? callback); - // https://developer.chrome.com/docs/extensions/reference/browserAction/#event-onClicked external OnClickedHandler get onClicked; } @@ -36,197 +33,9 @@ class OnClickedHandler { external void addListener(void Function(Tab tab) callback); } -@JS() -@anonymous -class Debugger { - // https://developer.chrome.com/docs/extensions/reference/debugger/#method-attach - external void attach( - Debuggee target, String requiredVersion, Function? callback); - - // https://developer.chrome.com/docs/extensions/reference/debugger/#method-detach - external void detach(Debuggee target, Function? callback); - - // https://developer.chrome.com/docs/extensions/reference/debugger/#method-sendCommand - external void sendCommand(Debuggee target, String method, - Object? commandParams, Function? callback); - - // https://developer.chrome.com/docs/extensions/reference/debugger/#event-onDetach - external OnDetachHandler get onDetach; - - // https://developer.chrome.com/docs/extensions/reference/debugger/#event-onEvent - external OnEventHandler get onEvent; -} - -@JS() -@anonymous -class OnDetachHandler { - external void addListener( - void Function(Debuggee source, String reason) callback); -} - -@JS() -@anonymous -class OnEventHandler { - external void addListener( - void Function(Debuggee source, String method, Object? params) callback); -} - -@JS() -@anonymous -class Runtime { - // https://developer.chrome.com/docs/extensions/reference/runtime/#method-sendMessage - external void sendMessage( - String? id, Object? message, Object? options, Function? callback); - - // https://developer.chrome.com/docs/extensions/reference/runtime/#property-lastError - // Note: Not checking the lastError when one occurs throws a runtime exception. - external ChromeError? get lastError; - - // https://developer.chrome.com/docs/extensions/reference/runtime/#event-onMessage - external OnMessageHandler get onMessage; - - // https://developer.chrome.com/docs/extensions/reference/runtime/#event-onMessageExternal - external OnMessageHandler get onMessageExternal; -} - -@JS() -@anonymous -class OnMessageHandler { - external void addListener( - void Function(dynamic, MessageSender, Function) callback); -} - -@JS() -@anonymous -class Tabs { - // https://developer.chrome.com/docs/extensions/reference/tabs/#method-query - external List query( - QueryInfo queryInfo, void Function(List) callback); - - // https://developer.chrome.com/docs/extensions/reference/tabs/#event-onActivated - external OnActivatedHandler get onActivated; - - // https://developer.chrome.com/docs/extensions/reference/tabs/#event-onCreated - external OnCreatedHandler get onCreated; - - // https://developer.chrome.com/docs/extensions/reference/tabs/#event-onRemoved - external OnRemovedHandler get onRemoved; -} - -@JS() -@anonymous -class OnActivatedHandler { - external void addListener(void Function(ActiveInfo activeInfo) callback); -} - -@JS() -@anonymous -class OnCreatedHandler { - external void addListener(void Function(Tab tab) callback); -} - -@JS() -@anonymous -class OnRemovedHandler { - external void addListener( - void Function(int tabId, RemoveInfo removeInfo) callback); -} - -@JS() -@anonymous -class WebNavigation { - // https://developer.chrome.com/docs/extensions/reference/webNavigation/#event-onCommitted - external OnCommittedHandler get onCommitted; -} - -@JS() -@anonymous -class OnCommittedHandler { - external void addListener(void Function(NavigationInfo details) callback); -} - -@JS() -@anonymous -class Windows { - external OnFocusChangedHandler get onFocusChanged; -} - -@JS() -@anonymous -class OnFocusChangedHandler { - external void addListener(void Function(int windowId) callback); -} - -@JS() -@anonymous -class ActiveInfo { - external int get tabId; -} - -@JS() -class ChromeError { - external String get message; -} - -@JS() -@anonymous -class Debuggee { - external int get tabId; - external String get extensionId; - external String get targetId; - external factory Debuggee({int tabId, String? extensionId, String? targetId}); -} - -@JS() -@anonymous -class IconInfo { - external String get path; - external factory IconInfo({String path}); -} - -@JS() -@anonymous -class MessageSender { - external String? get id; - external Tab? get tab; - external String? get url; - external factory MessageSender({String? id, String? url, Tab? tab}); -} - -@JS() -@anonymous -class NavigationInfo { - external String get transitionType; - external int get tabId; -} - -@JS() -@anonymous -class QueryInfo { - external bool get active; - external bool get currentWindow; - external factory QueryInfo({bool? active, bool? currentWindow}); -} - -@JS() -@anonymous -class RemoveInfo { - external int get windowId; - external bool get isWindowClosing; -} - @JS() @anonymous class Tab { external int get id; external String get url; -} - -@JS() -@anonymous -class UrlFilter { - external String? get hostContains; - external String? get hostEquals; - external String? get hostPrefix; - external String? get hostSuffix; -} +} \ No newline at end of file diff --git a/dwds/debug_extension_mv3/web/web_api.dart b/dwds/debug_extension_mv3/web/web_api.dart index a1c6f96c4..8b927b405 100644 --- a/dwds/debug_extension_mv3/web/web_api.dart +++ b/dwds/debug_extension_mv3/web/web_api.dart @@ -7,20 +7,9 @@ import 'package:js/js.dart'; @JS() external Console get console; -@JS() -// ignore: non_constant_identifier_names -external Json get JSON; - @JS() @anonymous class Console { external void log(String header, [String style1, String style2, String style3]); } - -@JS() -@anonymous -class Json { -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify - external String stringify(o); -} From 2cbe98e7e76c7a62d97e4debbfef204fdbd02a7f Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Tue, 30 Aug 2022 13:54:13 -0700 Subject: [PATCH 3/3] More clean up --- dwds/debug_extension_mv3/web/chrome_api.dart | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/dwds/debug_extension_mv3/web/chrome_api.dart b/dwds/debug_extension_mv3/web/chrome_api.dart index efc23d2a3..9bc20b02e 100644 --- a/dwds/debug_extension_mv3/web/chrome_api.dart +++ b/dwds/debug_extension_mv3/web/chrome_api.dart @@ -20,13 +20,6 @@ class Action { external OnClickedHandler get onClicked; } -@JS() -@anonymous -class BrowserAction { - // https://developer.chrome.com/docs/extensions/reference/browserAction/#event-onClicked - external OnClickedHandler get onClicked; -} - @JS() @anonymous class OnClickedHandler { @@ -38,4 +31,4 @@ class OnClickedHandler { class Tab { external int get id; external String get url; -} \ No newline at end of file +}