Deeplink Test — MOB-962

Открывай ссылки тапом внутри in-app Browse. У каждой — ожидаемый результат и задействованный путь кода.

A · Navigation /d/ — https

/d/live
Открывает Live-таб. Browse остаётся на этой странице в фоне.
.linkActivated → canHandle → liveTab
/d/browse?url=…
Грузит указанный url в текущем Browse-табе, без пересоздания вебвью (edge-case из тикета).
browseTab(url:)
/d/profile
Открывает Profile-таб.
profileTab

B · Navigation — custom scheme (host-based)

plasmastreaming://live
Тот же результат, что и https /d/live. Проверяет ветку scheme==app → матч по host.
Scheme.app gate + host contains
plasmastreaming://browse?url=…
Грузит url в текущем Browse-табе.
plasmastreaming://profile
Открывает Profile-таб.

C · Quick-setup /c/ — inline params (без сети)

/c/?l&is&k&w&ws
Открывает диалог Create Profile, предзаполненный этими параметрами. Данные локальные, без запроса.
DirectDeeplinkParsingStrategy
plasmastreaming://c/?l&is&k&w&ws
Custom-scheme вариант того же.

D · Quick-setup /c/ — remote setup+token

Этот кейс требует реальных setup+token, поэтому в публичную страницу ссылка не вынесена. Проверять локально: собери URL вида
https://plasmastreaming.com/c/?setup=<URL-encoded setup>&token=<token>
и открой его в Browse (или через window.location с локального файла). Ожидание — Create Profile, как из внешнего браузера.
RemoteDeeplinkParsingStrategy (network)

E · Edge cases

/d/unknown — неизвестный путь
Не матчится парсером → НЕ перехватывается → грузится как обычная страница. Главное: не белый экран, вебвью живой.
canHandle=false → allow load
plasmastreaming.com/ — не-диплинк на своём домене
Host совпадает, но парсер не матчит → грузится как обычная страница в вебвью.
example.com — чужой домен
Регресс-гард: НЕ перехватывается, обычная загрузка в вебвью.
host gate → false

F · Способ навигации (покрытие реализации)

target="_blank" → /d/live
Новое окно. Идёт через UIDelegateBridge.createWebViewWith — перехват независимо от типа навигации.
createWebViewWith
Программное новое окно → тоже createWebViewWith → Profile-таб.
createWebViewWith
Известный баг: JS-редирект даёт navigationType .other, а делегат перехватывает только .linkActivated → сейчас уходит в 404 на сайте. После фикса должен открывать Live-таб.
⚠ repro бага

Chat overlay

Те же ссылки из чат-оверлея на лайв-экране должны вести себя так же (перехват в ChatOverlayViewController, тоже только .linkActivated). Проверь хотя бы /d/live и /c/… оттуда.