fix(broadcaster): echo-prevention by full URL, not peek host
The setExtensionBroadcaster echo-prevention compared the source
URL peek host (the tile id) against each window peek host. That
correctly excluded the sender from receiving its own message but
also excluded every OTHER window of the same feature tile.
A feature with both a background and a window entry (websearch is
the canonical case: peek://websearch/background.html plus
peek://websearch/home.html) has two BrowserWindows sharing the
peek host websearch. The host-level compare treated them as the
same sender and silently dropped every cross-window round-trip
between them. Home publishes websearch:engine-request, bg never
receives. Bg publishes websearch:engines-list, home never receives.
Same class of bug as the earlier webview-guest reach fix.
Fix: compare the full URL (peek://websearch/home.html) against
the full source address (peek://websearch/home). The only URL
that matches the source is the exact originating window, so
sibling entries of the same feature receive their events while
echoes are still suppressed. Applied to both the BrowserWindow
pass and the webview-guest pass. Removed the no-longer-used
peekHost helper.
Also flags a follow-up in docs/tasks.md: websearch should merge
its background tile into the home window entirely, using the
single-file tiles (resident true) model. Cross-window pubsub
within one feature is fragile. This fix unblocks the broadcaster
but the root design issue is still there.
Tests: HUD Extension 10/10 still passing (the fix is stricter
but equivalent for their case since HUD widgets have distinct
URLs already). Websearch cluster (3 tests) still failing.
Different root cause: the websearch bg tile is receiving
tile:shutdown mid-test and tearing down its subscriptions
before home can round-trip. Separate bug, out of scope here.