From 32b776470fdd1acd156ad074c678873ea024adad Mon Sep 17 00:00:00 2001 From: supechicken Date: Tue, 12 Apr 2022 15:31:09 +0800 Subject: [PATCH] ChromeOS-AutoStart v3.0 --- README.md | 7 ++++- background.js | 17 +++++++++--- dark-mode-icon.js | 5 ++++ icon-dark.png | Bin 0 -> 11586 bytes icon-dark_38x38.png | Bin 0 -> 1166 bytes icon.png => icon-light.png | Bin icon-light_38x38.png | Bin 0 -> 1054 bytes manifest.json | 12 ++++++--- option.html | 13 +++++---- option.js | 2 +- run.html | 7 ++++- run.js | 16 +++++++++-- style.css | 53 +++++++++++++++++++++++++++++++++++++ 13 files changed, 116 insertions(+), 16 deletions(-) create mode 100644 dark-mode-icon.js create mode 100644 icon-dark.png create mode 100644 icon-dark_38x38.png rename icon.png => icon-light.png (100%) create mode 100644 icon-light_38x38.png create mode 100644 style.css diff --git a/README.md b/README.md index 923a0c4..ae04c0e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ -

logo

+

+ logo + logo +

ChromeOS Autostart

## An extension for running shell command at ChromeOS startup automatically without removing RootFS verification. @@ -12,6 +15,8 @@ - A new window will appear and type the command you want to run it at startup - Optional: Click the `Test` button to test it out after setting a command +* Please do not delete the unzipped folder after loading the extension, otherwise the extension will not work + ## How does it works? There is a Chrome extension API called `chrome.terminalPrivate` which can be used to execute crosh commands (and shell commands), and it is only available on some extensions that made by Google (Secure Shell, Chromebook Recovery Utility, etc). However, we can use one of those extension's ID key to get the access of that API. (this extension used the key from Secure Shell) diff --git a/background.js b/background.js index cd9ef6a..60026b9 100644 --- a/background.js +++ b/background.js @@ -1,7 +1,18 @@ +// dark mode icon handler +chrome.runtime.onMessage.addListener( (e) => { + if (e.scheme == 'dark') { + chrome.browserAction.setIcon({ path: '/icon-dark_38x38.png' }); + } +}); + +// open run.html (used to execute command via terminalPrivate API) at login chrome.runtime.onStartup.addListener( () => { - chrome.windows.create({url: "/run.html", type: 'popup', state: 'minimized'}) + chrome.windows.create({url: "run.html", type: 'popup', state: 'minimized', height: 200, width: 200}) }); + +// prompt user to enter a command after install chrome.runtime.onInstalled.addListener( (i) => { if (i.reason == 'install') { - chrome.windows.create({url: '/option.html', type: 'popup', height: 221, width: 230}) -}}) + chrome.windows.create({url: 'option.html', type: 'popup', height: 300, width: 310}) + } +}); diff --git a/dark-mode-icon.js b/dark-mode-icon.js new file mode 100644 index 0000000..89228b5 --- /dev/null +++ b/dark-mode-icon.js @@ -0,0 +1,5 @@ +// a content script for setting dark mode icon +// see https://stackoverflow.com/questions/58880234/toggle-chrome-extension-icon-based-on-light-or-dark-mode-browser +if ( window.matchMedia('(prefers-color-scheme: dark)').matches ) { + chrome.runtime.sendMessage({ scheme: 'dark' }) +} diff --git a/icon-dark.png b/icon-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..0230f5ba45c76f90c7f7d446b737dae1ac41fe69 GIT binary patch literal 11586 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 A5&!@I literal 0 HcmV?d00001 diff --git a/icon-dark_38x38.png b/icon-dark_38x38.png new file mode 100644 index 0000000000000000000000000000000000000000..e6d8672f2a51fa6e7ee12076f19fea5ce872dc97 GIT binary patch literal 1166 zcmV;91abR`P)Px(NJ&INR9Hvtm|KiqQxwO4|1nxB+DK8P#4VZ-A`(Qz1CtOD(YRC-f=X$T@ZeTb zQK1oai6Aaz8n>Wr(h}kUiMTv8LXh&HQTK*c2#VG)U9!H}XL4rG-us-HZxS!|)A#MY z)_?u?+Uv6S5fd=X>Ol3Yd!|-Bn*7ag=7}|92DsZjp3{nSBZz-ZFicOIl!NHv>xxIwO)Q zCbkhcIHNpQ(#l*+HIN*TG}+ADyYA)G_)^la?U-1yiUY4mI&++)DiS8C$IM;?&T2}k zVPao%ywxV=Bn_C^iNL!h zCo~fC(opR%{N4^s4xpVKn%Tafu3FF^L>T9Zh9b#s-AFwF_^0TDr zH4ry+5AZkewWI^h>=$5Kr2D?4W6kU@VA7}>HMH3+z+MTPGbL@Rh+PIOPY8LCt^+n# zYr$(@1yT>VjkJr}TlXQIWwAZ{` zTiYgSO6JH82wwj_VY74lt%$tsTgE>WL7GY>+f7Lu@LrdnT?souVRkA@EFs{UyM2z(8W{IAA@nEfr%S z78e7zXEt>K@N7bNo}?!$VtWEVCWK0HLNI<9@L8lgP10|rl2Ew8%#gIDZ5?|XI4P5T zJ4^Z}UNf^#fFlw*OC;Uas*Z&W%T@mQlKNY;qmKbE1NTW<(crC%fTwaH;PZ8ldFCxD z#EVz*{*2d#r^E4j0d|t{I8@Tc!Y1#Qbi)W@4PIL>>8R*aK#Jqu!2ZAoiN(c|mYUgz zA=5{R)NjV|wdd7PkyA!*l(fvumH@XV1hz_=n(@YLNiUh%wV|b@@L!kY-J&x_RqcjY zdP0)7FYm8jCj7QB1T@tDypdm3v$|Q*K0!X$U554RY*WN$18WPhqoZ>4>b z7MhvgF23__A?cm4?yn$k=E>Jkuyc;2HAP|p>~r9d0y$s$2{=tsDxTb<#{jPZ(;IO7 zLU2$lQ+ijH+D*z?eWNF_sJ>GY?XKjHIf1iJ$kPx&*hxe|R9Hvt*jdOnV;BeU-)CP!vJ2Uwh@_C@07a6>@=;{Vt~juZ5Rx?^JK3_9 zC31k0EY! z&YP_PT!SNec5cL>v#~uF!2YZNn3e5WDK~)r2R75x_|GDCFZSx7T?kz;V}W($?#CWO z5tx=^-(l&3fv(;dU?rI!Dz+!?hJgK!M5jb^0W5a^z{1lUbot+7sew?>6|lJY2}|~U zl_GW`E*t=LD-LY<_h9de>?Js%;oXFT2W*~#3%dM1u>4PWYjg(A#cSATWcgm#Oor2N z-hj>mMb!uP7S^pO?~A*86*&@{U$A%+-9))W?{t0lfz>MPVeI-3LA4-aJ5hN6yG<*q zF0eb1s0qk@qyu|fw}99@iG@gCO3S6Hs6 z`#iS5&seNrH-10EN(J5;!O{Xd3@PhAB}tPPpLQ70dA9*|6^^PLNsjlW20&kA5$ueI z3c5$*>K53wIJ_W~NbZ8`JG|$xRr5bRuQt|xY^F!)$kuA2{&B(QWczK6-qlt^PjGo0 ziSv8U^TwH_Lsc4n4JLby%BoZ(_XxaAAFcohtbh{^oeJ*-nN`Wg%Fn zFEDhk?CxDtFizOroo$SKWZJvH-{gmYMfek>6aO2OeXMGG8n6Jmtl3KE65JIycF5ou zV6FbpCxfw|tDgjBl4B)jNz$w{rLH~%F0(W%P%bs2XeJTs8=Q~J2l6C6EEkhpl4neR Y0V*uVC+)DxNdN!<07*qoM6N<$f}hC&3IG5A literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json index 942459f..f990f19 100644 --- a/manifest.json +++ b/manifest.json @@ -1,15 +1,21 @@ { "manifest_version": 2, "name": "ChromeOS Autostart", - "version": "2.2.1", - "icons": { "170": "icon.png" }, + "version": "3.0", + "icons": { "170": "icon-light.png" }, "description": "Run shell command at ChromeOS startup.", "background": { "scripts": [ "background.js" ] }, + "content_scripts": [ + { + "matches": [ "" ], + "js": [ "/dark-mode-icon.js" ] + } + ], "browser_action": { "default_icon": { - "170": "icon.png" + "38": "icon-light_38x38.png" }, "default_title": "ChromeOS AutoStart", "default_popup": "option.html" diff --git a/option.html b/option.html index 134a17a..f80c720 100644 --- a/option.html +++ b/option.html @@ -1,15 +1,18 @@ + + +


