Index: content/browser/service_worker/service_worker_version.cc |
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc |
index 470bc86f5ee2b94066316433b3d34c1670103fe0..621f6cf92e14b334b98fdfcb68dca7571e8840d2 100644 |
--- a/content/browser/service_worker/service_worker_version.cc |
+++ b/content/browser/service_worker/service_worker_version.cc |
@@ -28,6 +28,7 @@ |
#include "content/browser/message_port_service.h" |
#include "content/browser/service_worker/embedded_worker_instance.h" |
#include "content/browser/service_worker/embedded_worker_registry.h" |
+#include "content/browser/service_worker/embedded_worker_status.h" |
#include "content/browser/service_worker/service_worker_client_utils.h" |
#include "content/browser/service_worker/service_worker_context_core.h" |
#include "content/browser/service_worker/service_worker_context_wrapper.h" |
@@ -103,7 +104,7 @@ void RunTaskAfterStartWorker( |
error_callback.Run(status); |
return; |
} |
- if (version->running_status() != ServiceWorkerVersion::RUNNING) { |
+ if (version->running_status() != EmbeddedWorkerStatus::RUNNING) { |
// We've tried to start the worker (and it has succeeded), but |
// it looks it's not running yet. |
NOTREACHED() << "The worker's not running after successful StartWorker"; |
@@ -326,8 +327,10 @@ ServiceWorkerVersion::~ServiceWorkerVersion() { |
if (context_) |
context_->RemoveLiveVersion(version_id_); |
- if (running_status() == STARTING || running_status() == RUNNING) |
+ if (running_status() == EmbeddedWorkerStatus::STARTING || |
+ running_status() == EmbeddedWorkerStatus::RUNNING) { |
embedded_worker_->Stop(); |
+ } |
embedded_worker_->RemoveListener(this); |
} |
@@ -446,7 +449,7 @@ void ServiceWorkerVersion::StopWorker(const StatusCallback& callback) { |
TRACE_EVENT_SCOPE_THREAD, "Script", script_url_.spec(), |
"Status", VersionStatusToString(status_)); |
- if (running_status() == STOPPED) { |
+ if (running_status() == EmbeddedWorkerStatus::STOPPED) { |
RunSoon(base::Bind(callback, SERVICE_WORKER_OK)); |
return; |
} |
@@ -509,7 +512,7 @@ int ServiceWorkerVersion::StartRequestWithCustomTimeout( |
const base::TimeDelta& timeout, |
TimeoutBehavior timeout_behavior) { |
OnBeginEvent(); |
- DCHECK_EQ(RUNNING, running_status()) |
+ DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, running_status()) |
<< "Can only start a request with a running worker."; |
DCHECK(event_type == ServiceWorkerMetrics::EventType::INSTALL || |
event_type == ServiceWorkerMetrics::EventType::ACTIVATE || |
@@ -556,7 +559,7 @@ void ServiceWorkerVersion::RunAfterStartWorker( |
ServiceWorkerMetrics::EventType purpose, |
const base::Closure& task, |
const StatusCallback& error_callback) { |
- if (running_status() == RUNNING) { |
+ if (running_status() == EmbeddedWorkerStatus::RUNNING) { |
DCHECK(start_callbacks_.empty()); |
task.Run(); |
return; |
@@ -630,7 +633,8 @@ void ServiceWorkerVersion::SetStartWorkerStatusCode( |
void ServiceWorkerVersion::Doom() { |
DCHECK(!HasControllee()); |
SetStatus(REDUNDANT); |
- if (running_status() == STARTING || running_status() == RUNNING) { |
+ if (running_status() == EmbeddedWorkerStatus::STARTING || |
+ running_status() == EmbeddedWorkerStatus::RUNNING) { |
if (embedded_worker()->devtools_attached()) |
stop_when_devtools_detached_ = true; |
else |
@@ -647,8 +651,10 @@ void ServiceWorkerVersion::SetDevToolsAttached(bool attached) { |
embedded_worker()->set_devtools_attached(attached); |
if (stop_when_devtools_detached_ && !attached) { |
DCHECK_EQ(REDUNDANT, status()); |
- if (running_status() == STARTING || running_status() == RUNNING) |
+ if (running_status() == EmbeddedWorkerStatus::STARTING || |
+ running_status() == EmbeddedWorkerStatus::RUNNING) { |
embedded_worker_->Stop(); |
+ } |
return; |
} |
if (attached) { |
@@ -667,8 +673,9 @@ void ServiceWorkerVersion::SetDevToolsAttached(bool attached) { |
if (!start_callbacks_.empty()) { |
// Reactivate the timer for start timeout. |
DCHECK(timeout_timer_.IsRunning()); |
- DCHECK(running_status() == STARTING || running_status() == STOPPING) |
- << running_status(); |
+ DCHECK(running_status() == EmbeddedWorkerStatus::STARTING || |
+ running_status() == EmbeddedWorkerStatus::STOPPING) |
+ << static_cast<int>(running_status()); |
RestartTick(&start_time_); |
} |
@@ -740,7 +747,7 @@ ServiceWorkerVersion::BaseMojoServiceWrapper::~BaseMojoServiceWrapper() { |
} |
void ServiceWorkerVersion::OnThreadStarted() { |
- DCHECK_EQ(STARTING, running_status()); |
+ DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status()); |
// Activate ping/pong now that JavaScript execution will start. |
ping_controller_->Activate(); |
} |
@@ -750,7 +757,7 @@ void ServiceWorkerVersion::OnStarting() { |
} |
void ServiceWorkerVersion::OnStarted() { |
- DCHECK_EQ(RUNNING, running_status()); |
+ DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, running_status()); |
RestartTick(&idle_time_); |
// Fire all start callbacks. |
@@ -775,8 +782,7 @@ void ServiceWorkerVersion::OnStopping() { |
FOR_EACH_OBSERVER(Listener, listeners_, OnRunningStateChanged(this)); |
} |
-void ServiceWorkerVersion::OnStopped( |
- EmbeddedWorkerInstance::Status old_status) { |
+void ServiceWorkerVersion::OnStopped(EmbeddedWorkerStatus old_status) { |
if (IsInstalled(status())) { |
ServiceWorkerMetrics::RecordWorkerStopped( |
ServiceWorkerMetrics::StopStatus::NORMAL); |
@@ -787,8 +793,7 @@ void ServiceWorkerVersion::OnStopped( |
OnStoppedInternal(old_status); |
} |
-void ServiceWorkerVersion::OnDetached( |
- EmbeddedWorkerInstance::Status old_status) { |
+void ServiceWorkerVersion::OnDetached(EmbeddedWorkerStatus old_status) { |
if (IsInstalled(status())) { |
ServiceWorkerMetrics::RecordWorkerStopped( |
ServiceWorkerMetrics::StopStatus::DETACH_BY_REGISTRY); |
@@ -899,8 +904,10 @@ void ServiceWorkerVersion::OnGetClientFinished( |
// When Clients.get() is called on the script evaluation phase, the running |
// status can be STARTING here. |
- if (running_status() != STARTING && running_status() != RUNNING) |
+ if (running_status() != EmbeddedWorkerStatus::STARTING && |
+ running_status() != EmbeddedWorkerStatus::RUNNING) { |
return; |
+ } |
embedded_worker_->SendMessage( |
ServiceWorkerMsg_DidGetClient(request_id, client_info)); |
@@ -927,8 +934,10 @@ void ServiceWorkerVersion::OnGetClientsFinished(int request_id, |
// When Clients.matchAll() is called on the script evaluation phase, the |
// running status can be STARTING here. |
- if (running_status() != STARTING && running_status() != RUNNING) |
+ if (running_status() != EmbeddedWorkerStatus::STARTING && |
+ running_status() != EmbeddedWorkerStatus::RUNNING) { |
return; |
+ } |
embedded_worker_->SendMessage( |
ServiceWorkerMsg_DidGetClients(request_id, *clients)); |
@@ -993,7 +1002,7 @@ void ServiceWorkerVersion::OnOpenWindowFinished( |
const ServiceWorkerClientInfo& client_info) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- if (running_status() != RUNNING) |
+ if (running_status() != EmbeddedWorkerStatus::RUNNING) |
return; |
if (status != SERVICE_WORKER_OK) { |
@@ -1101,7 +1110,7 @@ void ServiceWorkerVersion::OnFocusClientFinished( |
const ServiceWorkerClientInfo& client_info) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- if (running_status() != RUNNING) |
+ if (running_status() != EmbeddedWorkerStatus::RUNNING) |
return; |
embedded_worker_->SendMessage( |
@@ -1157,7 +1166,7 @@ void ServiceWorkerVersion::OnNavigateClientFinished( |
const ServiceWorkerClientInfo& client_info) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- if (running_status() != RUNNING) |
+ if (running_status() != EmbeddedWorkerStatus::RUNNING) |
return; |
if (status != SERVICE_WORKER_OK) { |
@@ -1187,8 +1196,10 @@ void ServiceWorkerVersion::OnSkipWaiting(int request_id) { |
} |
void ServiceWorkerVersion::DidSkipWaiting(int request_id) { |
- if (running_status() == STARTING || running_status() == RUNNING) |
+ if (running_status() == EmbeddedWorkerStatus::STARTING || |
+ running_status() == EmbeddedWorkerStatus::RUNNING) { |
embedded_worker_->SendMessage(ServiceWorkerMsg_DidSkipWaiting(request_id)); |
+ } |
} |
void ServiceWorkerVersion::OnClaimClients(int request_id) { |
@@ -1287,14 +1298,14 @@ void ServiceWorkerVersion::DidEnsureLiveRegistrationForStartWorker( |
MarkIfStale(); |
switch (running_status()) { |
- case RUNNING: |
+ case EmbeddedWorkerStatus::RUNNING: |
RunSoon(base::Bind(callback, SERVICE_WORKER_OK)); |
return; |
- case STARTING: |
+ case EmbeddedWorkerStatus::STARTING: |
DCHECK(!start_callbacks_.empty()); |
break; |
- case STOPPING: |
- case STOPPED: |
+ case EmbeddedWorkerStatus::STOPPING: |
+ case EmbeddedWorkerStatus::STOPPED: |
if (start_callbacks_.empty()) { |
int trace_id = NextTraceId(); |
TRACE_EVENT_ASYNC_BEGIN2( |
@@ -1313,13 +1324,13 @@ void ServiceWorkerVersion::DidEnsureLiveRegistrationForStartWorker( |
start_callbacks_.push_back( |
base::Bind(&RunStartWorkerCallback, callback, protect)); |
- if (running_status() == STOPPED) |
+ if (running_status() == EmbeddedWorkerStatus::STOPPED) |
StartWorkerInternal(); |
DCHECK(timeout_timer_.IsRunning()); |
} |
void ServiceWorkerVersion::StartWorkerInternal() { |
- DCHECK_EQ(STOPPED, running_status()); |
+ DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status()); |
DCHECK(!metrics_); |
metrics_.reset(new Metrics(this)); |
@@ -1385,9 +1396,10 @@ void ServiceWorkerVersion::SetTimeoutTimerInterval(base::TimeDelta interval) { |
} |
void ServiceWorkerVersion::OnTimeoutTimer() { |
- DCHECK(running_status() == STARTING || running_status() == RUNNING || |
- running_status() == STOPPING) |
- << running_status(); |
+ DCHECK(running_status() == EmbeddedWorkerStatus::STARTING || |
+ running_status() == EmbeddedWorkerStatus::RUNNING || |
+ running_status() == EmbeddedWorkerStatus::STOPPING) |
+ << static_cast<int>(running_status()); |
if (!context_) |
return; |
@@ -1397,7 +1409,7 @@ void ServiceWorkerVersion::OnTimeoutTimer() { |
// Stopping the worker hasn't finished within a certain period. |
if (GetTickDuration(stop_time_) > |
base::TimeDelta::FromSeconds(kStopWorkerTimeoutSeconds)) { |
- DCHECK_EQ(STOPPING, running_status()); |
+ DCHECK_EQ(EmbeddedWorkerStatus::STOPPING, running_status()); |
if (IsInstalled(status())) { |
ServiceWorkerMetrics::RecordWorkerStopped( |
ServiceWorkerMetrics::StopStatus::TIMEOUT); |
@@ -1413,7 +1425,7 @@ void ServiceWorkerVersion::OnTimeoutTimer() { |
embedded_worker_->AddListener(this); |
// Call OnStoppedInternal to fail callbacks and possibly restart. |
- OnStoppedInternal(EmbeddedWorkerInstance::STOPPING); |
+ OnStoppedInternal(EmbeddedWorkerStatus::STOPPING); |
return; |
} |
@@ -1432,11 +1444,12 @@ void ServiceWorkerVersion::OnTimeoutTimer() { |
? base::TimeDelta::FromSeconds(kStartInstalledWorkerTimeoutSeconds) |
: base::TimeDelta::FromMinutes(kStartNewWorkerTimeoutMinutes); |
if (GetTickDuration(start_time_) > start_limit) { |
- DCHECK(running_status() == STARTING || running_status() == STOPPING) |
- << running_status(); |
+ DCHECK(running_status() == EmbeddedWorkerStatus::STARTING || |
+ running_status() == EmbeddedWorkerStatus::STOPPING) |
+ << static_cast<int>(running_status()); |
scoped_refptr<ServiceWorkerVersion> protect(this); |
RunCallbacks(this, &start_callbacks_, SERVICE_WORKER_ERROR_TIMEOUT); |
- if (running_status() == STARTING) |
+ if (running_status() == EmbeddedWorkerStatus::STARTING) |
embedded_worker_->Stop(); |
return; |
} |
@@ -1454,12 +1467,12 @@ void ServiceWorkerVersion::OnTimeoutTimer() { |
} |
requests_.pop(); |
} |
- if (stop_for_timeout && running_status() != STOPPING) |
+ if (stop_for_timeout && running_status() != EmbeddedWorkerStatus::STOPPING) |
embedded_worker_->Stop(); |
// For the timeouts below, there are no callbacks to timeout so there is |
// nothing more to do if the worker is already stopping. |
- if (running_status() == STOPPING) |
+ if (running_status() == EmbeddedWorkerStatus::STOPPING) |
return; |
// The worker has been idle for longer than a certain period. |
@@ -1474,12 +1487,14 @@ void ServiceWorkerVersion::OnTimeoutTimer() { |
} |
ServiceWorkerStatusCode ServiceWorkerVersion::PingWorker() { |
- DCHECK(running_status() == STARTING || running_status() == RUNNING); |
+ DCHECK(running_status() == EmbeddedWorkerStatus::STARTING || |
+ running_status() == EmbeddedWorkerStatus::RUNNING); |
return embedded_worker_->SendMessage(ServiceWorkerMsg_Ping()); |
} |
void ServiceWorkerVersion::OnPingTimeout() { |
- DCHECK(running_status() == STARTING || running_status() == RUNNING); |
+ DCHECK(running_status() == EmbeddedWorkerStatus::STARTING || |
+ running_status() == EmbeddedWorkerStatus::RUNNING); |
// TODO(falken): Show a message to the developer that the SW was stopped due |
// to timeout (crbug.com/457968). Also, change the error code to |
// SERVICE_WORKER_ERROR_TIMEOUT. |
@@ -1489,7 +1504,8 @@ void ServiceWorkerVersion::OnPingTimeout() { |
void ServiceWorkerVersion::StopWorkerIfIdle() { |
if (HasInflightRequests() && !ping_controller_->IsTimedOut()) |
return; |
- if (running_status() == STOPPED || running_status() == STOPPING || |
+ if (running_status() == EmbeddedWorkerStatus::STOPPED || |
+ running_status() == EmbeddedWorkerStatus::STOPPING || |
!stop_callbacks_.empty()) { |
return; |
} |
@@ -1534,11 +1550,11 @@ void ServiceWorkerVersion::RecordStartWorkerResult( |
return; |
EmbeddedWorkerInstance::StartingPhase phase = |
EmbeddedWorkerInstance::NOT_STARTING; |
- EmbeddedWorkerInstance::Status running_status = embedded_worker_->status(); |
+ EmbeddedWorkerStatus running_status = embedded_worker_->status(); |
// Build an artifical JavaScript exception to show in the ServiceWorker |
// log for developers; it's not user-facing so it's not a localized resource. |
std::string message = "ServiceWorker startup timed out. "; |
- if (running_status != EmbeddedWorkerInstance::STARTING) { |
+ if (running_status != EmbeddedWorkerStatus::STARTING) { |
message.append("The worker had unexpected status: "); |
message.append(EmbeddedWorkerInstance::StatusToString(running_status)); |
} else { |
@@ -1637,9 +1653,8 @@ void ServiceWorkerVersion::FoundRegistrationForUpdate( |
false /* force_bypass_cache */); |
} |
-void ServiceWorkerVersion::OnStoppedInternal( |
- EmbeddedWorkerInstance::Status old_status) { |
- DCHECK_EQ(STOPPED, running_status()); |
+void ServiceWorkerVersion::OnStoppedInternal(EmbeddedWorkerStatus old_status) { |
+ DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status()); |
scoped_refptr<ServiceWorkerVersion> protect; |
if (!in_dtor_) |
protect = this; |
@@ -1648,7 +1663,7 @@ void ServiceWorkerVersion::OnStoppedInternal( |
metrics_.reset(); |
bool should_restart = !is_redundant() && !start_callbacks_.empty() && |
- (old_status != EmbeddedWorkerInstance::STARTING) && |
+ (old_status != EmbeddedWorkerStatus::STARTING) && |
!in_dtor_ && !ping_controller_->IsTimedOut(); |
if (!stop_time_.is_null()) { |
@@ -1702,7 +1717,8 @@ void ServiceWorkerVersion::OnMojoConnectionError(const char* service_name) { |
} |
void ServiceWorkerVersion::OnBeginEvent() { |
- if (should_exclude_from_uma_ || running_status() != RUNNING || |
+ if (should_exclude_from_uma_ || |
+ running_status() != EmbeddedWorkerStatus::RUNNING || |
idle_time_.is_null()) { |
return; |
} |