Commit 4b597a89 authored by arthursonzogni's avatar arthursonzogni Committed by Commit Bot

ControllerServiceWorkerConnector: Remove DCHECK.

All of this happens when S13nServiceWorker is enabled.

The removed DCHECK was here to enforce that the ControllerServiceWorker
is not updated after container host connection has been closed.

A race condition can happen and triggers this DCHECK. After
CommitNavigation(), if the browser process is slow enough, a javascript
call can delete the iframe before the OnProviderCreated/SetController
round trip between the browser and the renderer has been made.

Deleting the iframe cause OnContainerHostConnectionClose() to be called. It
happens before receiving the SetController call.

┌───────┐           ┌────────┐
│Browser│           │Renderer│
└───┬───┘           └───┬────┘
    │CommitNavigation() │
    │──────────────────>│ (ResetController())
    │                   │
    │OnProviderCreated()│
    │<──────────────────│
    │─┐                 │─┐
    │ │                 │ │ Remove the iframe.
    │ │                 │ │ (OnContainerHostConnectionClose())
    │ │ Sleep...        │<┘
    │ │                 │
    │<┘                 │
    │                   │
    │  SetController()  │
    │──────────────────>│ (ResetController())
┌───┴───┐           ┌───┴────┐
│Browser│           │Renderer│
└───────┘           └────────┘

Note: The CL...
https://chromium-review.googlesource.com/897629
...shows adding a delay in the browser process causes several service
worker tests to fail.

Note: Doing SetController() on response to OnProviderCreated() is no really
necessary since thttps://goo.gl/UztxVi was implemented by
https://chromium-review.googlesource.com/742961.
This was kept to update UseCounter.

Bug: 808071
Change-Id: I46c4fd8e4db7eb4ed5e304bb1989d36d552567ad
Reviewed-on: https://chromium-review.googlesource.com/899143
Commit-Queue: Arthur Sonzogni <arthursonzogni@chromium.org>
Reviewed-by: default avatarMatt Falkenhagen <falken@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#534706}
parent 4f811848
......@@ -74,7 +74,8 @@ void ControllerServiceWorkerConnector::OnControllerConnectionClosed() {
void ControllerServiceWorkerConnector::ResetControllerConnection(
mojom::ControllerServiceWorkerPtr controller_ptr) {
DCHECK_NE(State::kNoContainerHost, state_);
if (state_ == State::kNoContainerHost)
return;
controller_service_worker_ = std::move(controller_ptr);
if (controller_service_worker_) {
state_ = State::kConnected;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment