Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(189)

Side by Side Diff: content/browser/background_sync/background_sync_manager.cc

Issue 1465533006: [BackgroundSync] Split failed and succeeded cases of BackgroundSyncMetrics::CountRegister (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: static Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | content/browser/background_sync/background_sync_metrics.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/background_sync/background_sync_manager.h" 5 #include "content/browser/background_sync/background_sync_manager.h"
6 6
7 #include "base/barrier_closure.h" 7 #include "base/barrier_closure.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/metrics/field_trial.h" 10 #include "base/metrics/field_trial.h"
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 : value_(periodicity == SYNC_ONE_SHOT ? "o_" + tag : "p_" + tag) { 167 : value_(periodicity == SYNC_ONE_SHOT ? "o_" + tag : "p_" + tag) {
168 } 168 }
169 169
170 void BackgroundSyncManager::Register( 170 void BackgroundSyncManager::Register(
171 int64 sw_registration_id, 171 int64 sw_registration_id,
172 const BackgroundSyncRegistrationOptions& options, 172 const BackgroundSyncRegistrationOptions& options,
173 bool requested_from_service_worker, 173 bool requested_from_service_worker,
174 const StatusAndRegistrationCallback& callback) { 174 const StatusAndRegistrationCallback& callback) {
175 DCHECK_CURRENTLY_ON(BrowserThread::IO); 175 DCHECK_CURRENTLY_ON(BrowserThread::IO);
176 176
177 // For UMA, determine here whether the sync could fire immediately
178 BackgroundSyncMetrics::RegistrationCouldFire registration_could_fire =
179 AreOptionConditionsMet(options)
180 ? BackgroundSyncMetrics::REGISTRATION_COULD_FIRE
181 : BackgroundSyncMetrics::REGISTRATION_COULD_NOT_FIRE;
182
183 if (disabled_) { 177 if (disabled_) {
184 BackgroundSyncMetrics::CountRegister( 178 BackgroundSyncMetrics::CountRegisterFailure(
185 options.periodicity, registration_could_fire, 179 options.periodicity, BACKGROUND_SYNC_STATUS_STORAGE_ERROR);
186 BackgroundSyncMetrics::REGISTRATION_IS_NOT_DUPLICATE,
187 BACKGROUND_SYNC_STATUS_STORAGE_ERROR);
188 PostErrorResponse(BACKGROUND_SYNC_STATUS_STORAGE_ERROR, callback); 180 PostErrorResponse(BACKGROUND_SYNC_STATUS_STORAGE_ERROR, callback);
189 return; 181 return;
190 } 182 }
191 183
192 op_scheduler_.ScheduleOperation(base::Bind( 184 op_scheduler_.ScheduleOperation(base::Bind(
193 &BackgroundSyncManager::RegisterImpl, weak_ptr_factory_.GetWeakPtr(), 185 &BackgroundSyncManager::RegisterImpl, weak_ptr_factory_.GetWeakPtr(),
194 sw_registration_id, options, requested_from_service_worker, 186 sw_registration_id, options, requested_from_service_worker,
195 MakeStatusAndRegistrationCompletion(callback))); 187 MakeStatusAndRegistrationCompletion(callback)));
196 } 188 }
197 189
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 base::Bind(callback)); 392 base::Bind(callback));
401 } 393 }
402 394
403 void BackgroundSyncManager::RegisterImpl( 395 void BackgroundSyncManager::RegisterImpl(
404 int64 sw_registration_id, 396 int64 sw_registration_id,
405 const BackgroundSyncRegistrationOptions& options, 397 const BackgroundSyncRegistrationOptions& options,
406 bool requested_from_service_worker, 398 bool requested_from_service_worker,
407 const StatusAndRegistrationCallback& callback) { 399 const StatusAndRegistrationCallback& callback) {
408 DCHECK_CURRENTLY_ON(BrowserThread::IO); 400 DCHECK_CURRENTLY_ON(BrowserThread::IO);
409 401
410 // For UMA, determine here whether the sync could fire immediately
411 BackgroundSyncMetrics::RegistrationCouldFire registration_could_fire =
412 AreOptionConditionsMet(options)
413 ? BackgroundSyncMetrics::REGISTRATION_COULD_FIRE
414 : BackgroundSyncMetrics::REGISTRATION_COULD_NOT_FIRE;
415
416 if (disabled_) { 402 if (disabled_) {
417 BackgroundSyncMetrics::CountRegister( 403 BackgroundSyncMetrics::CountRegisterFailure(
418 options.periodicity, registration_could_fire, 404 options.periodicity, BACKGROUND_SYNC_STATUS_STORAGE_ERROR);
419 BackgroundSyncMetrics::REGISTRATION_IS_NOT_DUPLICATE,
420 BACKGROUND_SYNC_STATUS_STORAGE_ERROR);
421 PostErrorResponse(BACKGROUND_SYNC_STATUS_STORAGE_ERROR, callback); 405 PostErrorResponse(BACKGROUND_SYNC_STATUS_STORAGE_ERROR, callback);
422 return; 406 return;
423 } 407 }
424 408
425 if (ShouldDisableForFieldTrial()) { 409 if (ShouldDisableForFieldTrial()) {
426 DisableAndClearManager(base::Bind( 410 DisableAndClearManager(base::Bind(
427 callback, BACKGROUND_SYNC_STATUS_STORAGE_ERROR, 411 callback, BACKGROUND_SYNC_STATUS_STORAGE_ERROR,
428 base::Passed(scoped_ptr<BackgroundSyncRegistrationHandle>().Pass()))); 412 base::Passed(scoped_ptr<BackgroundSyncRegistrationHandle>().Pass())));
429 return; 413 return;
430 } 414 }
431 415
432 if (options.tag.length() > kMaxTagLength) { 416 if (options.tag.length() > kMaxTagLength) {
433 BackgroundSyncMetrics::CountRegister( 417 BackgroundSyncMetrics::CountRegisterFailure(
434 options.periodicity, registration_could_fire, 418 options.periodicity, BACKGROUND_SYNC_STATUS_NOT_ALLOWED);
435 BackgroundSyncMetrics::REGISTRATION_IS_NOT_DUPLICATE,
436 BACKGROUND_SYNC_STATUS_NOT_ALLOWED);
437 PostErrorResponse(BACKGROUND_SYNC_STATUS_NOT_ALLOWED, callback); 419 PostErrorResponse(BACKGROUND_SYNC_STATUS_NOT_ALLOWED, callback);
438 return; 420 return;
439 } 421 }
440 422
441 ServiceWorkerRegistration* sw_registration = 423 ServiceWorkerRegistration* sw_registration =
442 service_worker_context_->GetLiveRegistration(sw_registration_id); 424 service_worker_context_->GetLiveRegistration(sw_registration_id);
443 if (!sw_registration || !sw_registration->active_version()) { 425 if (!sw_registration || !sw_registration->active_version()) {
444 BackgroundSyncMetrics::CountRegister( 426 BackgroundSyncMetrics::CountRegisterFailure(
445 options.periodicity, registration_could_fire, 427 options.periodicity, BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER);
446 BackgroundSyncMetrics::REGISTRATION_IS_NOT_DUPLICATE,
447 BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER);
448 PostErrorResponse(BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER, callback); 428 PostErrorResponse(BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER, callback);
449 return; 429 return;
450 } 430 }
451 431
452 if (requested_from_service_worker && 432 if (requested_from_service_worker &&
453 !service_worker_context_->HasWindowProviderHost( 433 !service_worker_context_->HasWindowProviderHost(
454 sw_registration->pattern().GetOrigin())) { 434 sw_registration->pattern().GetOrigin())) {
455 PostErrorResponse(BACKGROUND_SYNC_STATUS_NOT_ALLOWED, callback); 435 PostErrorResponse(BACKGROUND_SYNC_STATUS_NOT_ALLOWED, callback);
456 return; 436 return;
457 } 437 }
458 438
459 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 439 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
460 base::Bind(&NotifyBackgroundSyncRegisteredOnUIThread, 440 base::Bind(&NotifyBackgroundSyncRegisteredOnUIThread,
461 service_worker_context_, 441 service_worker_context_,
462 sw_registration->pattern().GetOrigin())); 442 sw_registration->pattern().GetOrigin()));
463 443
464 RefCountedRegistration* existing_registration_ref = 444 RefCountedRegistration* existing_registration_ref =
465 LookupActiveRegistration(sw_registration_id, RegistrationKey(options)); 445 LookupActiveRegistration(sw_registration_id, RegistrationKey(options));
466 if (existing_registration_ref) { 446 if (existing_registration_ref) {
467 if (existing_registration_ref->value()->options()->Equals(options)) { 447 if (existing_registration_ref->value()->options()->Equals(options)) {
468 BackgroundSyncRegistration* existing_registration = 448 BackgroundSyncRegistration* existing_registration =
469 existing_registration_ref->value(); 449 existing_registration_ref->value();
470 450
471 // Record the duplicated registration 451 BackgroundSyncMetrics::RegistrationCouldFire registration_could_fire =
472 BackgroundSyncMetrics::CountRegister( 452 AreOptionConditionsMet(options)
473 existing_registration->options()->periodicity, registration_could_fire, 453 ? BackgroundSyncMetrics::REGISTRATION_COULD_FIRE
474 BackgroundSyncMetrics::REGISTRATION_IS_DUPLICATE, 454 : BackgroundSyncMetrics::REGISTRATION_COULD_NOT_FIRE;
475 BACKGROUND_SYNC_STATUS_OK); 455 BackgroundSyncMetrics::CountRegisterSuccess(
456 existing_registration->options()->periodicity,
457 registration_could_fire,
458 BackgroundSyncMetrics::REGISTRATION_IS_DUPLICATE);
476 459
477 if (existing_registration->IsFiring()) { 460 if (existing_registration->IsFiring()) {
478 existing_registration->set_sync_state( 461 existing_registration->set_sync_state(
479 BACKGROUND_SYNC_STATE_REREGISTERED_WHILE_FIRING); 462 BACKGROUND_SYNC_STATE_REREGISTERED_WHILE_FIRING);
480 } 463 }
481 464
482 base::ThreadTaskRunnerHandle::Get()->PostTask( 465 base::ThreadTaskRunnerHandle::Get()->PostTask(
483 FROM_HERE, 466 FROM_HERE,
484 base::Bind( 467 base::Bind(
485 callback, BACKGROUND_SYNC_STATUS_OK, 468 callback, BACKGROUND_SYNC_STATUS_OK,
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 void BackgroundSyncManager::RegisterDidStore( 622 void BackgroundSyncManager::RegisterDidStore(
640 int64 sw_registration_id, 623 int64 sw_registration_id,
641 const scoped_refptr<RefCountedRegistration>& new_registration_ref, 624 const scoped_refptr<RefCountedRegistration>& new_registration_ref,
642 const StatusAndRegistrationCallback& callback, 625 const StatusAndRegistrationCallback& callback,
643 ServiceWorkerStatusCode status) { 626 ServiceWorkerStatusCode status) {
644 DCHECK_CURRENTLY_ON(BrowserThread::IO); 627 DCHECK_CURRENTLY_ON(BrowserThread::IO);
645 628
646 const BackgroundSyncRegistration* new_registration = 629 const BackgroundSyncRegistration* new_registration =
647 new_registration_ref->value(); 630 new_registration_ref->value();
648 631
649 // For UMA, determine here whether the sync could fire immediately
650 BackgroundSyncMetrics::RegistrationCouldFire registration_could_fire =
651 AreOptionConditionsMet(*new_registration->options())
652 ? BackgroundSyncMetrics::REGISTRATION_COULD_FIRE
653 : BackgroundSyncMetrics::REGISTRATION_COULD_NOT_FIRE;
654
655 if (status == SERVICE_WORKER_ERROR_NOT_FOUND) { 632 if (status == SERVICE_WORKER_ERROR_NOT_FOUND) {
656 // The service worker registration is gone. 633 // The service worker registration is gone.
657 BackgroundSyncMetrics::CountRegister( 634 BackgroundSyncMetrics::CountRegisterFailure(
658 new_registration->options()->periodicity, registration_could_fire, 635 new_registration->options()->periodicity,
659 BackgroundSyncMetrics::REGISTRATION_IS_NOT_DUPLICATE,
660 BACKGROUND_SYNC_STATUS_STORAGE_ERROR); 636 BACKGROUND_SYNC_STATUS_STORAGE_ERROR);
661 active_registrations_.erase(sw_registration_id); 637 active_registrations_.erase(sw_registration_id);
662 PostErrorResponse(BACKGROUND_SYNC_STATUS_STORAGE_ERROR, callback); 638 PostErrorResponse(BACKGROUND_SYNC_STATUS_STORAGE_ERROR, callback);
663 return; 639 return;
664 } 640 }
665 641
666 if (status != SERVICE_WORKER_OK) { 642 if (status != SERVICE_WORKER_OK) {
667 LOG(ERROR) << "BackgroundSync failed to store registration due to backend " 643 LOG(ERROR) << "BackgroundSync failed to store registration due to backend "
668 "failure."; 644 "failure.";
669 BackgroundSyncMetrics::CountRegister( 645 BackgroundSyncMetrics::CountRegisterFailure(
670 new_registration->options()->periodicity, registration_could_fire, 646 new_registration->options()->periodicity,
671 BackgroundSyncMetrics::REGISTRATION_IS_NOT_DUPLICATE,
672 BACKGROUND_SYNC_STATUS_STORAGE_ERROR); 647 BACKGROUND_SYNC_STATUS_STORAGE_ERROR);
673 DisableAndClearManager(base::Bind( 648 DisableAndClearManager(base::Bind(
674 callback, BACKGROUND_SYNC_STATUS_STORAGE_ERROR, 649 callback, BACKGROUND_SYNC_STATUS_STORAGE_ERROR,
675 base::Passed(scoped_ptr<BackgroundSyncRegistrationHandle>().Pass()))); 650 base::Passed(scoped_ptr<BackgroundSyncRegistrationHandle>().Pass())));
676 return; 651 return;
677 } 652 }
678 653
679 BackgroundSyncMetrics::CountRegister( 654 BackgroundSyncMetrics::RegistrationCouldFire registration_could_fire =
655 AreOptionConditionsMet(*new_registration->options())
656 ? BackgroundSyncMetrics::REGISTRATION_COULD_FIRE
657 : BackgroundSyncMetrics::REGISTRATION_COULD_NOT_FIRE;
658 BackgroundSyncMetrics::CountRegisterSuccess(
680 new_registration->options()->periodicity, registration_could_fire, 659 new_registration->options()->periodicity, registration_could_fire,
681 BackgroundSyncMetrics::REGISTRATION_IS_NOT_DUPLICATE, 660 BackgroundSyncMetrics::REGISTRATION_IS_NOT_DUPLICATE);
682 BACKGROUND_SYNC_STATUS_OK); 661
683 FireReadyEvents(); 662 FireReadyEvents();
684 base::ThreadTaskRunnerHandle::Get()->PostTask( 663 base::ThreadTaskRunnerHandle::Get()->PostTask(
685 FROM_HERE, 664 FROM_HERE,
686 base::Bind( 665 base::Bind(
687 callback, BACKGROUND_SYNC_STATUS_OK, 666 callback, BACKGROUND_SYNC_STATUS_OK,
688 base::Passed( 667 base::Passed(
689 CreateRegistrationHandle(new_registration_ref.get()).Pass()))); 668 CreateRegistrationHandle(new_registration_ref.get()).Pass())));
690 } 669 }
691 670
692 void BackgroundSyncManager::RemoveActiveRegistration( 671 void BackgroundSyncManager::RemoveActiveRegistration(
(...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after
1452 BackgroundSyncManager::MakeStatusCompletion(const StatusCallback& callback) { 1431 BackgroundSyncManager::MakeStatusCompletion(const StatusCallback& callback) {
1453 DCHECK_CURRENTLY_ON(BrowserThread::IO); 1432 DCHECK_CURRENTLY_ON(BrowserThread::IO);
1454 1433
1455 return base::Bind( 1434 return base::Bind(
1456 &BackgroundSyncManager::CompleteOperationCallback<StatusCallback, 1435 &BackgroundSyncManager::CompleteOperationCallback<StatusCallback,
1457 BackgroundSyncStatus>, 1436 BackgroundSyncStatus>,
1458 weak_ptr_factory_.GetWeakPtr(), callback); 1437 weak_ptr_factory_.GetWeakPtr(), callback);
1459 } 1438 }
1460 1439
1461 } // namespace content 1440 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/background_sync/background_sync_metrics.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698