1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/login/ownership_status_checker.h" 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/browser_thread.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace chromeos { 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenOwnershipStatusChecker::OwnershipStatusChecker(Callback* callback) 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : core_(new Core(callback)) { 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen core_->Check(); 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenOwnershipStatusChecker::~OwnershipStatusChecker() { 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen core_->Cancel(); 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenOwnershipStatusChecker::Core::Core(Callback* callback) 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : callback_(callback), 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen origin_loop_(base::MessageLoopProxy::CreateForCurrentThread()) {} 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid OwnershipStatusChecker::Core::Check() { 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DCHECK(origin_loop_->BelongsToCurrentThread()); 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OwnershipService::Status status = 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OwnershipService::GetSharedInstance()->GetStatus(false); 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (status != OwnershipService::OWNERSHIP_UNKNOWN) { 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Take a spin on the message loop in order to avoid reentrancy in callers. 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen origin_loop_->PostTask( 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FROM_HERE, 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewRunnableMethod(this, 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &OwnershipStatusChecker::Core::ReportResult, 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen status)); 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Switch to the file thread to make the blocking call. 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BrowserThread::PostTask( 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BrowserThread::FILE, FROM_HERE, 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewRunnableMethod(this, 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &OwnershipStatusChecker::Core::CheckOnFileThread)); 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid OwnershipStatusChecker::Core::Cancel() { 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DCHECK(origin_loop_->BelongsToCurrentThread()); 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen callback_.reset(); 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid OwnershipStatusChecker::Core::CheckOnFileThread() { 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OwnershipService::Status status = 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OwnershipService::GetSharedInstance()->GetStatus(true); 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen origin_loop_->PostTask( 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FROM_HERE, 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewRunnableMethod(this, 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &OwnershipStatusChecker::Core::ReportResult, 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen status)); 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid OwnershipStatusChecker::Core::ReportResult( 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OwnershipService::Status status) { 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DCHECK(origin_loop_->BelongsToCurrentThread()); 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (callback_.get()) { 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen callback_->Run(status); 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen callback_.reset(); 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace chromeos 70