Firefox 154: realmDestroyed для worker — как не потерять событие WebDriver BiDi. Обратимый test/control, матрица состояний, stop-line и обезличенный пакет поддержки.
Короткий ответ и граница вывода
Если наблюдается ситуация «клиент BiDi ждёт закрытие worker, но не понимает, исчез realm или оборвалась подписка», не начинайте с обновления настроек на рабочем устройстве. Официально подтверждённая граница здесь узкая: Firefox 154 отправляет realmDestroyed при уничтожении worker realm. Проведите опыт «страница создаёт один dedicated worker, получает ready marker и затем вызывает terminate» и отдельно контроль «создание и закрытие второго worker при неизменной подписке и отдельном realm id». Такой тест отвечает только на намерение «как проверить realmDestroyed для dedicated worker в Firefox 154 и отличить закрытие worker от потери подписки». Он не доказывает массовость симптома, качество всего выпуска, готовность приложения к публикации или причину любого похожего сбоя. До запуска запишите ожидаемые состояния и версию Firefox 154; после опыта верните исходное состояние.
Наблюдаемый симптом и измерительная таблица
Симптом считается воспроизводимым, когда заполнена таблица «realm id × ready time × terminate time × realmDestroyed time × порядок событий». Каждая строка должна соответствовать одному заранее названному состоянию, а не впечатлению «работает/не работает». Предмет проверки: клиент BiDi ждёт закрытие worker, но не понимает, исчез realm или оборвалась подписка. Не объединяйте его с соседними проблемами сети, профиля, разрешений, рендера или автоматики. Если показатель нельзя получить без токенов, содержимого сообщений, персональных путей либо реальных аккаунтов, fixture нужно упростить. Пустое значение отмечается как неизвестное, а не превращается в удобное подтверждение гипотезы.
Изолированный test и независимый control
Test строится строго так: страница создаёт один dedicated worker, получает ready marker и затем вызывает terminate. Control выполняется отдельно: создание и закрытие второго worker при неизменной подписке и отдельном realm id. Обе ветки получают одинаковые версии, locale, временной лимит и нейтральные синтетические данные. Сначала снимите A, затем один раз B, после cleanup повторите A2. Одновременная смена API, политики, устройства, формы входа и порядка событий уничтожает причинность. Запрещено переносить в стенд рабочие cookies, IP, сообщения, контакты, TLS-секреты, device identifiers или полный environment.
Порядок безопасного опыта
Шаг 1: зафиксируйте baseline и подтвердите boundary «Firefox 154 отправляет realmDestroyed при уничтожении worker realm». Шаг 2: выполните control «создание и закрытие второго worker при неизменной подписке и отдельном realm id» и заполните только «realm id × ready time × terminate time × realmDestroyed time × порядок событий». Шаг 3: запустите test «страница создаёт один dedicated worker, получает ready marker и затем вызывает terminate» с конечным timeout. Шаг 4: удалите временные объекты, закройте процессы, listeners, окна или соединения и повторите A2. Шаг 5: сравните не скриншоты целиком, а заранее выбранные поля. Если A2 отличается от A, состояние загрязнено: остановитесь, очистите только тестовый профиль и не повторяйте B до восстановления baseline.
Дерево решения без догадок
Правило чтения результата: оба realm закрылись по порядку — lifecycle подтверждён; нет события только у test — сохраняем trace; нет у обоих — проверяем subscription. Дополнительно различайте четыре исхода. Test совпал с документированной границей, а control чист — подтверждён узкий контракт. Оба падают — неисправен fixture или среда. Test не воспроизводится при чистом control — вывод остаётся неопределённым, это не «исправлено». A2 расходится с A — опыт оставил состояние. Ни один исход не разрешает заявлять популярность проблемы, переносить вывод на иной browser build, OEM, driver, managed policy или production traffic.
Красные флаги и stop-line
Жёсткое условие остановки: не считать отсутствие realm в списке доказательством получения lifecycle-события. Также прекращайте тест при запросе повышенных прав, появлении реальных пользовательских данных, невозможности закрыть ресурс, внешнем соединении вне заявленного fixture, бесконечном retry, crash без сохранённого минимального trace либо изменении системного default. Не лечите неясность отключением TLS validation, выдачей широкого permission, постоянным preference, длинным sleep или сбросом рабочего профиля. Безопасный нулевой вывод полезнее вымышленной причины.
Минимальный пакет для поддержки
Для воспроизведения достаточно набора: BiDi subscribe command, два realm id, монотонные timestamps и версии Firefox/driver. Добавьте Moscow timestamp, точное имя release/build, одну таблицу A/B/A2 и ожидаемую boundary «Firefox 154 отправляет realmDestroyed при уничтожении worker realm». Удалите домашние пути, account names, hostname, содержимое контактов и сообщений, заголовки авторизации, IP, cookies, key material и полные дампы. Получатель должен суметь проверить один state transition без доступа к вашей базе или устройству. Если не может, пакет либо избыточен, либо не содержит нужной измеримой границы.
Протокол T17-03: самостоятельная практическая ценность
Этот URL отвечает на один самостоятельный вопрос: «как проверить realmDestroyed для dedicated worker в Firefox 154 и отличить закрытие worker от потери подписки». Его неделимый паспорт: боль «клиент BiDi ждёт закрытие worker, но не понимает, исчез realm или оборвалась подписка»; официальная граница «Firefox 154 отправляет realmDestroyed при уничтожении worker realm»; fixture «страница создаёт один dedicated worker, получает ready marker и затем вызывает terminate»; матрица «realm id × ready time × terminate time × realmDestroyed time × порядок событий»; независимый control «создание и закрытие второго worker при неизменной подписке и отдельном realm id». Сначала выполняется test, затем применяется правило «оба realm закрылись по порядку — lifecycle подтверждён; нет события только у test — сохраняем trace; нет у обоих — проверяем subscription», а при риске действует stop-line «не считать отсутствие realm в списке доказательством получения lifecycle-события». Результат не заменяется общим uptime, одной фотографией, exit code или фразой «после обновления стало лучше». Пакет ограничен полями «BiDi subscribe command, два realm id, монотонные timestamps и версии Firefox/driver». После cleanup снова заполните одну строку baseline и подтвердите отсутствие оставшегося состояния. Именно связка уникальной боли, измерителя, контроля, дерева решения и права остановиться отличает T17-03 от соседних материалов про Firefox 154. Карточка наблюдения firefox-154-webdriver-realm-destroyed-worker: Firefox 154 отправляет realmDestroyed при уничтожении worker realm; клиент BiDi ждёт закрытие worker, но не понимает, исчез realm или оборвалась подписка; страница создаёт один dedicated worker, получает ready marker и затем вызывает terminate; realm id × ready time × terminate time × realmDestroyed time × порядок событий; BiDi subscribe command, два realm id, монотонные timestamps и версии Firefox/driver.
Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные не использовались.
Источники и проверка
- Firefox 154 for developers проверено 2026-08-29
- Mozilla Bug 2018154 проверено 2026-08-29
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.