Commit 1c81791b authored by Han Leon's avatar Han Leon Committed by Commit Bot

[ServiceWorker] Stop observing EmbeddedWorkerInstance once it's gone away

This CL adds a function OnDestroyed() into
EmbeddedWorkerInstance::Listener interface, so that
ServiceWorkerRegisterJob can stop observing EmbeddedWorkerInstance once
it's gone away.

BUG=856969,856330

Change-Id: I3acc9143f9ea2f8f24ab0aac465f29f97fdf9906
Reviewed-on: https://chromium-review.googlesource.com/1118006
Commit-Queue: Han Leon <leon.han@intel.com>
Reviewed-by: default avatarMatt Falkenhagen <falken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#571417}
parent 8b08f8db
......@@ -546,6 +546,8 @@ EmbeddedWorkerInstance::~EmbeddedWorkerInstance() {
DCHECK(status_ == EmbeddedWorkerStatus::STOPPING ||
status_ == EmbeddedWorkerStatus::STOPPED)
<< static_cast<int>(status_);
for (auto& observer : listener_list_)
observer.OnDestroyed();
devtools_proxy_.reset();
if (registry_->GetWorker(embedded_worker_id_))
registry_->RemoveWorker(process_id(), embedded_worker_id_);
......
......@@ -115,6 +115,9 @@ class CONTENT_EXPORT EmbeddedWorkerInstance
const base::string16& message,
int line_number,
const GURL& source_url) {}
// The instance is being deleted, so it's not safe to call any methods that
// may result in a virtual method call.
virtual void OnDestroyed() {}
};
~EmbeddedWorkerInstance() override;
......
......@@ -627,8 +627,8 @@ void ServiceWorkerRegisterJob::OnScriptLoaded() {
new_version()->embedded_worker()->ResumeAfterDownload();
}
void ServiceWorkerRegisterJob::OnDetached(EmbeddedWorkerStatus old_status) {
// The version's EmbeddedWorkerInstance may be getting destructed soon, so
void ServiceWorkerRegisterJob::OnDestroyed() {
// The version's EmbeddedWorkerInstance is getting destructed, so
// remove the observer to avoid a use-after-free. We expect to continue when
// the StartWorker() callback is called with failure.
// TODO(crbug.com/855852): Remove the EmbeddedWorkerInstance::Listener
......
......@@ -140,7 +140,7 @@ class ServiceWorkerRegisterJob : public ServiceWorkerRegisterJobBase,
// EmbeddedWorkerInstance::Listener implementation:
void OnScriptLoaded() override;
void OnDetached(EmbeddedWorkerStatus old_status) override;
void OnDestroyed() override;
void BumpLastUpdateCheckTimeIfNeeded();
......
......@@ -4714,9 +4714,7 @@ crbug.com/855222 [ Mac ] external/wpt/magnetometer/Magnetometer-iframe-access.ht
crbug.com/855055 [ Mac ] virtual/threaded/animations/interpolation/svg-stroke-dasharray-interpolation.html [ Pass Timeout ]
# Sheriff 2018-06-25
crbug.com/855860 [ Linux ] virtual/outofblink-cors/http/tests/fetch/serviceworker-proxied/thorough/redirect-password-base-https-other-https.html [ Pass Timeout ]
crbug.com/855816 [ Win7 ] virtual/stable/http/tests/navigation/rename-subframe-goback.html [ Pass Timeout ]
crbug.com/856330 external/wpt/service-workers/service-worker/about-blank-replacement.https.html [ Pass Timeout ]
# Sheriff 2018-06-26
crbug.com/856601 [ Linux ] external/wpt/FileAPI/idlharness.html [ Pass Timeout ]
......@@ -4730,11 +4728,7 @@ crbug.com/856601 [ Linux ] virtual/feature-policy-permissions/external/wpt/media
# Sheriff 2018-06-27
crbug.com/856955 [ Win10 Linux ] inspector-protocol/animation/animation-multiple-frames.js [ Failure Pass ]
crbug.com/856969 [ Win Linux Mac ] external/wpt/fetch/api/abort/serviceworker-intercepted.https.html [ Pass Timeout ]
crbug.com/856969 [ Win Linux Mac ] virtual/outofblink-cors/external/wpt/fetch/api/abort/serviceworker-intercepted.https.html [ Pass Timeout ]
# Sheriff 2018-06-28
crbug.com/857410 [ Linux ] virtual/outofblink-cors/external/wpt/service-workers/service-worker/about-blank-replacement.https.html [ Pass Timeout ]
crbug.com/857414 [ Win Mac10.10 Mac10.11 ] http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-webaudio.js [ Pass Timeout ]
crbug.com/857520 [ Mac Win7 ] external/wpt/accelerometer/Accelerometer-iframe-access.https.html [ Failure ]
crbug.com/856330 [ Linux Debug ] virtual/service-worker-servicification/external/wpt/service-workers/service-worker/about-blank-replacement.https.html [ Pass Timeout ]
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