profile_loader.cc revision 868fa2fe829687343ffae624259930155e16dbd8
110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project// Copyright 2013 The Chromium Authors. All rights reserved. 210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be 310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project// found in the LICENSE file. 410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "chrome/browser/ui/app_list/profile_loader.h" 610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "base/bind.h" 810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "base/files/file_path.h" 910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "base/memory/weak_ptr.h" 1010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "chrome/browser/lifetime/application_lifetime.h" 1110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "chrome/browser/profiles/profile_manager.h" 1210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source ProjectProfileLoader::ProfileLoader(ProfileManager* profile_manager) 145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng : profile_manager_(profile_manager), 1510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project profile_load_sequence_id_(0), 165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng pending_profile_loads_(0), 175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng weak_factory_(this) { 1810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 1910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 2010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source ProjectProfileLoader::~ProfileLoader() { 2110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 2210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 2310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectbool ProfileLoader::AnyProfilesLoading() const { 2410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return pending_profile_loads_ > 0; 2510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 2610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 2710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid ProfileLoader::InvalidatePendingProfileLoads() { 2810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project profile_load_sequence_id_++; 2910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 3010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 3110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid ProfileLoader::LoadProfileInvalidatingOtherLoads( 3210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project const base::FilePath& profile_file_path, 3310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project base::Callback<void(Profile*)> callback) { 3410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project Profile* profile = profile_manager_->GetProfileByPath(profile_file_path); 3510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (profile) { 3610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project callback.Run(profile); 3710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project return; 3810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 3910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 4010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project IncrementPendingProfileLoads(); 4110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project profile_manager_->CreateProfileAsync( 4210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project profile_file_path, 4310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project base::Bind(&ProfileLoader::OnProfileLoaded, 4410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project weak_factory_.GetWeakPtr(), 4510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project profile_load_sequence_id_, 4610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project callback), 4710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project string16(), string16(), false); 4810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 4910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 5010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid ProfileLoader::OnProfileLoaded(int profile_load_sequence_id, 5110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project base::Callback<void(Profile*)> callback, 5210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project Profile* profile, 5310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project Profile::CreateStatus status) { 5410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project switch (status) { 5510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project case Profile::CREATE_STATUS_CREATED: 5610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project break; 5710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project case Profile::CREATE_STATUS_INITIALIZED: 5810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (profile_load_sequence_id == profile_load_sequence_id_) 5910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project callback.Run(profile); 6010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project DecrementPendingProfileLoads(); 6110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project break; 6210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project case Profile::CREATE_STATUS_LOCAL_FAIL: 6310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project case Profile::CREATE_STATUS_REMOTE_FAIL: 6410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project case Profile::CREATE_STATUS_CANCELED: 6510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project DecrementPendingProfileLoads(); 6610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project break; 6710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project case Profile::MAX_CREATE_STATUS: 6810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project NOTREACHED(); 6910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project break; 7010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project } 7110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 7210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 7310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid ProfileLoader::IncrementPendingProfileLoads() { 7410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project pending_profile_loads_++; 7510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project if (pending_profile_loads_ == 1) 7610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project chrome::StartKeepAlive(); 7710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 7810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 7910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid ProfileLoader::DecrementPendingProfileLoads() { 80b415faba7482dd7ee3335f0f1518333554e3da0dJeff Brown pending_profile_loads_--; 81b415faba7482dd7ee3335f0f1518333554e3da0dJeff Brown if (pending_profile_loads_ == 0) 82b415faba7482dd7ee3335f0f1518333554e3da0dJeff Brown chrome::EndKeepAlive(); 83b415faba7482dd7ee3335f0f1518333554e3da0dJeff Brown} 8410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project