// 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 "content/browser/gamepad/gamepad_service.h" #include "base/bind.h" #include "base/logging.h" #include "base/memory/singleton.h" #include "content/browser/gamepad/gamepad_data_fetcher.h" #include "content/browser/gamepad/gamepad_provider.h" #include "content/public/browser/render_process_host.h" namespace content { GamepadService::GamepadService() : num_readers_(0) { } GamepadService::GamepadService(scoped_ptr fetcher) : num_readers_(0), provider_(new GamepadProvider(fetcher.Pass())) { thread_checker_.DetachFromThread(); } GamepadService::~GamepadService() { } GamepadService* GamepadService::GetInstance() { return Singleton >::get(); } void GamepadService::AddConsumer() { DCHECK(thread_checker_.CalledOnValidThread()); num_readers_++; DCHECK(num_readers_ > 0); if (!provider_) provider_.reset(new GamepadProvider); provider_->Resume(); } void GamepadService::RemoveConsumer() { DCHECK(thread_checker_.CalledOnValidThread()); --num_readers_; DCHECK(num_readers_ >= 0); if (num_readers_ == 0) provider_->Pause(); } void GamepadService::RegisterForUserGesture(const base::Closure& closure) { DCHECK(num_readers_ > 0); DCHECK(thread_checker_.CalledOnValidThread()); provider_->RegisterForUserGesture(closure); } void GamepadService::Terminate() { provider_.reset(); } base::SharedMemoryHandle GamepadService::GetSharedMemoryHandleForProcess( base::ProcessHandle handle) { DCHECK(thread_checker_.CalledOnValidThread()); return provider_->GetSharedMemoryHandleForProcess(handle); } } // namespace content