1 Commits
Author SHA1 Message Date
sneak 6c3c0ca660 fix: the first wallet's first address is active as soon as it is added (closes #512)
check / check (push) Canceled after 0s
e2e / e2e-chrome (push) Canceled after 0s
e2e / e2e-firefox (push) Canceled after 0s
The popup picked an active address only when it opened, so after the first
wallet was created nothing was active until a reopen: Home had no headline,
and Send and Receive refused. Each of the three import paths on AddWallet now
makes the new wallet's first address active when no address is. When the
phrase or xprv scan then replaces the address list with one that leaves that
address out, the new list's first address becomes active and the background
is told, as when the user picks an address on Home. The address scan stand-in
in the popup test boot now answers in the real scan's shape, which the phrase
and xprv imports read.

Model: opus-5-5
2026-10-16 04:14:34 +00:00
3 changed files with 33 additions and 60 deletions
-8
View File
@@ -362,14 +362,6 @@ are outside `make check`. Neither opens the popup from the toolbar button: both
load its page in an ordinary tab, so what the toolbar popup itself adds, its load its page in an ordinary tab, so what the toolbar popup itself adds, its
size and its closing when it loses focus, is covered by neither. size and its closing when it loses focus, is covered by neither.
Each run builds its image under a tag of its own, `autistmask-e2e-chrome:` or
`autistmask-e2e-firefox:` followed by twelve random hex digits, so two clones
can run the same suite at once without one build taking the other's image away.
The run removes that image, and its container if one is still running, after the
suite passes or fails, on Ctrl-C, on `kill`, and when the terminal or SSH
session it runs in closes. A run killed outright (`kill -9`) cannot clean up:
its image stays under its tag until removed by hand with `docker image rm`.
### Chrome (`make test-e2e`) ### Chrome (`make test-e2e`)
`make test-e2e` builds `dist/chrome/` and drives the **real popup in a real `make test-e2e` builds `dist/chrome/` and drives the **real popup in a real
+17 -30
View File
@@ -22,29 +22,13 @@ set -eu
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)" ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)"
# Each run builds, runs and then removes an image under a tag of its own. IMAGE="$("$SCRIPT_DIR/projectname")-e2e-chrome"
# Under one tag shared by every run, a second clone's build moves the tag
# off this run's image, and the image store can then delete that untagged IIDFILE=""
# image before or while this run uses it. The tag is random rather than
# $$ because CI jobs share one docker daemon, but each job's container
# numbers its processes from scratch.
SUFFIX="$(od -An -N6 -tx1 /dev/urandom | tr -d ' \n')"
NAME="$("$SCRIPT_DIR/projectname")-e2e-chrome"
IMAGE="$NAME:$SUFFIX"
# Each docker run below uses this container name: docker run --rm returns
# only once its container is removed, so no run meets the one before it.
CONTAINER="$NAME-$SUFFIX"
cleanup() { cleanup() {
# After a third Ctrl-C docker's client exits whether or not the if [ -n "$IIDFILE" ]; then
# container has stopped, and a container still running keeps the image rm -f "$IIDFILE"
# in use.
if docker container inspect "$CONTAINER" >/dev/null 2>&1; then
docker container rm -f "$CONTAINER" >/dev/null
fi
# No image to remove when the build failed or was interrupted.
if docker image inspect "$IMAGE" >/dev/null 2>&1; then
docker image rm "$IMAGE" >/dev/null
fi fi
} }
@@ -56,16 +40,22 @@ main() {
exit 1 exit 1
fi fi
IIDFILE="$(mktemp)"
trap cleanup EXIT trap cleanup EXIT
# HUP: the terminal or SSH session running the suite closed. trap 'cleanup; exit 130' INT TERM
trap 'cleanup; exit 130' HUP INT TERM
echo "Building the Chrome e2e image (extension included)..." echo "Building the Chrome e2e image (extension included)..."
# --no-cache: the image build runs make build and its checks, and a # --no-cache: the image build runs make build and its checks, and a
# cached layer is a check that did not run. # cached layer is a check that did not run.
docker build --no-cache -t "$IMAGE" -f tests/e2e/Dockerfile . docker build --no-cache --iidfile "$IIDFILE" -t "$IMAGE" \
-f tests/e2e/Dockerfile .
echo "Running e2e suite in the pinned Playwright container..." echo "Running e2e suite in the pinned Playwright container..."
# The image is run by ID, not by tag: where two clones of this repo run
# the suite at once, the other build can move the tag between this
# build and this run, and the suite would then silently test the other
# checkout.
#
# --ipc=host: Chromium's shared-memory needs more than the default # --ipc=host: Chromium's shared-memory needs more than the default
# 64MB /dev/shm or renderers crash. # 64MB /dev/shm or renderers crash.
# HOME=/tmp: the image's root home is not a reliable place for the # HOME=/tmp: the image's root home is not a reliable place for the
@@ -85,12 +75,11 @@ main() {
# probe. The image is pinned by digest, so this can only ever bite # probe. The image is pinned by digest, so this can only ever bite
# on a deliberate bump. # on a deliberate bump.
docker run --rm \ docker run --rm \
--name "$CONTAINER" \
--ipc=host \ --ipc=host \
-e HOME=/tmp \ -e HOME=/tmp \
-e PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 \ -e PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 \
-e "E2E_TRACE_NETWORK=${E2E_TRACE_NETWORK:-0}" \ -e "E2E_TRACE_NETWORK=${E2E_TRACE_NETWORK:-0}" \
"$IMAGE" \ "$(cat "$IIDFILE")" \
node tests/e2e/run.js node tests/e2e/run.js
# Where chrome.storage.local lives, and what moves it: two unpacked loads # Where chrome.storage.local lives, and what moves it: two unpacked loads
@@ -104,10 +93,9 @@ main() {
# --host-resolver-rules=MAP * ~NOTFOUND so nothing it does can leave. # --host-resolver-rules=MAP * ~NOTFOUND so nothing it does can leave.
echo "Running the extension-id and storage-partition observations..." echo "Running the extension-id and storage-partition observations..."
docker run --rm \ docker run --rm \
--name "$CONTAINER" \
--ipc=host \ --ipc=host \
-e HOME=/tmp \ -e HOME=/tmp \
"$IMAGE" \ "$(cat "$IIDFILE")" \
node tests/e2e/storagePartition.js node tests/e2e/storagePartition.js
# Approvals left open for seven minutes in minimized windows, past the # Approvals left open for seven minutes in minimized windows, past the
@@ -117,10 +105,9 @@ main() {
# attached to. It reaches nothing but its own loopback server. # attached to. It reaches nothing but its own loopback server.
echo "Running the approvals left open for seven minutes..." echo "Running the approvals left open for seven minutes..."
docker run --rm \ docker run --rm \
--name "$CONTAINER" \
--ipc=host \ --ipc=host \
-e HOME=/tmp \ -e HOME=/tmp \
"$IMAGE" \ "$(cat "$IIDFILE")" \
node tests/e2e/slowApproval.js node tests/e2e/slowApproval.js
} }
+16 -22
View File
@@ -21,23 +21,13 @@ set -eu
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)" ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)"
# A tag and a container name of this run's own, as in script/test-e2e, IMAGE="$("$SCRIPT_DIR/projectname")-e2e-firefox"
# which says why.
SUFFIX="$(od -An -N6 -tx1 /dev/urandom | tr -d ' \n')" IIDFILE=""
NAME="$("$SCRIPT_DIR/projectname")-e2e-firefox"
IMAGE="$NAME:$SUFFIX"
CONTAINER="$NAME-$SUFFIX"
cleanup() { cleanup() {
# After a third Ctrl-C docker's client exits whether or not the if [ -n "$IIDFILE" ]; then
# container has stopped, and a container still running keeps the image rm -f "$IIDFILE"
# in use.
if docker container inspect "$CONTAINER" >/dev/null 2>&1; then
docker container rm -f "$CONTAINER" >/dev/null
fi
# No image to remove when the build failed or was interrupted.
if docker image inspect "$IMAGE" >/dev/null 2>&1; then
docker image rm "$IMAGE" >/dev/null
fi fi
} }
@@ -49,16 +39,22 @@ main() {
exit 1 exit 1
fi fi
IIDFILE="$(mktemp)"
trap cleanup EXIT trap cleanup EXIT
# HUP: the terminal or SSH session running the suite closed. trap 'cleanup; exit 130' INT TERM
trap 'cleanup; exit 130' HUP INT TERM
echo "Building the pinned Firefox e2e image (extension included)..." echo "Building the pinned Firefox e2e image (extension included)..."
# --no-cache: the image build runs make build and its checks, and a # --no-cache: the image build runs make build and its checks, and a
# cached layer is a check that did not run. # cached layer is a check that did not run.
docker build --no-cache -t "$IMAGE" -f tests/e2e/firefox/Dockerfile . docker build --no-cache --iidfile "$IIDFILE" -t "$IMAGE" \
-f tests/e2e/firefox/Dockerfile .
echo "Running the Firefox e2e suite..." echo "Running the Firefox e2e suite..."
# The image is run by ID, not by tag: where two clones of this repo run
# the suite at once, the other build can move the tag between this
# build and this run, and the suite would then silently test the other
# checkout.
#
# --shm-size=1g: Firefox needs more than the default 64MB /dev/shm. # --shm-size=1g: Firefox needs more than the default 64MB /dev/shm.
# --network none: the suite stubs nothing, so this is what keeps the # --network none: the suite stubs nothing, so this is what keeps the
# run offline and deterministic. The extension swallows its own # run offline and deterministic. The extension swallows its own
@@ -73,11 +69,10 @@ main() {
# "CanCreateUserNamespace() clone() failure: EPERM" on startup here; # "CanCreateUserNamespace() clone() failure: EPERM" on startup here;
# it is cosmetic and headless Firefox runs fine without it. # it is cosmetic and headless Firefox runs fine without it.
docker run --rm \ docker run --rm \
--name "$CONTAINER" \
--shm-size=1g \ --shm-size=1g \
--network none \ --network none \
-e HOME=/tmp \ -e HOME=/tmp \
"$IMAGE" \ "$(cat "$IIDFILE")" \
node tests/e2e/firefox/run.js dist/firefox node tests/e2e/firefox/run.js dist/firefox
# The install/uninstall/re-install property, against the packaged XPI # The install/uninstall/re-install property, against the packaged XPI
@@ -87,11 +82,10 @@ main() {
# and the suite above shares one session throughout. # and the suite above shares one session throughout.
echo "Running the Firefox re-install suite against the packaged XPI..." echo "Running the Firefox re-install suite against the packaged XPI..."
docker run --rm \ docker run --rm \
--name "$CONTAINER" \
--shm-size=1g \ --shm-size=1g \
--network none \ --network none \
-e HOME=/tmp \ -e HOME=/tmp \
"$IMAGE" \ "$(cat "$IIDFILE")" \
node tests/e2e/firefox/reinstall.js node tests/e2e/firefox/reinstall.js
} }