Files
omarchy/test/shell.d/chromium-copy-url-test.sh
T
David Heinemeier HanssonandClaude Fable 5.1 e8e92c5092 Register the Chromium native messaging hosts for Brave Origin (#10292)
Brave Origin keeps its profile under ~/.config/BraveSoftware/Brave-Origin
rather than Brave-Browser, so the Copy URL and Download Video installers
never wrote their host manifests there. The extensions loaded but the
shortcuts did nothing. Add the Origin profile roots and rerun both
installers through a migration.

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-05 10:17:35 +02:00

111 lines
4.2 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"
[[ -f $test_home/.config/BraveSoftware/Brave-Origin/NativeMessagingHosts/com.omarchy.copy_url.json ]] ||
fail "copy-url native host installer covers Brave Origin"
pass "copy-url native host installer covers Brave Origin"
# 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"