blob: 91c324e1548a1a687f4ad78515816ccdf636c42f [file] [log] [blame]
// Copyright 2016 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 SensorProviderProxy_h
#define SensorProviderProxy_h
#include "core/frame/LocalFrame.h"
#include "device/generic_sensor/public/interfaces/sensor.mojom-blink.h"
#include "device/generic_sensor/public/interfaces/sensor_provider.mojom-blink.h"
#include "platform/Supplementable.h"
#include "platform/heap/Handle.h"
namespace blink {
class SensorProxy;
class SensorReadingFactory;
// This class wraps 'SensorProvider' mojo interface and it manages
// 'SensorProxy' instances.
class SensorProviderProxy final
: public GarbageCollectedFinalized<SensorProviderProxy>,
public Supplement<LocalFrame> {
USING_GARBAGE_COLLECTED_MIXIN(SensorProviderProxy);
WTF_MAKE_NONCOPYABLE(SensorProviderProxy);
public:
static SensorProviderProxy* from(LocalFrame*);
~SensorProviderProxy();
SensorProxy* createSensorProxy(device::mojom::blink::SensorType,
Page*,
std::unique_ptr<SensorReadingFactory>);
SensorProxy* getSensorProxy(device::mojom::blink::SensorType);
DECLARE_VIRTUAL_TRACE();
private:
friend class SensorProxy; // To call getSensorProvider().
explicit SensorProviderProxy(LocalFrame&);
static const char* supplementName();
void initializeIfNeeded(LocalFrame*);
bool isInitialized() const { return m_sensorProvider; }
device::mojom::blink::SensorProvider* getSensorProvider() const {
return m_sensorProvider.get();
}
void onSensorProviderConnectionError();
using SensorsSet = HeapHashSet<WeakMember<SensorProxy>>;
SensorsSet m_sensorProxies;
device::mojom::blink::SensorProviderPtr m_sensorProvider;
};
} // namespace blink
#endif // SensorProviderProxy_h