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

Side by Side Diff: components/gcm_driver/gcm_client_impl.cc

Issue 1183843002: Do not create GCM store if it is not needed (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address feedback + fix test Created 5 years, 6 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
« no previous file with comments | « no previous file | components/gcm_driver/gcm_client_impl_unittest.cc » ('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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/gcm_driver/gcm_client_impl.h" 5 #include "components/gcm_driver/gcm_client_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 // The delay start behavior will be abandoned when Start has been called 354 // The delay start behavior will be abandoned when Start has been called
355 // once with IMMEDIATE_START behavior. 355 // once with IMMEDIATE_START behavior.
356 if (start_mode == IMMEDIATE_START) 356 if (start_mode == IMMEDIATE_START)
357 start_mode_ = IMMEDIATE_START; 357 start_mode_ = IMMEDIATE_START;
358 358
359 // Bail out if the loading is not started or completed. 359 // Bail out if the loading is not started or completed.
360 if (state_ != INITIALIZED) 360 if (state_ != INITIALIZED)
361 return; 361 return;
362 362
363 // Once the loading is completed, the check-in will be initiated. 363 // Once the loading is completed, the check-in will be initiated.
364 gcm_store_->Load(base::Bind(&GCMClientImpl::OnLoadCompleted, 364 // If we're in lazy start mode, don't create a new store since none is really
365 weak_ptr_factory_.GetWeakPtr())); 365 // using GCM functionality yet.
366 gcm_store_->Load(
367 (start_mode == IMMEDIATE_START) ?
368 GCMStore::CREATE_IF_MISSING :
369 GCMStore::DO_NOT_CREATE,
370 base::Bind(&GCMClientImpl::OnLoadCompleted,
371 weak_ptr_factory_.GetWeakPtr()));
366 state_ = LOADING; 372 state_ = LOADING;
367 } 373 }
368 374
369 void GCMClientImpl::OnLoadCompleted(scoped_ptr<GCMStore::LoadResult> result) { 375 void GCMClientImpl::OnLoadCompleted(scoped_ptr<GCMStore::LoadResult> result) {
370 DCHECK_EQ(LOADING, state_); 376 DCHECK_EQ(LOADING, state_);
371 377
372 if (!result->success) { 378 if (!result->success) {
373 ResetStore(); 379 if (result->store_does_not_exist) {
380 // In the case that the store does not exist, set |state| back to
381 // INITIALIZED such that store loading could be triggered again when
382 // Start() is called with IMMEDIATE_START.
383 state_ = INITIALIZED;
384 } else {
385 // Otherwise, destroy the store to try again.
386 ResetStore();
387 }
374 return; 388 return;
375 } 389 }
376 gcm_store_reset_ = false; 390 gcm_store_reset_ = false;
377 391
378 device_checkin_info_.android_id = result->device_android_id; 392 device_checkin_info_.android_id = result->device_android_id;
379 device_checkin_info_.secret = result->device_security_token; 393 device_checkin_info_.secret = result->device_security_token;
380 device_checkin_info_.last_checkin_accounts = result->last_checkin_accounts; 394 device_checkin_info_.last_checkin_accounts = result->last_checkin_accounts;
381 // A case where there were previously no accounts reported with checkin is 395 // A case where there were previously no accounts reported with checkin is
382 // considered to be the same as when the list of accounts is empty. It enables 396 // considered to be the same as when the list of accounts is empty. It enables
383 // scheduling a periodic checkin for devices with no signed in users 397 // scheduling a periodic checkin for devices with no signed in users
(...skipping 906 matching lines...) Expand 10 before | Expand all | Expand 10 after
1290 bool GCMClientImpl::HasStandaloneRegisteredApp() const { 1304 bool GCMClientImpl::HasStandaloneRegisteredApp() const {
1291 if (registrations_.empty()) 1305 if (registrations_.empty())
1292 return false; 1306 return false;
1293 // Note that account mapper is not counted as a standalone app since it is 1307 // Note that account mapper is not counted as a standalone app since it is
1294 // automatically started when other app uses GCM. 1308 // automatically started when other app uses GCM.
1295 return registrations_.size() > 1 || 1309 return registrations_.size() > 1 ||
1296 !ExistsGCMRegistrationInMap(registrations_, kGCMAccountMapperAppId); 1310 !ExistsGCMRegistrationInMap(registrations_, kGCMAccountMapperAppId);
1297 } 1311 }
1298 1312
1299 } // namespace gcm 1313 } // namespace gcm
OLDNEW
« no previous file with comments | « no previous file | components/gcm_driver/gcm_client_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698