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

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

Issue 1316743002: Reland of [Background Sync] Allow sync manager access from uncontrolled clients (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 3 months 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
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/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 66
67 BackgroundSyncManager::RegistrationKey::RegistrationKey( 67 BackgroundSyncManager::RegistrationKey::RegistrationKey(
68 const std::string& tag, 68 const std::string& tag,
69 SyncPeriodicity periodicity) 69 SyncPeriodicity periodicity)
70 : value_(periodicity == SYNC_ONE_SHOT ? "o_" + tag : "p_" + tag) { 70 : value_(periodicity == SYNC_ONE_SHOT ? "o_" + tag : "p_" + tag) {
71 } 71 }
72 72
73 void BackgroundSyncManager::Register( 73 void BackgroundSyncManager::Register(
74 int64 sw_registration_id, 74 int64 sw_registration_id,
75 const BackgroundSyncRegistrationOptions& options, 75 const BackgroundSyncRegistrationOptions& options,
76 bool requested_from_service_worker,
76 const StatusAndRegistrationCallback& callback) { 77 const StatusAndRegistrationCallback& callback) {
77 DCHECK_CURRENTLY_ON(BrowserThread::IO); 78 DCHECK_CURRENTLY_ON(BrowserThread::IO);
78 79
79 // For UMA, determine here whether the sync could fire immediately 80 // For UMA, determine here whether the sync could fire immediately
80 BackgroundSyncMetrics::RegistrationCouldFire registration_could_fire = 81 BackgroundSyncMetrics::RegistrationCouldFire registration_could_fire =
81 AreOptionConditionsMet(options) 82 AreOptionConditionsMet(options)
82 ? BackgroundSyncMetrics::REGISTRATION_COULD_FIRE 83 ? BackgroundSyncMetrics::REGISTRATION_COULD_FIRE
83 : BackgroundSyncMetrics::REGISTRATION_COULD_NOT_FIRE; 84 : BackgroundSyncMetrics::REGISTRATION_COULD_NOT_FIRE;
84 85
85 if (disabled_) { 86 if (disabled_) {
86 BackgroundSyncMetrics::CountRegister( 87 BackgroundSyncMetrics::CountRegister(
87 options.periodicity, registration_could_fire, 88 options.periodicity, registration_could_fire,
88 BackgroundSyncMetrics::REGISTRATION_IS_NOT_DUPLICATE, 89 BackgroundSyncMetrics::REGISTRATION_IS_NOT_DUPLICATE,
89 BACKGROUND_SYNC_STATUS_STORAGE_ERROR); 90 BACKGROUND_SYNC_STATUS_STORAGE_ERROR);
90 base::ThreadTaskRunnerHandle::Get()->PostTask( 91 base::ThreadTaskRunnerHandle::Get()->PostTask(
91 FROM_HERE, base::Bind(callback, BACKGROUND_SYNC_STATUS_STORAGE_ERROR, 92 FROM_HERE, base::Bind(callback, BACKGROUND_SYNC_STATUS_STORAGE_ERROR,
92 BackgroundSyncRegistration())); 93 BackgroundSyncRegistration()));
93 return; 94 return;
94 } 95 }
95 96
96 op_scheduler_.ScheduleOperation( 97 op_scheduler_.ScheduleOperation(base::Bind(
97 base::Bind(&BackgroundSyncManager::RegisterImpl, 98 &BackgroundSyncManager::RegisterImpl, weak_ptr_factory_.GetWeakPtr(),
98 weak_ptr_factory_.GetWeakPtr(), sw_registration_id, options, 99 sw_registration_id, options, requested_from_service_worker,
99 MakeStatusAndRegistrationCompletion(callback))); 100 MakeStatusAndRegistrationCompletion(callback)));
100 } 101 }
101 102
102 void BackgroundSyncManager::Unregister( 103 void BackgroundSyncManager::Unregister(
103 int64 sw_registration_id, 104 int64 sw_registration_id,
104 const std::string& sync_registration_tag, 105 const std::string& sync_registration_tag,
105 SyncPeriodicity periodicity, 106 SyncPeriodicity periodicity,
106 BackgroundSyncRegistration::RegistrationId sync_registration_id, 107 BackgroundSyncRegistration::RegistrationId sync_registration_id,
107 const StatusCallback& callback) { 108 const StatusCallback& callback) {
108 DCHECK_CURRENTLY_ON(BrowserThread::IO); 109 DCHECK_CURRENTLY_ON(BrowserThread::IO);
109 110
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 295
295 FireReadyEvents(); 296 FireReadyEvents();
296 297
297 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 298 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
298 base::Bind(callback)); 299 base::Bind(callback));
299 } 300 }
300 301
301 void BackgroundSyncManager::RegisterImpl( 302 void BackgroundSyncManager::RegisterImpl(
302 int64 sw_registration_id, 303 int64 sw_registration_id,
303 const BackgroundSyncRegistrationOptions& options, 304 const BackgroundSyncRegistrationOptions& options,
305 bool requested_from_service_worker,
304 const StatusAndRegistrationCallback& callback) { 306 const StatusAndRegistrationCallback& callback) {
305 DCHECK_CURRENTLY_ON(BrowserThread::IO); 307 DCHECK_CURRENTLY_ON(BrowserThread::IO);
306 308
307 // For UMA, determine here whether the sync could fire immediately 309 // For UMA, determine here whether the sync could fire immediately
308 BackgroundSyncMetrics::RegistrationCouldFire registration_could_fire = 310 BackgroundSyncMetrics::RegistrationCouldFire registration_could_fire =
309 AreOptionConditionsMet(options) 311 AreOptionConditionsMet(options)
310 ? BackgroundSyncMetrics::REGISTRATION_COULD_FIRE 312 ? BackgroundSyncMetrics::REGISTRATION_COULD_FIRE
311 : BackgroundSyncMetrics::REGISTRATION_COULD_NOT_FIRE; 313 : BackgroundSyncMetrics::REGISTRATION_COULD_NOT_FIRE;
312 314
313 if (disabled_) { 315 if (disabled_) {
(...skipping 14 matching lines...) Expand all
328 options.periodicity, registration_could_fire, 330 options.periodicity, registration_could_fire,
329 BackgroundSyncMetrics::REGISTRATION_IS_NOT_DUPLICATE, 331 BackgroundSyncMetrics::REGISTRATION_IS_NOT_DUPLICATE,
330 BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER); 332 BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER);
331 base::ThreadTaskRunnerHandle::Get()->PostTask( 333 base::ThreadTaskRunnerHandle::Get()->PostTask(
332 FROM_HERE, 334 FROM_HERE,
333 base::Bind(callback, BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER, 335 base::Bind(callback, BACKGROUND_SYNC_STATUS_NO_SERVICE_WORKER,
334 BackgroundSyncRegistration())); 336 BackgroundSyncRegistration()));
335 return; 337 return;
336 } 338 }
337 339
338 if (!sw_registration->active_version()->HasWindowClients()) { 340 if (requested_from_service_worker &&
341 !sw_registration->active_version()->HasWindowClients()) {
339 base::ThreadTaskRunnerHandle::Get()->PostTask( 342 base::ThreadTaskRunnerHandle::Get()->PostTask(
340 FROM_HERE, base::Bind(callback, BACKGROUND_SYNC_STATUS_NOT_ALLOWED, 343 FROM_HERE, base::Bind(callback, BACKGROUND_SYNC_STATUS_NOT_ALLOWED,
341 BackgroundSyncRegistration())); 344 BackgroundSyncRegistration()));
342 return; 345 return;
343 } 346 }
344 347
345 BackgroundSyncRegistration* existing_registration = 348 BackgroundSyncRegistration* existing_registration =
346 LookupRegistration(sw_registration_id, RegistrationKey(options)); 349 LookupRegistration(sw_registration_id, RegistrationKey(options));
347 if (existing_registration && 350 if (existing_registration &&
348 existing_registration->options()->Equals(options)) { 351 existing_registration->options()->Equals(options)) {
(...skipping 724 matching lines...) Expand 10 before | Expand all | Expand 10 after
1073 BackgroundSyncManager::MakeStatusCompletion(const StatusCallback& callback) { 1076 BackgroundSyncManager::MakeStatusCompletion(const StatusCallback& callback) {
1074 DCHECK_CURRENTLY_ON(BrowserThread::IO); 1077 DCHECK_CURRENTLY_ON(BrowserThread::IO);
1075 1078
1076 return base::Bind( 1079 return base::Bind(
1077 &BackgroundSyncManager::CompleteOperationCallback<StatusCallback, 1080 &BackgroundSyncManager::CompleteOperationCallback<StatusCallback,
1078 BackgroundSyncStatus>, 1081 BackgroundSyncStatus>,
1079 weak_ptr_factory_.GetWeakPtr(), callback); 1082 weak_ptr_factory_.GetWeakPtr(), callback);
1080 } 1083 }
1081 1084
1082 } // namespace content 1085 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698