* Install missing apps when choosing defaults * Restore Chromium through browser installer * Trust default app installer status * Use full conditionals for install paths
107 lines
4.0 KiB
Bash
107 lines
4.0 KiB
Bash
#!/bin/bash
|
|
|
|
source "$(dirname "${BASH_SOURCE[0]}")/base-test.sh"
|
|
|
|
export PATH="$ROOT/bin:$PATH"
|
|
|
|
TMPDIR=""
|
|
|
|
cleanup() {
|
|
if [[ -n $TMPDIR && -d $TMPDIR ]]; then
|
|
rm -rf "$TMPDIR"
|
|
fi
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
require_command jq
|
|
require_command node
|
|
|
|
copy_url_id=$(node - <<'JS' "$ROOT/default/chromium/extensions/copy-url/manifest.json"
|
|
const crypto = require('crypto')
|
|
const fs = require('fs')
|
|
|
|
const manifest = JSON.parse(fs.readFileSync(process.argv[2], 'utf8'))
|
|
const hash = crypto.createHash('sha256').update(Buffer.from(manifest.key, 'base64')).digest()
|
|
const alphabet = 'abcdefghijklmnop'
|
|
let id = ''
|
|
|
|
for (const byte of hash.subarray(0, 16)) {
|
|
id += alphabet[byte >> 4]
|
|
id += alphabet[byte & 0x0f]
|
|
}
|
|
|
|
process.stdout.write(id)
|
|
JS
|
|
)
|
|
|
|
[[ $copy_url_id == "bgpiichlckmfanooecilcjemknkcpngb" ]] ||
|
|
fail "copy-url extension manifest has the stable id" "$copy_url_id"
|
|
pass "copy-url extension manifest has the stable id"
|
|
|
|
jq -e '
|
|
.manifest_version == 3 and
|
|
(.permissions | index("nativeMessaging")) and
|
|
(.permissions | index("notifications") | not) and
|
|
(.permissions | index("clipboardWrite") | not) and
|
|
(.permissions | index("offscreen") | not) and
|
|
.background.service_worker == "background-4.js"
|
|
' "$ROOT/default/chromium/extensions/copy-url/manifest.json" >/dev/null ||
|
|
fail "copy-url extension uses its native messaging host"
|
|
grep -q "sendNativeMessage('com.omarchy.copy_url'" \
|
|
"$ROOT/default/chromium/extensions/copy-url/background-4.js" ||
|
|
fail "copy-url extension sends URLs to its native messaging host"
|
|
pass "copy-url extension uses its native messaging host"
|
|
|
|
jq -e '.action != null' "$ROOT/default/chromium/extensions/copy-url/manifest.json" >/dev/null &&
|
|
grep -q 'action.onClicked' "$ROOT/default/chromium/extensions/copy-url/"background-*.js ||
|
|
fail "copy-url extension is clickable from the toolbar"
|
|
pass "copy-url extension is clickable from the toolbar"
|
|
|
|
TMPDIR=$(mktemp -d)
|
|
test_home="$TMPDIR/home"
|
|
native_manifest="$test_home/.config/chromium/NativeMessagingHosts/com.omarchy.copy_url.json"
|
|
|
|
HOME="$test_home" OMARCHY_PATH="$ROOT" omarchy-install-chromium-copy-url
|
|
|
|
[[ -f $native_manifest ]] || fail "copy-url native host installer creates fresh Chromium profile root"
|
|
jq -e --arg path "$ROOT/bin/omarchy-chromium-copy-url-host" '
|
|
.name == "com.omarchy.copy_url" and
|
|
.path == $path and
|
|
(.allowed_origins | index("chrome-extension://bgpiichlckmfanooecilcjemknkcpngb/"))
|
|
' "$native_manifest" >/dev/null || fail "copy-url native host manifest uses Omarchy host path and extension id"
|
|
pass "copy-url native host installer registers the stable extension id"
|
|
|
|
# Chromium ships in the base packages, so fresh installs do not go through
|
|
# omarchy-install-browser, and they mark every migration as already applied.
|
|
# The user install still has to register the host itself.
|
|
grep -q 'user/chromium.sh' "$ROOT/install/user/all.sh" ||
|
|
fail "user install runs the Chromium native messaging host setup"
|
|
|
|
fresh_home="$TMPDIR/fresh-install"
|
|
HOME="$fresh_home" OMARCHY_PATH="$ROOT" PATH="$ROOT/bin:$PATH" \
|
|
bash -euo pipefail -c 'source "$ROOT/install/user/chromium.sh"'
|
|
|
|
[[ -f $fresh_home/.config/chromium/NativeMessagingHosts/com.omarchy.copy_url.json ]] ||
|
|
fail "fresh install registers the copy-url native messaging host"
|
|
pass "fresh install registers the copy-url native messaging host"
|
|
|
|
copied_url=$(bash -c '
|
|
source "$1"
|
|
wl-copy() { cat; }
|
|
omarchy-notification-send() { :; }
|
|
copy_url "$2"
|
|
' bash "$ROOT/bin/omarchy-chromium-copy-url-host" 'https://example.test/path?q=one&name=two')
|
|
|
|
[[ $copied_url == "https://example.test/path?q=one&name=two" ]] ||
|
|
fail "copy-url native host writes the complete URL" "$copied_url"
|
|
pass "copy-url native host writes the complete URL"
|
|
|
|
native_reply=$(bash -c '
|
|
source "$1"
|
|
reply_copied true
|
|
' bash "$ROOT/bin/omarchy-chromium-copy-url-host" | od -An -v -tx1 | tr -d ' \n')
|
|
|
|
[[ $native_reply == "0f0000007b22636f70696564223a747275657d" ]] ||
|
|
fail "copy-url native host returns a framed success response" "$native_reply"
|
|
pass "copy-url native host returns a framed success response"
|