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

Unified Diff: chrome/browser/chromeos/login/ownership_service.cc

Issue 10824112: Move Chrome OS device settings stuff to chrome/browser/chromeos/settings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « chrome/browser/chromeos/login/ownership_service.h ('k') | chrome/browser/chromeos/login/ownership_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698