| Index: content/browser/shared_worker/shared_worker_service_impl.cc
|
| diff --git a/content/browser/shared_worker/shared_worker_service_impl.cc b/content/browser/shared_worker/shared_worker_service_impl.cc
|
| index 212028856ad7e3de6af1aa5fd53fb2fa76f40dbc..7941f4bbb5a136c78503d22a69d7497ca1b700b9 100644
|
| --- a/content/browser/shared_worker/shared_worker_service_impl.cc
|
| +++ b/content/browser/shared_worker/shared_worker_service_impl.cc
|
| @@ -157,6 +157,17 @@ class SharedWorkerServiceImpl::SharedWorkerPendingInstance {
|
| requests_.erase(to_remove, requests_.end());
|
| }
|
|
|
| + void RemoveRequestFromFrame(int process_id, int frame_id) {
|
| + auto to_remove = std::remove_if(
|
| + requests_.begin(), requests_.end(),
|
| + [process_id,
|
| + frame_id](const std::unique_ptr<SharedWorkerPendingRequest>& r) {
|
| + return r->render_process_id == process_id &&
|
| + r->render_frame_route_id == frame_id;
|
| + });
|
| + requests_.erase(to_remove, requests_.end());
|
| + }
|
| +
|
| void RegisterToSharedWorkerHost(SharedWorkerHost* host) {
|
| for (const auto& request : requests_) {
|
| host->AddFilter(request->filter, request->route_id);
|
| @@ -439,6 +450,23 @@ void SharedWorkerServiceImpl::OnSharedWorkerMessageFilterClosing(
|
| pending_instances_.erase(to_remove);
|
| }
|
|
|
| +void SharedWorkerServiceImpl::RenderFrameDetached(int render_process_id,
|
| + int render_frame_id) {
|
| + ScopedWorkerDependencyChecker checker(this);
|
| + for (const auto& it : worker_hosts_) {
|
| + it.second->RenderFrameDetached(render_process_id, render_frame_id);
|
| + }
|
| +
|
| + std::vector<int> remove_pending_instance_list;
|
| + for (const auto& it : pending_instances_) {
|
| + it.second->RemoveRequestFromFrame(render_process_id, render_frame_id);
|
| + if (it.second->requests()->empty())
|
| + remove_pending_instance_list.push_back(it.first);
|
| + }
|
| + for (int to_remove : remove_pending_instance_list)
|
| + pending_instances_.erase(to_remove);
|
| +}
|
| +
|
| void SharedWorkerServiceImpl::NotifyWorkerDestroyed(int worker_process_id,
|
| int worker_route_id) {
|
| FOR_EACH_OBSERVER(WorkerServiceObserver,
|
|
|