Index: chrome/browser/chromeos/login/ownership_service.cc |
diff --git a/chrome/browser/chromeos/login/ownership_service.cc b/chrome/browser/chromeos/login/ownership_service.cc |
deleted file mode 100644 |
index f6509cd3932332ceba60ac9f9ea23a770c7007b1..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/login/ownership_service.cc |
+++ /dev/null |
@@ -1,259 +0,0 @@ |
-// Copyright (c) 2012 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/ownership_service.h" |
- |
-#include "base/command_line.h" |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/file_path.h" |
-#include "base/file_util.h" |
-#include "base/lazy_instance.h" |
-#include "base/synchronization/lock.h" |
-#include "base/task_runner_util.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/common/chrome_notification_types.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/notification_service.h" |
- |
-using content::BrowserThread; |
- |
-namespace chromeos { |
- |
-namespace { |
- |
-typedef std::pair<OwnershipService::Status, bool> OwnershipStatusReturnType; |
- |
-// Makes the check for ownership on the FILE thread and stores the result in the |
-// provided pointers. |
-OwnershipStatusReturnType CheckStatusOnFileThread() { |
- bool current_user_is_owner; |
- OwnershipService::Status status; |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- status = OwnershipService::GetSharedInstance()->IsAlreadyOwned() ? |
- OwnershipService::OWNERSHIP_TAKEN : OwnershipService::OWNERSHIP_NONE; |
- current_user_is_owner = |
- OwnershipService::GetSharedInstance()->IsCurrentUserOwner(); |
- return OwnershipStatusReturnType(status, current_user_is_owner); |
-} |
- |
-} // namespace |
- |
-static base::LazyInstance<OwnershipService> g_ownership_service = |
- LAZY_INSTANCE_INITIALIZER; |
- |
-// static |
-OwnershipService* OwnershipService::GetSharedInstance() { |
- return g_ownership_service.Pointer(); |
-} |
- |
-OwnershipService::OwnershipService() |
- : manager_(new OwnerManager), |
- utils_(OwnerKeyUtils::Create()), |
- ownership_status_(OWNERSHIP_UNKNOWN), |
- force_ownership_(CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kStubCrosSettings)) { |
- notification_registrar_.Add( |
- this, |
- chrome::NOTIFICATION_OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED, |
- content::NotificationService::AllSources()); |
-} |
- |
-OwnershipService::~OwnershipService() {} |
- |
-void OwnershipService::Prewarm() { |
- // Note that we cannot prewarm in constructor because in current codebase |
- // object is created before spawning threads. |
- if (g_ownership_service == this) { |
- // Start getting ownership status. |
- BrowserThread::PostTask( |
- BrowserThread::FILE, FROM_HERE, |
- base::Bind(&OwnershipService::FetchStatus, base::Unretained(this))); |
- } else { |
- // This can happen only for particular test: OwnershipServiceTest. It uses |
- // mocks and for that uses OwnershipService not as a regular singleton but |
- // as a resurrecting object. This behaviour conflicts with |
- // base::Unretained(). So avoid posting task in those circumstances |
- // in order to avoid accessing already deleted object. |
- } |
-} |
- |
-bool OwnershipService::IsAlreadyOwned() { |
- return file_util::PathExists(utils_->GetOwnerKeyFilePath()); |
-} |
- |
-OwnershipService::Status OwnershipService::GetStatus(bool blocking) { |
- if (force_ownership_) |
- return OWNERSHIP_TAKEN; |
- Status status = OWNERSHIP_UNKNOWN; |
- bool is_owned = false; |
- if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
- ownership_status_lock_.Acquire(); |
- status = ownership_status_; |
- ownership_status_lock_.Release(); |
- if (status != OWNERSHIP_UNKNOWN || !blocking) |
- return status; |
- // Under common usage there is very short lapse of time when ownership |
- // status is still unknown after constructing OwnershipService. |
- LOG(ERROR) << "Blocking on UI thread in OwnershipService::GetStatus"; |
- base::ThreadRestrictions::ScopedAllowIO allow_io; |
- is_owned = IsAlreadyOwned(); |
- } else { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- is_owned = IsAlreadyOwned(); |
- } |
- status = is_owned ? OWNERSHIP_TAKEN : OWNERSHIP_NONE; |
- SetStatus(status); |
- return status; |
-} |
- |
-void OwnershipService::StartLoadOwnerKeyAttempt() { |
- BrowserThread::PostTask( |
- BrowserThread::FILE, FROM_HERE, |
- base::Bind(&TryLoadOwnerKeyAttempt, base::Unretained(this))); |
-} |
- |
-void OwnershipService::StartUpdateOwnerKey(const std::vector<uint8>& new_key, |
- OwnerManager::KeyUpdateDelegate* d) { |
- BrowserThread::ID thread_id; |
- if (!BrowserThread::GetCurrentThreadIdentifier(&thread_id)) |
- thread_id = BrowserThread::UI; |
- BrowserThread::PostTask( |
- BrowserThread::FILE, FROM_HERE, |
- base::Bind(&OwnershipService::UpdateOwnerKey, base::Unretained(this), |
- thread_id, new_key, d)); |
- return; |
-} |
- |
-void OwnershipService::StartSigningAttempt(const std::string& data, |
- OwnerManager::Delegate* d) { |
- BrowserThread::ID thread_id; |
- if (!BrowserThread::GetCurrentThreadIdentifier(&thread_id)) |
- thread_id = BrowserThread::UI; |
- BrowserThread::PostTask( |
- BrowserThread::FILE, FROM_HERE, |
- base::Bind(&OwnershipService::TrySigningAttempt, base::Unretained(this), |
- thread_id, data, d)); |
- return; |
-} |
- |
-void OwnershipService::StartVerifyAttempt(const std::string& data, |
- const std::vector<uint8>& signature, |
- OwnerManager::Delegate* d) { |
- BrowserThread::ID thread_id; |
- if (!BrowserThread::GetCurrentThreadIdentifier(&thread_id)) |
- thread_id = BrowserThread::UI; |
- BrowserThread::PostTask( |
- BrowserThread::FILE, FROM_HERE, |
- base::Bind(&OwnershipService::TryVerifyAttempt, base::Unretained(this), |
- thread_id, data, signature, d)); |
- return; |
-} |
- |
-void OwnershipService::Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) { |
- if (type == chrome::NOTIFICATION_OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED) { |
- SetStatus(OWNERSHIP_TAKEN); |
- notification_registrar_.RemoveAll(); |
- } else { |
- NOTREACHED(); |
- } |
-} |
- |
-bool OwnershipService::IsCurrentUserOwner() { |
- if (force_ownership_) |
- return true; |
- // If this user has the private key associated with the owner's |
- // public key, this user is the owner. |
- return IsAlreadyOwned() && manager_->EnsurePrivateKey(); |
-} |
- |
-void OwnershipService::GetStatusAsync(const Callback& callback) { |
- PostTaskAndReplyWithResult( |
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE), |
- FROM_HERE, |
- base::Bind(&CheckStatusOnFileThread), |
- base::Bind(&OwnershipService::ReturnStatus, |
- callback)); |
-} |
- |
- |
-// static |
-void OwnershipService::UpdateOwnerKey(OwnershipService* service, |
- const BrowserThread::ID thread_id, |
- const std::vector<uint8>& new_key, |
- OwnerManager::KeyUpdateDelegate* d) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- service->manager()->UpdateOwnerKey(thread_id, new_key, d); |
-} |
- |
-// static |
-void OwnershipService::TryLoadOwnerKeyAttempt(OwnershipService* service) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- if (!service->IsAlreadyOwned()) { |
- VLOG(1) << "Device not yet owned"; |
- return; |
- } |
- service->manager()->LoadOwnerKey(); |
-} |
- |
-// static |
-void OwnershipService::TrySigningAttempt(OwnershipService* service, |
- const BrowserThread::ID thread_id, |
- const std::string& data, |
- OwnerManager::Delegate* d) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- if (!service->IsAlreadyOwned()) { |
- LOG(ERROR) << "Device not yet owned"; |
- BrowserThread::PostTask( |
- thread_id, FROM_HERE, |
- base::Bind(&OwnershipService::FailAttempt, d)); |
- return; |
- } |
- service->manager()->Sign(thread_id, data, d); |
-} |
- |
-// static |
-void OwnershipService::TryVerifyAttempt(OwnershipService* service, |
- const BrowserThread::ID thread_id, |
- const std::string& data, |
- const std::vector<uint8>& signature, |
- OwnerManager::Delegate* d) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- if (!service->IsAlreadyOwned()) { |
- LOG(ERROR) << "Device not yet owned"; |
- BrowserThread::PostTask( |
- thread_id, FROM_HERE, |
- base::Bind(&OwnershipService::FailAttempt, d)); |
- return; |
- } |
- service->manager()->Verify(thread_id, data, signature, d); |
-} |
- |
-// static |
-void OwnershipService::FailAttempt(OwnerManager::Delegate* d) { |
- d->OnKeyOpComplete(OwnerManager::KEY_UNAVAILABLE, std::vector<uint8>()); |
-} |
- |
-void OwnershipService::FetchStatus() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- Status status = IsAlreadyOwned() ? OWNERSHIP_TAKEN : OWNERSHIP_NONE; |
- SetStatus(status); |
-} |
- |
-void OwnershipService::SetStatus(Status new_status) { |
- DCHECK(new_status == OWNERSHIP_TAKEN || new_status == OWNERSHIP_NONE); |
- base::AutoLock lk(ownership_status_lock_); |
- ownership_status_ = new_status; |
-} |
- |
-// static |
-void OwnershipService::ReturnStatus(const Callback& callback, |
- OwnershipStatusReturnType status) { |
- callback.Run(status.first, status.second); |
-} |
- |
-} // namespace chromeos |