diff options
Diffstat (limited to 'content/browser/sensors')
-rw-r--r-- | content/browser/sensors/sensors_provider.cc | 21 | ||||
-rw-r--r-- | content/browser/sensors/sensors_provider.h | 57 | ||||
-rw-r--r-- | content/browser/sensors/sensors_provider_impl.cc | 35 | ||||
-rw-r--r-- | content/browser/sensors/sensors_provider_impl.h | 42 |
4 files changed, 155 insertions, 0 deletions
diff --git a/content/browser/sensors/sensors_provider.cc b/content/browser/sensors/sensors_provider.cc new file mode 100644 index 0000000..a3c3dce --- /dev/null +++ b/content/browser/sensors/sensors_provider.cc @@ -0,0 +1,21 @@ +// Copyright (c) 2011 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/sensors/sensors_provider.h" + +#include "content/browser/sensors/sensors_provider_impl.h" + +namespace sensors { + +Provider* Provider::GetInstance() { + return ProviderImpl::GetInstance(); +} + +Provider::Provider() { +} + +Provider::~Provider() { +} + +} // namespace sensors diff --git a/content/browser/sensors/sensors_provider.h b/content/browser/sensors/sensors_provider.h new file mode 100644 index 0000000..72bc15f --- /dev/null +++ b/content/browser/sensors/sensors_provider.h @@ -0,0 +1,57 @@ +// Copyright (c) 2011 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. + +#ifndef CONTENT_BROWSER_SENSORS_PROVIDER_H_ +#define CONTENT_BROWSER_SENSORS_PROVIDER_H_ +#pragma once + +#include "base/basictypes.h" +#include "content/common/sensors_listener.h" + +// The sensors API will unify various types of sensor data into a set of +// channels, each of which provides change events and periodic updates. +// +// This version of the API is intended only to support the experimental screen +// rotation code and is not for general use. In particular, the final listener +// will declare generic |OnSensorChanged| and |OnSensorUpdated| methods, rather +// than the special-purpose |OnScreenOrientationChanged|. + +namespace sensors { + +// TODO(cwolfe): Finish defining the initial set of channels and replace this +// with the generic sensor provider. +// +class Provider { + public: + static Provider* GetInstance(); + + // Adds a sensor listener. The listener will receive callbacks to indicate + // sensor changes and updates until it is removed. + // + // This method may be called in any thread. Callbacks on a listener will + // always be executed in the thread which added that listener. + virtual void AddListener(Listener* listener) = 0; + + // Removes a sensor listener. + // + // This method must be called in the same thread which added the listener. + // If the listener is not currently subscribed, this method may be called in + // any thread. + virtual void RemoveListener(Listener* listener) = 0; + + // Broadcasts a change to the coarse screen orientation. + // + // This method may be called in any thread. + virtual void ScreenOrientationChanged(const ScreenOrientation& change) = 0; + + protected: + Provider(); + virtual ~Provider(); + + DISALLOW_COPY_AND_ASSIGN(Provider); +}; + +} // namespace sensors + +#endif // CONTENT_BROWSER_SENSORS_PROVIDER_H_ diff --git a/content/browser/sensors/sensors_provider_impl.cc b/content/browser/sensors/sensors_provider_impl.cc new file mode 100644 index 0000000..9c151f7 --- /dev/null +++ b/content/browser/sensors/sensors_provider_impl.cc @@ -0,0 +1,35 @@ +// Copyright (c) 2011 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/sensors/sensors_provider_impl.h" + +#include "base/memory/singleton.h" + +namespace sensors { + +ProviderImpl* ProviderImpl::GetInstance() { + return Singleton<ProviderImpl>::get(); +} + +ProviderImpl::ProviderImpl() + : listeners_(new ListenerList()) { +} + +ProviderImpl::~ProviderImpl() { +} + +void ProviderImpl::AddListener(Listener* listener) { + listeners_->AddObserver(listener); +} + +void ProviderImpl::RemoveListener(Listener* listener) { + listeners_->RemoveObserver(listener); +} + +void ProviderImpl::ScreenOrientationChanged( + const ScreenOrientation& change) { + listeners_->Notify(&Listener::OnScreenOrientationChanged, change); +} + +} // namespace sensors diff --git a/content/browser/sensors/sensors_provider_impl.h b/content/browser/sensors/sensors_provider_impl.h new file mode 100644 index 0000000..a4a6b04 --- /dev/null +++ b/content/browser/sensors/sensors_provider_impl.h @@ -0,0 +1,42 @@ +// Copyright (c) 2011 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. + +#ifndef CONTENT_BROWSER_SENSORS_PROVIDER_IMPL_H_ +#define CONTENT_BROWSER_SENSORS_PROVIDER_IMPL_H_ +#pragma once + +#include "base/compiler_specific.h" +#include "base/memory/ref_counted.h" +#include "base/observer_list_threadsafe.h" +#include "content/browser/sensors/sensors_provider.h" + +template <typename T> struct DefaultSingletonTraits; + +namespace sensors { + +class ProviderImpl : public Provider { + public: + static ProviderImpl* GetInstance(); + + // Provider implementation + virtual void AddListener(Listener* listener) OVERRIDE; + virtual void RemoveListener(Listener* listener) OVERRIDE; + virtual void ScreenOrientationChanged( + const ScreenOrientation& change) OVERRIDE; + + private: + friend struct DefaultSingletonTraits<ProviderImpl>; + + ProviderImpl(); + virtual ~ProviderImpl(); + + typedef ObserverListThreadSafe<Listener> ListenerList; + scoped_refptr<ListenerList> listeners_; + + DISALLOW_COPY_AND_ASSIGN(ProviderImpl); +}; + +} // namespace sensors + +#endif // CONTENT_BROWSER_SENSORS_PROVIDER_IMPL_H_ |