Index: chrome/browser/chromeos/login/owner_key_reloader_service.cc |
diff --git a/chrome/browser/chromeos/login/owner_key_reloader_service.cc b/chrome/browser/chromeos/login/owner_key_reloader_service.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e86823342b220ef07f4029113ce9188c95d54cd8 |
--- /dev/null |
+++ b/chrome/browser/chromeos/login/owner_key_reloader_service.cc |
@@ -0,0 +1,72 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/chromeos/login/owner_key_reloader_service.h" |
+ |
+#include "base/bind.h" |
+#include "chrome/browser/chromeos/login/owner_key_reloader_service_factory.h" |
+#include "chrome/browser/chromeos/login/user.h" |
+#include "chrome/browser/chromeos/login/user_manager.h" |
+#include "chrome/browser/chromeos/settings/device_settings_service.h" |
+#include "chrome/browser/net/nss_context.h" |
+#include "chrome/browser/profiles/profile.h" |
+#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/resource_context.h" |
+#include "crypto/scoped_nss_types.h" |
+ |
+using content::BrowserThread; |
+ |
+namespace chromeos { |
+ |
+std::string OwnerKeyReloaderService::username_; |
Mattias Nissler (ping if slow)
2014/05/14 12:18:10
Static non-POD members are outlawed (unless someth
ygorshenin1
2014/05/14 15:30:07
Done.
|
+ |
+OwnerKeyReloaderService::OwnerKeyReloaderService(Profile* profile) |
+ : profile_(profile) { |
Mattias Nissler (ping if slow)
2014/05/14 12:18:10
I usually advice people against passing a Profile
ygorshenin1
2014/05/14 15:30:07
Unfortunately ResourceContext is not ready at the
Mattias Nissler (ping if slow)
2014/05/14 16:00:36
Hm, too bad :-/ Let's go with a Profile pointer th
|
+} |
+ |
+OwnerKeyReloaderService::~OwnerKeyReloaderService() { |
+} |
+ |
+// static |
+void OwnerKeyReloaderService::SetUsername(const std::string& username) { |
Mattias Nissler (ping if slow)
2014/05/14 12:18:10
Let's check whether we're on the same page here: I
ygorshenin1
2014/05/14 15:30:07
Done.
|
+ username_ = username; |
+ if (!UserManager::IsInitialized()) |
Mattias Nissler (ping if slow)
2014/05/14 12:18:10
Is this just for unit tests?
ygorshenin1
2014/05/14 15:30:07
Yes, it's just for unit tests.
On 2014/05/14 12:1
|
+ return; |
+ const User* user = UserManager::Get()->FindUser(username); |
+ if (!user || !user->is_profile_created()) |
+ return; |
+ Profile* profile = UserManager::Get()->GetProfileByUser(user); |
+ if (!profile) |
+ return; |
+ OwnerKeyReloaderServiceFactory::GetForProfile(profile)->ReloadOwnerKey(); |
+} |
+ |
+// static |
+std::string OwnerKeyReloaderService::GetUsername() { |
+ return username_; |
+} |
+ |
+void OwnerKeyReloaderService::ReloadOwnerKey() { |
+ if (!UserManager::IsInitialized() || !profile_) |
+ return; |
+ const User* user = UserManager::Get()->GetUserByProfile(profile_); |
+ if (!user || user->email() != GetUsername()) |
+ return; |
+ content::ResourceContext* context = |
+ profile_ ? profile_->GetResourceContext() : NULL; |
+ if (context) { |
+ BrowserThread::PostTaskAndReplyWithResult( |
+ BrowserThread::IO, |
+ FROM_HERE, |
+ base::Bind(&GetPublicNSSKeySlotForResourceContext, context), |
+ base::Bind(&DeviceSettingsService::InitOwner, |
+ base::Unretained(DeviceSettingsService::Get()), |
+ GetUsername())); |
+ } else { |
+ crypto::ScopedPK11Slot slot; |
+ DeviceSettingsService::Get()->InitOwner(GetUsername(), slot.Pass()); |
+ } |
+} |
+ |
+} // namespace chromeos |