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

Side by Side Diff: chrome/browser/chromeos/app_mode/kiosk_app_manager.cc

Issue 1165323004: We should use UserID object to identify users instead of username. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 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 "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" 5 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 9
10 #include "base/barrier_closure.h" 10 #include "base/barrier_closure.h"
(...skipping 20 matching lines...) Expand all
31 #include "chrome/browser/extensions/external_loader.h" 31 #include "chrome/browser/extensions/external_loader.h"
32 #include "chrome/browser/extensions/external_provider_impl.h" 32 #include "chrome/browser/extensions/external_provider_impl.h"
33 #include "chrome/browser/lifetime/application_lifetime.h" 33 #include "chrome/browser/lifetime/application_lifetime.h"
34 #include "chrome/common/chrome_paths.h" 34 #include "chrome/common/chrome_paths.h"
35 #include "chrome/common/extensions/extension_constants.h" 35 #include "chrome/common/extensions/extension_constants.h"
36 #include "chromeos/chromeos_paths.h" 36 #include "chromeos/chromeos_paths.h"
37 #include "chromeos/cryptohome/async_method_caller.h" 37 #include "chromeos/cryptohome/async_method_caller.h"
38 #include "chromeos/dbus/dbus_thread_manager.h" 38 #include "chromeos/dbus/dbus_thread_manager.h"
39 #include "chromeos/settings/cros_settings_names.h" 39 #include "chromeos/settings/cros_settings_names.h"
40 #include "components/ownership/owner_key_util.h" 40 #include "components/ownership/owner_key_util.h"
41 #include "components/user_manager/user_id.h"
41 #include "components/user_manager/user_manager.h" 42 #include "components/user_manager/user_manager.h"
42 #include "content/public/browser/browser_thread.h" 43 #include "content/public/browser/browser_thread.h"
43 #include "extensions/common/extension_urls.h" 44 #include "extensions/common/extension_urls.h"
44 45
45 namespace chromeos { 46 namespace chromeos {
46 47
47 namespace { 48 namespace {
48 49
49 // Domain that is used for kiosk-app account IDs. 50 // Domain that is used for kiosk-app account IDs.
50 const char kKioskAppAccountDomain[] = "kiosk-apps"; 51 const char kKioskAppAccountDomain[] = "kiosk-apps";
51 52
52 // Preference for the dictionary of user ids for which cryptohomes have to be 53 // Preference for the dictionary of user ids for which cryptohomes have to be
53 // removed upon browser restart. 54 // removed upon browser restart.
54 const char kKioskUsersToRemove[] = "kiosk-users-to-remove"; 55 const char kKioskUsersToRemove[] = "kiosk-users-to-remove";
55 56
56 std::string GenerateKioskAppAccountId(const std::string& app_id) { 57 std::string GenerateKioskAppAccountId(const std::string& app_id) {
57 return app_id + '@' + kKioskAppAccountDomain; 58 return app_id + '@' + kKioskAppAccountDomain;
58 } 59 }
59 60
60 void ScheduleDelayedCryptohomeRemoval(const std::string& user_id, 61 void ScheduleDelayedCryptohomeRemoval(const user_manager::UserID& user_id,
61 const std::string& app_id) { 62 const std::string& app_id) {
62 PrefService* local_state = g_browser_process->local_state(); 63 PrefService* local_state = g_browser_process->local_state();
63 DictionaryPrefUpdate dict_update(local_state, kKioskUsersToRemove); 64 DictionaryPrefUpdate dict_update(local_state, kKioskUsersToRemove);
64 dict_update->SetStringWithoutPathExpansion(user_id, app_id); 65 dict_update->SetStringWithoutPathExpansion(user_id.GetUserEmail(), app_id);
65 local_state->CommitPendingWrite(); 66 local_state->CommitPendingWrite();
66 } 67 }
67 68
68 void CancelDelayedCryptohomeRemoval(const std::string& user_id) { 69 void CancelDelayedCryptohomeRemoval(const user_manager::UserID& user_id) {
69 PrefService* local_state = g_browser_process->local_state(); 70 PrefService* local_state = g_browser_process->local_state();
70 DictionaryPrefUpdate dict_update(local_state, kKioskUsersToRemove); 71 DictionaryPrefUpdate dict_update(local_state, kKioskUsersToRemove);
71 dict_update->RemoveWithoutPathExpansion(user_id, NULL); 72 dict_update->RemoveWithoutPathExpansion(user_id.GetUserEmail(), NULL);
72 local_state->CommitPendingWrite(); 73 local_state->CommitPendingWrite();
73 } 74 }
74 75
75 void OnRemoveAppCryptohomeComplete(const std::string& user_id, 76 void OnRemoveAppCryptohomeComplete(const user_manager::UserID& user_id,
76 const std::string& app, 77 const std::string& app,
77 const base::Closure& callback, 78 const base::Closure& callback,
78 bool success, 79 bool success,
79 cryptohome::MountError return_code) { 80 cryptohome::MountError return_code) {
80 if (success) { 81 if (success) {
81 CancelDelayedCryptohomeRemoval(user_id); 82 CancelDelayedCryptohomeRemoval(user_id);
82 } else { 83 } else {
83 ScheduleDelayedCryptohomeRemoval(user_id, app); 84 ScheduleDelayedCryptohomeRemoval(user_id, app);
84 LOG(ERROR) << "Remove cryptohome for " << app 85 LOG(ERROR) << "Remove cryptohome for " << app
85 << " failed, return code: " << return_code; 86 << " failed, return code: " << return_code;
86 } 87 }
87 if (!callback.is_null()) 88 if (!callback.is_null())
88 callback.Run(); 89 callback.Run();
89 } 90 }
90 91
91 void PerformDelayedCryptohomeRemovals(bool service_is_available) { 92 void PerformDelayedCryptohomeRemovals(bool service_is_available) {
92 if (!service_is_available) { 93 if (!service_is_available) {
93 LOG(ERROR) << "Crypthomed is not available."; 94 LOG(ERROR) << "Crypthomed is not available.";
94 return; 95 return;
95 } 96 }
96 97
97 PrefService* local_state = g_browser_process->local_state(); 98 PrefService* local_state = g_browser_process->local_state();
98 const base::DictionaryValue* dict = 99 const base::DictionaryValue* dict =
99 local_state->GetDictionary(kKioskUsersToRemove); 100 local_state->GetDictionary(kKioskUsersToRemove);
100 for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { 101 for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) {
101 std::string user_id = it.key(); 102 const user_manager::UserID user_id(std::string() /* gaia_id */, it.key());
Denis Kuznetsov (DE-MUC) 2015/06/10 16:50:46 FromUserEmail()
102 std::string app_id; 103 std::string app_id;
103 it.value().GetAsString(&app_id); 104 it.value().GetAsString(&app_id);
104 VLOG(1) << "Removing obsolete crypthome for " << app_id; 105 VLOG(1) << "Removing obsolete crypthome for " << app_id;
105 cryptohome::AsyncMethodCaller::GetInstance()->AsyncRemove( 106 cryptohome::AsyncMethodCaller::GetInstance()->AsyncRemove(
106 user_id, 107 user_id,
107 base::Bind(&OnRemoveAppCryptohomeComplete, 108 base::Bind(&OnRemoveAppCryptohomeComplete,
108 user_id, 109 user_id,
109 app_id, 110 app_id,
110 base::Closure())); 111 base::Closure()));
111 } 112 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 bool is_extension_pending, 169 bool is_extension_pending,
169 bool auto_launched_with_zero_delay) 170 bool auto_launched_with_zero_delay)
170 : app_id(data.app_id()), 171 : app_id(data.app_id()),
171 user_id(data.user_id()), 172 user_id(data.user_id()),
172 name(data.name()), 173 name(data.name()),
173 icon(data.icon()), 174 icon(data.icon()),
174 is_loading(data.IsLoading() || is_extension_pending), 175 is_loading(data.IsLoading() || is_extension_pending),
175 was_auto_launched_with_zero_delay(auto_launched_with_zero_delay) { 176 was_auto_launched_with_zero_delay(auto_launched_with_zero_delay) {
176 } 177 }
177 178
178 KioskAppManager::App::App() : is_loading(false), 179 KioskAppManager::App::App() : user_id(std::string(), std::string()),
Denis Kuznetsov (DE-MUC) 2015/06/10 16:50:46 EmptyUserId() ?
180 is_loading(false),
179 was_auto_launched_with_zero_delay(false) {} 181 was_auto_launched_with_zero_delay(false) {}
180 182
181 KioskAppManager::App::~App() {} 183 KioskAppManager::App::~App() {}
182 184
183 std::string KioskAppManager::GetAutoLaunchApp() const { 185 std::string KioskAppManager::GetAutoLaunchApp() const {
184 return auto_launch_app_id_; 186 return auto_launch_app_id_;
185 } 187 }
186 188
187 void KioskAppManager::SetAutoLaunchApp(const std::string& app_id, 189 void KioskAppManager::SetAutoLaunchApp(const std::string& app_id,
188 OwnerSettingsServiceChromeOS* service) { 190 OwnerSettingsServiceChromeOS* service) {
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 new_app->Load(); 604 new_app->Load();
603 } 605 }
604 CancelDelayedCryptohomeRemoval(it->user_id); 606 CancelDelayedCryptohomeRemoval(it->user_id);
605 } 607 }
606 608
607 base::Closure cryptohomes_barrier_closure; 609 base::Closure cryptohomes_barrier_closure;
608 610
609 const user_manager::User* active_user = 611 const user_manager::User* active_user =
610 user_manager::UserManager::Get()->GetActiveUser(); 612 user_manager::UserManager::Get()->GetActiveUser();
611 if (active_user) { 613 if (active_user) {
612 std::string active_user_id = active_user->GetUserID(); 614 user_manager::UserID active_user_id = active_user->GetUserID();
Denis Kuznetsov (DE-MUC) 2015/06/10 16:50:46 auto?
613 for (const auto& it : old_apps) { 615 for (const auto& it : old_apps) {
614 if (it.second->user_id() == active_user_id) { 616 if (it.second->user_id() == active_user_id) {
615 VLOG(1) << "Currently running kiosk app removed from policy, exiting"; 617 VLOG(1) << "Currently running kiosk app removed from policy, exiting";
616 cryptohomes_barrier_closure = BarrierClosure( 618 cryptohomes_barrier_closure = BarrierClosure(
617 old_apps.size(), base::Bind(&chrome::AttemptUserExit)); 619 old_apps.size(), base::Bind(&chrome::AttemptUserExit));
618 break; 620 break;
619 } 621 }
620 } 622 }
621 } 623 }
622 624
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 *cache_dir = user_data_dir.AppendASCII(kCrxCacheDir); 736 *cache_dir = user_data_dir.AppendASCII(kCrxCacheDir);
735 } 737 }
736 738
737 void KioskAppManager::GetCrxUnpackDir(base::FilePath* unpack_dir) { 739 void KioskAppManager::GetCrxUnpackDir(base::FilePath* unpack_dir) {
738 base::FilePath temp_dir; 740 base::FilePath temp_dir;
739 base::GetTempDir(&temp_dir); 741 base::GetTempDir(&temp_dir);
740 *unpack_dir = temp_dir.AppendASCII(kCrxUnpackDir); 742 *unpack_dir = temp_dir.AppendASCII(kCrxUnpackDir);
741 } 743 }
742 744
743 } // namespace chromeos 745 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698