| 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 7369578627efc1ec219a2c05f28e601e709071f3..80421a9e9bb40184e968893a53f1adbb66dac0d3 100644
|
| --- a/content/browser/service_worker/service_worker_version.cc
|
| +++ b/content/browser/service_worker/service_worker_version.cc
|
| @@ -303,7 +303,11 @@ ServiceWorkerVersion::~ServiceWorkerVersion() {
|
| kDestructedStartingWorkerTimeoutThresholdSeconds)) {
|
| DCHECK(timeout_timer_.IsRunning());
|
| DCHECK(!embedded_worker_->devtools_attached());
|
| - RecordStartWorkerResult(SERVICE_WORKER_ERROR_TIMEOUT);
|
| +
|
| + // RecordStartWorkerResult must be in start_callbacks_.
|
| + DCHECK(!start_callbacks_.empty());
|
| + RecordStartWorkerResult(ServiceWorkerMetrics::EventType::UNKNOWN,
|
| + SERVICE_WORKER_ERROR_TIMEOUT);
|
| }
|
|
|
| if (context_)
|
| @@ -361,20 +365,22 @@ ServiceWorkerVersionInfo ServiceWorkerVersion::GetInfo() {
|
| return info;
|
| }
|
|
|
| -void ServiceWorkerVersion::StartWorker(const StatusCallback& callback) {
|
| +void ServiceWorkerVersion::StartWorker(
|
| + const StatusCallback& callback,
|
| + ServiceWorkerMetrics::EventType purpose) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| if (!context_) {
|
| - RecordStartWorkerResult(SERVICE_WORKER_ERROR_ABORT);
|
| + RecordStartWorkerResult(purpose, SERVICE_WORKER_ERROR_ABORT);
|
| RunSoon(base::Bind(callback, SERVICE_WORKER_ERROR_ABORT));
|
| return;
|
| }
|
| if (is_redundant()) {
|
| - RecordStartWorkerResult(SERVICE_WORKER_ERROR_REDUNDANT);
|
| + RecordStartWorkerResult(purpose, SERVICE_WORKER_ERROR_REDUNDANT);
|
| RunSoon(base::Bind(callback, SERVICE_WORKER_ERROR_REDUNDANT));
|
| return;
|
| }
|
| if (IsDisabled()) {
|
| - RecordStartWorkerResult(SERVICE_WORKER_ERROR_DISABLED_WORKER);
|
| + RecordStartWorkerResult(purpose, SERVICE_WORKER_ERROR_DISABLED_WORKER);
|
| RunSoon(base::Bind(callback, SERVICE_WORKER_ERROR_DISABLED_WORKER));
|
|
|
| // Show a message in DevTools for developers.
|
| @@ -390,7 +396,7 @@ void ServiceWorkerVersion::StartWorker(const StatusCallback& callback) {
|
| if (context_->wrapper()->resource_context() &&
|
| !GetContentClient()->browser()->AllowServiceWorker(
|
| scope_, scope_, context_->wrapper()->resource_context(), -1, -1)) {
|
| - RecordStartWorkerResult(SERVICE_WORKER_ERROR_DISALLOWED);
|
| + RecordStartWorkerResult(purpose, SERVICE_WORKER_ERROR_DISALLOWED);
|
| RunSoon(base::Bind(callback, SERVICE_WORKER_ERROR_DISALLOWED));
|
| return;
|
| }
|
| @@ -400,11 +406,9 @@ void ServiceWorkerVersion::StartWorker(const StatusCallback& callback) {
|
| // Ensure the live registration during starting worker so that the worker can
|
| // get associated with it in SWDispatcherHost::OnSetHostedVersionId().
|
| context_->storage()->FindRegistrationForId(
|
| - registration_id_,
|
| - scope_.GetOrigin(),
|
| + registration_id_, scope_.GetOrigin(),
|
| base::Bind(&ServiceWorkerVersion::DidEnsureLiveRegistrationForStartWorker,
|
| - weak_factory_.GetWeakPtr(),
|
| - callback));
|
| + weak_factory_.GetWeakPtr(), purpose, callback));
|
| }
|
|
|
| void ServiceWorkerVersion::StopWorker(const StatusCallback& callback) {
|
| @@ -515,14 +519,16 @@ bool ServiceWorkerVersion::FinishRequest(int request_id, bool was_handled) {
|
|
|
| void ServiceWorkerVersion::RunAfterStartWorker(
|
| const base::Closure& task,
|
| - const StatusCallback& error_callback) {
|
| + const StatusCallback& error_callback,
|
| + ServiceWorkerMetrics::EventType purpose) {
|
| if (running_status() == RUNNING) {
|
| DCHECK(start_callbacks_.empty());
|
| task.Run();
|
| return;
|
| }
|
| StartWorker(base::Bind(&RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(),
|
| - error_callback, task));
|
| + error_callback, task),
|
| + purpose);
|
| }
|
|
|
| void ServiceWorkerVersion::DispatchExtendableMessageEvent(
|
| @@ -586,12 +592,13 @@ void ServiceWorkerVersion::DispatchMessageEventInternal(
|
| OnBeginEvent();
|
| if (running_status() != RUNNING) {
|
| // Schedule calling this method after starting the worker.
|
| - StartWorker(base::Bind(
|
| - &RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(),
|
| - base::Bind(&RunErrorMessageCallback, sent_message_ports, callback),
|
| - base::Bind(&self::DispatchMessageEventInternal,
|
| - weak_factory_.GetWeakPtr(), message, sent_message_ports,
|
| - callback)));
|
| + StartWorker(base::Bind(&RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(),
|
| + base::Bind(&RunErrorMessageCallback,
|
| + sent_message_ports, callback),
|
| + base::Bind(&self::DispatchMessageEventInternal,
|
| + weak_factory_.GetWeakPtr(), message,
|
| + sent_message_ports, callback)),
|
| + ServiceWorkerMetrics::EventType::MESSAGE);
|
| return;
|
| }
|
|
|
| @@ -621,12 +628,13 @@ void ServiceWorkerVersion::DispatchCrossOriginMessageEvent(
|
|
|
| if (running_status() != RUNNING) {
|
| // Schedule calling this method after starting the worker.
|
| - StartWorker(base::Bind(
|
| - &RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(),
|
| - base::Bind(&RunErrorMessageCallback, sent_message_ports, callback),
|
| - base::Bind(&self::DispatchCrossOriginMessageEvent,
|
| - weak_factory_.GetWeakPtr(), client, message,
|
| - sent_message_ports, callback)));
|
| + StartWorker(base::Bind(&RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(),
|
| + base::Bind(&RunErrorMessageCallback,
|
| + sent_message_ports, callback),
|
| + base::Bind(&self::DispatchCrossOriginMessageEvent,
|
| + weak_factory_.GetWeakPtr(), client,
|
| + message, sent_message_ports, callback)),
|
| + ServiceWorkerMetrics::EventType::MESSAGE);
|
| return;
|
| }
|
|
|
| @@ -956,7 +964,8 @@ void ServiceWorkerVersion::DispatchExtendableMessageEventInternal(
|
| weak_factory_.GetWeakPtr(), message, source_origin,
|
| sent_message_ports, ExtendableMessageEventSource(source_info),
|
| callback),
|
| - base::Bind(&RunErrorMessageCallback, sent_message_ports, callback));
|
| + base::Bind(&RunErrorMessageCallback, sent_message_ports, callback),
|
| + ServiceWorkerMetrics::EventType::MESSAGE);
|
| }
|
|
|
| void ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker(
|
| @@ -1373,6 +1382,7 @@ void ServiceWorkerVersion::OnRegisterForeignFetchScopes(
|
| }
|
|
|
| void ServiceWorkerVersion::DidEnsureLiveRegistrationForStartWorker(
|
| + ServiceWorkerMetrics::EventType purpose,
|
| const StatusCallback& callback,
|
| ServiceWorkerStatusCode status,
|
| const scoped_refptr<ServiceWorkerRegistration>& registration) {
|
| @@ -1389,12 +1399,12 @@ void ServiceWorkerVersion::DidEnsureLiveRegistrationForStartWorker(
|
| }
|
| }
|
| if (status != SERVICE_WORKER_OK) {
|
| - RecordStartWorkerResult(status);
|
| + RecordStartWorkerResult(purpose, status);
|
| RunSoon(base::Bind(callback, SERVICE_WORKER_ERROR_START_WORKER_FAILED));
|
| return;
|
| }
|
| if (is_redundant()) {
|
| - RecordStartWorkerResult(SERVICE_WORKER_ERROR_REDUNDANT);
|
| + RecordStartWorkerResult(purpose, SERVICE_WORKER_ERROR_REDUNDANT);
|
| RunSoon(base::Bind(callback, SERVICE_WORKER_ERROR_REDUNDANT));
|
| return;
|
| }
|
| @@ -1413,7 +1423,7 @@ void ServiceWorkerVersion::DidEnsureLiveRegistrationForStartWorker(
|
| if (start_callbacks_.empty()) {
|
| start_callbacks_.push_back(
|
| base::Bind(&ServiceWorkerVersion::RecordStartWorkerResult,
|
| - weak_factory_.GetWeakPtr()));
|
| + weak_factory_.GetWeakPtr(), purpose));
|
| }
|
| break;
|
| }
|
| @@ -1605,6 +1615,7 @@ bool ServiceWorkerVersion::HasInflightRequests() const {
|
| }
|
|
|
| void ServiceWorkerVersion::RecordStartWorkerResult(
|
| + ServiceWorkerMetrics::EventType purpose,
|
| ServiceWorkerStatusCode status) {
|
| base::TimeTicks start_time = start_time_;
|
| ClearTick(&start_time_);
|
| @@ -1612,7 +1623,7 @@ void ServiceWorkerVersion::RecordStartWorkerResult(
|
| if (context_)
|
| context_->UpdateVersionFailureCount(version_id_, status);
|
|
|
| - ServiceWorkerMetrics::RecordStartWorkerStatus(status,
|
| + ServiceWorkerMetrics::RecordStartWorkerStatus(status, purpose,
|
| IsInstalled(prestart_status_));
|
|
|
| if (status == SERVICE_WORKER_OK && !start_time.is_null() &&
|
|
|