Commit c038460e authored by Matt Falkenhagen's avatar Matt Falkenhagen Committed by Commit Bot

shared worker: Simplify telling devtools about start and stop of worker.

SharedWorkerHost was calling WorkedDestroyed at three callsites using
two flags to determine when to do so. Use a RAII helper class to manage
the state instead.

One motiviation is fixing 830288 which is going to add more state to
SharedWorkerHost (creating a host before calling start), so when to call
WorkerDestroyed would get more complicated.

Bug: 830288
Change-Id: Ie3f135d925091518b172a4afcd8c475656aa9db4
Reviewed-on: https://chromium-review.googlesource.com/1013360Reviewed-by: default avatarHiroki Nakagawa <nhiroki@chromium.org>
Commit-Queue: Matt Falkenhagen <falken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#550958}
parent 464f3e51
...@@ -54,6 +54,31 @@ bool AllowIndexedDBOnIOThread(const GURL& url, ...@@ -54,6 +54,31 @@ bool AllowIndexedDBOnIOThread(const GURL& url,
} // namespace } // namespace
// RAII helper class for talking to SharedWorkerDevToolsManager.
class SharedWorkerHost::ScopedDevToolsHandle {
public:
ScopedDevToolsHandle(SharedWorkerHost* owner,
bool* out_pause_on_start,
base::UnguessableToken* out_devtools_worker_token)
: owner_(owner) {
SharedWorkerDevToolsManager::GetInstance()->WorkerCreated(
owner, out_pause_on_start, out_devtools_worker_token);
}
~ScopedDevToolsHandle() {
SharedWorkerDevToolsManager::GetInstance()->WorkerDestroyed(owner_);
}
void WorkerReadyForInspection() {
SharedWorkerDevToolsManager::GetInstance()->WorkerReadyForInspection(
owner_);
}
private:
SharedWorkerHost* owner_;
DISALLOW_COPY_AND_ASSIGN(ScopedDevToolsHandle);
};
SharedWorkerHost::SharedWorkerHost( SharedWorkerHost::SharedWorkerHost(
SharedWorkerServiceImpl* service, SharedWorkerServiceImpl* service,
std::unique_ptr<SharedWorkerInstance> instance, std::unique_ptr<SharedWorkerInstance> instance,
...@@ -72,8 +97,6 @@ SharedWorkerHost::SharedWorkerHost( ...@@ -72,8 +97,6 @@ SharedWorkerHost::SharedWorkerHost(
SharedWorkerHost::~SharedWorkerHost() { SharedWorkerHost::~SharedWorkerHost() {
UMA_HISTOGRAM_LONG_TIMES("SharedWorker.TimeToDeleted", UMA_HISTOGRAM_LONG_TIMES("SharedWorker.TimeToDeleted",
base::TimeTicks::Now() - creation_time_); base::TimeTicks::Now() - creation_time_);
if (!closed_ && !termination_message_sent_)
SharedWorkerDevToolsManager::GetInstance()->WorkerDestroyed(this);
} }
void SharedWorkerHost::Start( void SharedWorkerHost::Start(
...@@ -91,7 +114,7 @@ void SharedWorkerHost::Start( ...@@ -91,7 +114,7 @@ void SharedWorkerHost::Start(
// Register with DevTools. // Register with DevTools.
bool pause_on_start; bool pause_on_start;
base::UnguessableToken devtools_worker_token; base::UnguessableToken devtools_worker_token;
SharedWorkerDevToolsManager::GetInstance()->WorkerCreated( devtools_handle_ = std::make_unique<ScopedDevToolsHandle>(
this, &pause_on_start, &devtools_worker_token); this, &pause_on_start, &devtools_worker_token);
// Set up content settings interface. // Set up content settings interface.
...@@ -152,8 +175,7 @@ void SharedWorkerHost::TerminateWorker() { ...@@ -152,8 +175,7 @@ void SharedWorkerHost::TerminateWorker() {
if (termination_message_sent_) if (termination_message_sent_)
return; return;
termination_message_sent_ = true; termination_message_sent_ = true;
if (!closed_) devtools_handle_.reset();
SharedWorkerDevToolsManager::GetInstance()->WorkerDestroyed(this);
worker_->Terminate(); worker_->Terminate();
// Now, we wait to observe OnWorkerConnectionLost. // Now, we wait to observe OnWorkerConnectionLost.
} }
...@@ -186,13 +208,12 @@ void SharedWorkerHost::OnContextClosed() { ...@@ -186,13 +208,12 @@ void SharedWorkerHost::OnContextClosed() {
// 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;
if (!termination_message_sent_) devtools_handle_.reset();
SharedWorkerDevToolsManager::GetInstance()->WorkerDestroyed(this);
} }
void SharedWorkerHost::OnReadyForInspection() { void SharedWorkerHost::OnReadyForInspection() {
if (!closed_ && !termination_message_sent_) if (devtools_handle_)
SharedWorkerDevToolsManager::GetInstance()->WorkerReadyForInspection(this); devtools_handle_->WorkerReadyForInspection();
} }
void SharedWorkerHost::OnScriptLoaded() { void SharedWorkerHost::OnScriptLoaded() {
......
...@@ -88,6 +88,7 @@ class SharedWorkerHost : public mojom::SharedWorkerHost, ...@@ -88,6 +88,7 @@ class SharedWorkerHost : public mojom::SharedWorkerHost,
bool IsAvailable() const; bool IsAvailable() const;
private: private:
class ScopedDevToolsHandle;
struct ClientInfo { struct ClientInfo {
ClientInfo(mojom::SharedWorkerClientPtr client, ClientInfo(mojom::SharedWorkerClientPtr client,
int connection_request_id, int connection_request_id,
...@@ -135,6 +136,7 @@ class SharedWorkerHost : public mojom::SharedWorkerHost, ...@@ -135,6 +136,7 @@ class SharedWorkerHost : public mojom::SharedWorkerHost,
bool termination_message_sent_ = false; bool termination_message_sent_ = false;
bool closed_ = false; bool closed_ = false;
const base::TimeTicks creation_time_; const base::TimeTicks creation_time_;
std::unique_ptr<ScopedDevToolsHandle> devtools_handle_;
// This is the set of features that this worker has used. // This is the set of features that this worker has used.
std::set<blink::mojom::WebFeature> used_features_; std::set<blink::mojom::WebFeature> used_features_;
......
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