Add new certificateProvider extension API.
[chromium-blink-merge.git] / chrome / browser / ui / app_list / profile_loader.cc
blobec8d9a4e4103d1c7b1245cadd7d168a92cbd2ecf
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/ui/app_list/profile_loader.h"
7 #include "base/bind.h"
8 #include "base/files/file_path.h"
9 #include "chrome/browser/apps/scoped_keep_alive.h"
10 #include "chrome/browser/ui/app_list/profile_store.h"
11 #include "chrome/browser/ui/user_manager.h"
13 ProfileLoader::ProfileLoader(ProfileStore* profile_store)
14 : profile_store_(profile_store),
15 profile_load_sequence_id_(0),
16 pending_profile_loads_(0),
17 weak_factory_(this) {
20 ProfileLoader::~ProfileLoader() {
23 bool ProfileLoader::IsAnyProfileLoading() const {
24 return pending_profile_loads_ > 0;
27 void ProfileLoader::InvalidatePendingProfileLoads() {
28 ++profile_load_sequence_id_;
31 void ProfileLoader::LoadProfileInvalidatingOtherLoads(
32 const base::FilePath& profile_file_path,
33 base::Callback<void(Profile*)> callback) {
34 InvalidatePendingProfileLoads();
36 if (profile_store_->IsProfileLocked(profile_file_path)) {
37 UserManager::Show(base::FilePath(),
38 profiles::USER_MANAGER_NO_TUTORIAL,
39 profiles::USER_MANAGER_SELECT_PROFILE_APP_LAUNCHER);
40 return;
43 Profile* profile = profile_store_->GetProfileByPath(profile_file_path);
44 if (profile) {
45 callback.Run(profile);
46 return;
49 IncrementPendingProfileLoads();
50 profile_store_->LoadProfileAsync(
51 profile_file_path,
52 base::Bind(&ProfileLoader::OnProfileLoaded,
53 weak_factory_.GetWeakPtr(),
54 profile_load_sequence_id_,
55 callback));
58 void ProfileLoader::OnProfileLoaded(int profile_load_sequence_id,
59 base::Callback<void(Profile*)> callback,
60 Profile* profile) {
61 DecrementPendingProfileLoads();
62 if (profile_load_sequence_id == profile_load_sequence_id_)
63 callback.Run(profile);
66 void ProfileLoader::IncrementPendingProfileLoads() {
67 pending_profile_loads_++;
68 if (pending_profile_loads_ == 1)
69 keep_alive_.reset(new ScopedKeepAlive);
72 void ProfileLoader::DecrementPendingProfileLoads() {
73 pending_profile_loads_--;
74 if (pending_profile_loads_ == 0)
75 keep_alive_.reset();