DescriptionPrevent calling didReceiveData()/didFinishLoading() after didFailAccessControlCheck()
In some cases DocumentThreadableLoader calls m_client->didReceiveData() or
didFinishLoading() after m_client->didFailAccessControlCheck().
WorkerLoaderClientBridgeSyncHelper assumes no calls are made to
ThreadableLoaderClient after didFailAccessControlCheck(), and this mismatch
results in a race condition.
This CL fixes this by omitting calls to didReceiveData()/didFinishLoading()
after didFailAccessControlCheck() using |m_accessControlCheckFailed| flag.
handlePreflightFailure() is called instead of didFailAccessControlCheck() to
ensure |m_accessControlCheckFailed| and |m_actualRequest| are properly managed.
This CL also makes WorkerLoaderClientBridgeSyncHelper to ASSERT/ignore did*()
calls after any of didFail*() or didFinishLoading() is called.
This explicitly states the assumptions of WorkerLoaderClientBridgeSyncHelper,
and prevents possible race conditions as defensive programming.
BUG=421627
Committed: https://src.chromium.org/viewvc/blink?view=rev&revision=189418
Patch Set 1 #Patch Set 2 : fix expectation. #Patch Set 3 : More assert. #
Total comments: 8
Patch Set 4 : Rename, comment fix. #Patch Set 5 : Add FIXME. Use RELEASE_ASSERT. #
Total comments: 2
Patch Set 6 : Comment fix. #
Messages
Total messages: 15 (2 generated)
|