| Index: chromecast/base/device_capabilities_impl.h
|
| diff --git a/chromecast/base/device_capabilities_impl.h b/chromecast/base/device_capabilities_impl.h
|
| index e58774cf088d51ed221fc4374cbb6ae5e943394e..4e61644b1fbb00a85791ca717055ec8818695fbe 100644
|
| --- a/chromecast/base/device_capabilities_impl.h
|
| +++ b/chromecast/base/device_capabilities_impl.h
|
| @@ -5,11 +5,17 @@
|
| #ifndef CHROMECAST_BASE_DEVICE_CAPABILITIES_IMPL_H_
|
| #define CHROMECAST_BASE_DEVICE_CAPABILITIES_IMPL_H_
|
|
|
| -#include "base/containers/hash_tables.h"
|
| -#include "base/observer_list.h"
|
| -#include "base/threading/thread_checker.h"
|
| +#include "base/containers/scoped_ptr_hash_map.h"
|
| +#include "base/macros.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "base/observer_list_threadsafe.h"
|
| +#include "base/synchronization/lock.h"
|
| #include "chromecast/base/device_capabilities.h"
|
|
|
| +namespace base {
|
| +class SingleThreadTaskRunner;
|
| +}
|
| +
|
| namespace chromecast {
|
|
|
| class DeviceCapabilitiesImpl : public DeviceCapabilities {
|
| @@ -22,10 +28,8 @@ class DeviceCapabilitiesImpl : public DeviceCapabilities {
|
| Validator* GetValidator(const std::string& key) const override;
|
| bool BluetoothSupported() const override;
|
| bool DisplaySupported() const override;
|
| - bool GetCapability(const std::string& path,
|
| - const base::Value** out_value) const override;
|
| - const std::string& GetCapabilitiesString() const override;
|
| - const base::DictionaryValue* GetCapabilities() const override;
|
| + scoped_ptr<base::Value> GetCapability(const std::string& path) const override;
|
| + scoped_refptr<Data> GetData() const override;
|
| void SetCapability(const std::string& path,
|
| scoped_ptr<base::Value> proposed_value) override;
|
| void MergeDictionary(const base::DictionaryValue& dict_value) override;
|
| @@ -33,28 +37,56 @@ class DeviceCapabilitiesImpl : public DeviceCapabilities {
|
| void RemoveCapabilitiesObserver(Observer* observer) override;
|
|
|
| private:
|
| + class ValidatorInfo : public base::SupportsWeakPtr<ValidatorInfo> {
|
| + public:
|
| + explicit ValidatorInfo(Validator* validator);
|
| + ~ValidatorInfo();
|
| +
|
| + Validator* validator() const { return validator_; }
|
| +
|
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner() const {
|
| + return task_runner_;
|
| + }
|
| +
|
| + void Validate(const std::string& path,
|
| + scoped_ptr<base::Value> proposed_value) const;
|
| +
|
| + private:
|
| + Validator* const validator_;
|
| + // TaskRunner of thread that validator_ was registered on
|
| + const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ValidatorInfo);
|
| + };
|
| +
|
| // For DeviceCapabilitiesImpl()
|
| friend class DeviceCapabilities;
|
| // For SetValidatedValueInternal()
|
| friend class DeviceCapabilities::Validator;
|
|
|
| - // Map from capability key to corresponding Validator. Gets updated
|
| + // Map from capability key to corresponding ValidatorInfo. Gets updated
|
| // in Register()/Unregister().
|
| - typedef base::hash_map<std::string, Validator*> ValidatorMap;
|
| + typedef base::ScopedPtrHashMap<std::string, scoped_ptr<ValidatorInfo>>
|
| + ValidatorMap;
|
|
|
| // Internal constructor used by static DeviceCapabilities::Create*() methods.
|
| DeviceCapabilitiesImpl();
|
|
|
| - void SetValidatedValueInternal(const std::string& path,
|
| - scoped_ptr<base::Value> new_value) override;
|
| - void UpdateStrAndNotifyChanged(const std::string& path);
|
| + void SetValidatedValue(const std::string& path,
|
| + scoped_ptr<base::Value> new_value) override;
|
| +
|
| + // Lock for reading/writing data_ pointer
|
| + mutable base::Lock data_lock_;
|
| + // Lock for reading/writing validator_map_
|
| + mutable base::Lock validation_lock_;
|
|
|
| - scoped_ptr<base::DictionaryValue> capabilities_;
|
| - scoped_ptr<const std::string> capabilities_str_;
|
| + scoped_refptr<Data> data_;
|
| + // TaskRunner for capability writes. All internal writes to data_ must occur
|
| + // on task_runner_for_writes_'s thread.
|
| + const scoped_refptr<base::SingleThreadTaskRunner> task_runner_for_writes_;
|
|
|
| ValidatorMap validator_map_;
|
| - base::ObserverList<Observer> observer_list_;
|
| - base::ThreadChecker thread_checker_;
|
| + const scoped_refptr<base::ObserverListThreadSafe<Observer>> observer_list_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(DeviceCapabilitiesImpl);
|
| };
|
|
|