Commit 391215e2 authored by horo@chromium.org's avatar horo@chromium.org

Call EmbeddedWorkerDevToolsManager::WorkerDestroyed from SharedWorkerHost::WorkerContextClosed.

If SharedWorkerHost's closed flag is true SharedWorkerServiceImpl::FindSharedWorkerHost() doesn't match the host.
So two SharedWorkerHosts of same SharedWorkerInstance could be created.
But EmbeddedWorkerDevToolsManager can't handle two SharedWorkerHosts of same SharedWorkerInstance.
So we have to remove instance from EmbeddedWorkerDevToolsManager when WorkerContextClosed is called.

BUG=374387

Review URL: https://codereview.chromium.org/287303002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@271463 0039d316-1c4b-4281-b951-d872f2087c98
parent 343bd7a3
...@@ -31,14 +31,27 @@ void WorkerCrashCallback(int render_process_unique_id, int render_frame_id) { ...@@ -31,14 +31,27 @@ void WorkerCrashCallback(int render_process_unique_id, int render_frame_id) {
host->delegate()->WorkerCrashed(host); host->delegate()->WorkerCrashed(host);
} }
void NotifyWorkerScriptLoadedOnUI(int worker_process_id, int worker_route_id) { void NotifyWorkerContextStarted(int worker_process_id, int worker_route_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
base::Bind(
NotifyWorkerContextStarted, worker_process_id, worker_route_id));
return;
}
EmbeddedWorkerDevToolsManager::GetInstance()->WorkerContextStarted( EmbeddedWorkerDevToolsManager::GetInstance()->WorkerContextStarted(
worker_process_id, worker_route_id); worker_process_id, worker_route_id);
} }
void NotifyWorkerDestroyedOnUI(int worker_process_id, int worker_route_id) { void NotifyWorkerDestroyed(int worker_process_id, int worker_route_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
base::Bind(NotifyWorkerDestroyed, worker_process_id, worker_route_id));
return;
}
EmbeddedWorkerDevToolsManager::GetInstance()->WorkerDestroyed( EmbeddedWorkerDevToolsManager::GetInstance()->WorkerDestroyed(
worker_process_id, worker_route_id); worker_process_id, worker_route_id);
} }
...@@ -78,11 +91,8 @@ SharedWorkerHost::~SharedWorkerHost() { ...@@ -78,11 +91,8 @@ SharedWorkerHost::~SharedWorkerHost() {
parent_iter->render_frame_id())); parent_iter->render_frame_id()));
} }
} }
BrowserThread::PostTask( if (!closed_)
BrowserThread::UI, NotifyWorkerDestroyed(worker_process_id_, worker_route_id_);
FROM_HERE,
base::Bind(
&NotifyWorkerDestroyedOnUI, worker_process_id_, worker_route_id_));
SharedWorkerServiceImpl::GetInstance()->NotifyWorkerDestroyed( SharedWorkerServiceImpl::GetInstance()->NotifyWorkerDestroyed(
worker_process_id_, worker_route_id_); worker_process_id_, worker_route_id_);
} }
...@@ -154,6 +164,7 @@ void SharedWorkerHost::WorkerContextClosed() { ...@@ -154,6 +164,7 @@ void SharedWorkerHost::WorkerContextClosed() {
// being sent to the worker (messages can still be sent from the worker, // being sent to the worker (messages can still be sent from the worker,
// for exception reporting, etc). // for exception reporting, etc).
closed_ = true; closed_ = true;
NotifyWorkerDestroyed(worker_process_id_, worker_route_id_);
} }
void SharedWorkerHost::WorkerContextDestroyed() { void SharedWorkerHost::WorkerContextDestroyed() {
...@@ -166,11 +177,7 @@ void SharedWorkerHost::WorkerContextDestroyed() { ...@@ -166,11 +177,7 @@ void SharedWorkerHost::WorkerContextDestroyed() {
void SharedWorkerHost::WorkerScriptLoaded() { void SharedWorkerHost::WorkerScriptLoaded() {
UMA_HISTOGRAM_TIMES("SharedWorker.TimeToScriptLoaded", UMA_HISTOGRAM_TIMES("SharedWorker.TimeToScriptLoaded",
base::TimeTicks::Now() - creation_time_); base::TimeTicks::Now() - creation_time_);
BrowserThread::PostTask( NotifyWorkerContextStarted(worker_process_id_, worker_route_id_);
BrowserThread::UI,
FROM_HERE,
base::Bind(
&NotifyWorkerScriptLoadedOnUI, worker_process_id_, worker_route_id_));
} }
void SharedWorkerHost::WorkerScriptLoadFailed() { void SharedWorkerHost::WorkerScriptLoadFailed() {
......
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