Enter the command you wish to run at startup:

-
-
-
- - +
+
+ + +
diff --git a/option.js b/option.js index dab8598..ca9633e 100644 --- a/option.js +++ b/option.js @@ -23,5 +23,5 @@ document.getElementById('clear').onclick = function() { } document.getElementById('test').onclick = function() { - chrome.windows.create({url: '/run.html', type: 'popup'}); + chrome.windows.create({url: '/run.html', type: 'popup', height: 200, width: 200}); }; \ No newline at end of file diff --git a/run.html b/run.html index ba60820..fbc9600 100644 --- a/run.html +++ b/run.html @@ -1,5 +1,10 @@ - + + + + + + \ No newline at end of file diff --git a/run.js b/run.js index 5072be7..c365a0d 100644 --- a/run.js +++ b/run.js @@ -2,9 +2,21 @@ chrome.storage.local.get('debug', (debug) => { chrome.storage.local.get('start', (cmd) => { - chrome.terminalPrivate.onProcessOutput.addListener( (pid, type, output) => { + chrome.terminalPrivate.onProcessOutput.addListener( (pid, type, data) => { + let output + // on Chrome OS 100+, the onProcessOutput function will return an ArrayBuffer object instead of a string, + // we need to convert it to string if an ArrayBuffer is returned. + // + // For more info, see https://chromium-review.googlesource.com/c/apps/libapps/+/3470612/ + if (data instanceof ArrayBuffer) { + let dec = new TextDecoder('utf-8') + output = dec.decode(data) + } else { + output = data + } + // print terminal output in console - if (output.split("\n").includes("__ext_close__\r") && !debug.debug) { + if (output.match(/[^"]__ext_close__/) && !debug.debug) { // close terminal process chrome.terminalPrivate.closeTerminalProcess(pid); diff --git a/style.css b/style.css new file mode 100644 index 0000000..4b401e7 --- /dev/null +++ b/style.css @@ -0,0 +1,53 @@ +body { + height: 300px; + width: 300px; +} + +button, input, body { + font-family: Arial; + font-size: 15px; + margin-bottom: 3px; + margin-right: 2px; +} + +button { + background-color: #1a73e8; + color: white; + border-radius: 4px; + padding: 5px 10px; + border: none; + cursor: pointer; +} + +button:hover { + opacity: 0.9; +} + +input[type="text"] { + height: 25px; + border: 2px solid; + border-radius: 4px; +} + +@media (prefers-color-scheme: light) { + body, input[type="text"], textarea { + background-color: #fff; + color: #000 + } + input[type="text"], textarea { + border-color: rgb(0, 0, 0); + } +} + +@media (prefers-color-scheme: dark) { + body, input[type="text"], textarea { + background-color: #1e1e1e; + color: rgb(199, 199, 199); + } + input[type="text"], textarea { + border-color: rgb(199, 199, 199); + } + ::placeholder { + color: rgb(183, 183, 183); + } +}