Commit graph

19 commits

Author SHA1 Message Date
Copilot
aa84692df3
Make USE_NEW_DESIGN deterministic by cache-busting config.json in design switcher (#858)
Some checks failed
Docker / e2e (push) Has been cancelled
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Has been cancelled
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Has been cancelled
* Initial plan

* Fix design switch config caching for USE_NEW_DESIGN

Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>
2026-09-27 09:50:52 +02:00
Copilot
be1e0a0daa
Fix mixed-content server selection (#855)
Some checks failed
Docker / e2e (push) Has been cancelled
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Has been cancelled
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Has been cancelled
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>
2026-09-12 18:44:43 +02:00
Copilot
449e9962ed
Keep the modern mobile gauge row in view when a test starts (#854)
Some checks are pending
Docker / e2e (push) Waiting to run
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Blocked by required conditions
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Blocked by required conditions
* Initial plan

* fix: keep mobile gauge visible on start

Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>

* refactor: clarify mobile gauge scroll helper

Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>

* fix: defer mobile gauge scroll until running render

Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>
2026-09-12 15:35:39 +02:00
Copilot
fa2e28626a
Prevent stability ping values from freezing on long tests (#851)
* Initial plan

* Clear stability ping resource timings

Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>

* Add CORS headers to route fulfillment in stability test

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>
Co-authored-by: sstidl <sstidl@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-09-12 12:40:56 +02:00
marcel1702
0603db7b37
Don't force the IE11 upload workaround on Safari (#847)
* Stop forcing the IE11 upload workaround on Safari via user agent sniffing

The upload test reported low and unstable numbers on Safari (macOS and
iOS) while the download test was correct.

Cause: the "start" handler in speedtest_worker.js matched every Safari
user agent and set settings.forceIE11Workaround = true. In ulTest() that
flag selects a fundamentally different, less accurate measurement path:
instead of sending one xhr_ul_blob_megabytes blob (20 MB by default) and
accumulating event.loaded from upload.onprogress, it sends a stream of
256 KB requests and adds a fixed 256 KB to totLoaded on each onload.
Progress is therefore quantised to whole requests and each request pays
a full round trip before the next one starts, so on fast or high-latency
links the measured speed is both too low and noisy.

The workaround is not needed. Its comment claims it is only required for
MPOT, but the block never checked settings.mpot. The same block also
excludes crios and fxios, which on iOS run the very same WebKit
networking stack as Safari, so the user agent test cannot have been
guarding an engine-level bug in the first place. Current WebKit
implements xhr.upload.onprogress, and the existing feature detection in
ulTest() (the try/catch that probes xhr.upload.onprogress) already
selects the workaround for browsers that genuinely lack it, without
sniffing.

Changes:
- Remove the Safari user agent block. Safari now takes the regular
  upload path, the same one Chrome and Firefox on iOS already took.
- Guard the Edge and PlayStation 4 blocks with
  typeof s.forceIE11Workaround === "undefined", matching how the other
  quirks avoid clobbering explicitly passed settings. Previously an
  explicit forceIE11Workaround: false in the start command was silently
  overwritten, so the workaround was not switchable from outside the
  worker. Default behaviour for those browsers is unchanged.
- Add tests/e2e/worker-browser-quirks.spec.js, which loads the worker
  under spoofed user agents and asserts the resolved settings.
- Update doc.md so Safari is no longer listed as affected.

The Edge and PlayStation 4 blocks are deliberately left outside the
enable_quirks condition: those browsers have no working
upload.onprogress, so running them with enable_quirks: false would
report 0 or Fail rather than a less precise number.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S1bUKsok59shM69PwLMMRM

* docs: describe both detection paths for the IE11 upload workaround

The previous wording claimed affected browsers are detected by checking
whether xhr.upload is usable "not by sniffing the user agent", but Edge
and the PlayStation 4 browser are still matched by user agent regex.
Both mechanisms exist and for different reasons: feature detection only
sees a missing xhr.upload object, while those two expose the object and
simply never fire its events.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S1bUKsok59shM69PwLMMRM

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-09-12 12:00:48 +02:00
Copilot
bd8501ad13
Allow frontend Docker mode to use SERVER_LIST_URL without a mounted /servers.json (#849)
Some checks are pending
Docker / e2e (push) Waiting to run
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Blocked by required conditions
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Blocked by required conditions
* Initial plan

* Fix SERVER_LIST_URL frontend startup

Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>

* test(e2e): serve remote server-list fixture with CORS

* test(e2e): reject malformed static-server paths

* fix: support SERVER_LIST_URL in classic frontend

* test: preserve existing mode test formatting

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>
Co-authored-by: Stefan Stidl <sti-github@stidl.com>
2026-09-12 00:30:17 +02:00
sstidl
b8d47b24cd
fix: constrain shared result image on mobile (#850)
Some checks are pending
Docker / e2e (push) Waiting to run
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Blocked by required conditions
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Blocked by required conditions
* fix: constrain shared result image on mobile

* test: cover share dialog image height

Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>

* test: cover share dialog image dimensions

---------

Co-authored-by: Stefan Stidl <sti-github@stidl.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>
2026-09-11 20:29:20 +02:00
sstidl
bdc1521e14 test(e2e): verify static modern frontend assets 2026-08-11 08:43:31 +02:00
sstidl
54179567ac test(e2e): cover Alpine modern frontend settings 2026-08-11 07:50:16 +02:00
sstidl
f4acb0d82d
Merge pull request #779 from librespeed/chore/playwright-mode-test-plan
Chore/playwright mode test plan
2026-07-28 07:25:39 +02:00
Stefan Stidl
320b908864 Add stability feature Playwright coverage, fix Server selection start race
Some checks failed
Docker / e2e (push) Has been cancelled
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Has been cancelled
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Has been cancelled
2026-05-16 20:02:21 +02:00
Copilot
ecb2a0e736
Add Docker TAGLINE env customization for modern frontend slogan (#794)
* Initial plan

* Add Docker TAGLINE env customization for modern UI slogan

Agent-Logs-Url: https://github.com/librespeed/speedtest/sessions/e1da6e0e-5194-453d-bffb-961ed782e215

Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>

* Refine TAGLINE replacement and expand E2E coverage

Agent-Logs-Url: https://github.com/librespeed/speedtest/sessions/e1da6e0e-5194-453d-bffb-961ed782e215

Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>

* Fix TAGLINE sed delimiter and add apostrophe tagline E2E test

- Switch TAGLINE sed from '#' to '/' delimiter so html_escape'd
  apostrophes (&#39;) don't break the sed expression
- Add standalone-apostrophe Docker service with TAGLINE="It'd rather be fast!"
- Add standaloneApostrophe URL (port 18186) to env.js
- Add E2E test asserting the apostrophe tagline renders correctly

Agent-Logs-Url: https://github.com/librespeed/speedtest/sessions/ebe265a8-4b1e-49b5-959a-66133ea0ab3a

Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sstidl <12804296+sstidl@users.noreply.github.com>
2026-04-18 23:06:37 +02:00
sstidl
18b46600d0
docker: apply TITLE to modern page heading (#788)
Co-authored-by: Stefan Stidl <sti-github@stidl.com>
2026-04-14 10:12:49 +02:00
sstidl
d18552fe8a
docker: restore TITLE env handling in entrypoint (#787)
* docker: restore TITLE env handling in entrypoint

* docker: escape TITLE for HTML output

* test(e2e): cover TITLE with umlauts and quotes

---------

Co-authored-by: Stefan Stidl <sti-github@stidl.com>
2026-04-14 09:06:03 +02:00
Stefan Stidl
ab86aab10f http fetch timeout fix 2026-04-12 15:40:32 +02:00
Stefan Stidl
aa332c2528 test(e2e): make global setup readiness check node14-compatible 2026-04-12 15:20:12 +02:00
Stefan Stidl
48dcde3d1c test(e2e): fix backend-testpoint fixture port 2026-04-12 15:20:12 +02:00
sstidl
3bd9e1b7af
chore/playwright mode test plan (#778)
* ci: make standalone playwright manual and document e2e gating

* docs(test): refine playwright plan with implemented CI strategy

---------

Co-authored-by: Stefan Stidl <stefan.stidl@ffg.at>
2026-04-12 15:15:14 +02:00
sstidl
49f54a5c3c
add e2e testing (#777)
* docs(test): add playwright modes test plan

* test(e2e): add playwright phase-1 mode coverage

* test(e2e): add classic standalone no-server regression

* ci(docker): gate image build on playwright e2e

* ci(e2e): run on master push and allow manual dispatch

---------

Co-authored-by: Stefan Stidl <stefan.stidl@ffg.at>
2026-04-12 14:59:54 +02:00