blob: 35679b8119b624f2fe111aadcc065f7e71c22400 [file] [log] [blame]
// Copyright 2015 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 VRController_h
#define VRController_h
#include "core/dom/ContextLifecycleObserver.h"
#include "core/dom/Document.h"
#include "device/vr/vr_service.mojom-blink.h"
#include "modules/vr/VRDisplay.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "platform/heap/Handle.h"
#include "wtf/Deque.h"
#include <memory>
namespace blink {
class NavigatorVR;
class VRGetDevicesCallback;
class VRController final : public GarbageCollectedFinalized<VRController>,
public device::mojom::blink::VRServiceClient,
public ContextLifecycleObserver {
USING_GARBAGE_COLLECTED_MIXIN(VRController);
WTF_MAKE_NONCOPYABLE(VRController);
USING_PRE_FINALIZER(VRController, dispose);
public:
VRController(NavigatorVR*);
virtual ~VRController();
void getDisplays(ScriptPromiseResolver*);
void setListeningForActivate(bool);
void OnDisplayConnected(device::mojom::blink::VRDisplayPtr,
device::mojom::blink::VRDisplayClientRequest,
device::mojom::blink::VRDisplayInfoPtr) override;
DECLARE_VIRTUAL_TRACE();
private:
void onDisplaysSynced(unsigned);
void onGetDisplays();
// ContextLifecycleObserver.
void contextDestroyed() override;
void dispose();
Member<NavigatorVR> m_navigatorVR;
VRDisplayVector m_displays;
bool m_displaySynced;
unsigned m_numberOfSyncedDisplays;
Deque<std::unique_ptr<VRGetDevicesCallback>> m_pendingGetDevicesCallbacks;
device::mojom::blink::VRServicePtr m_service;
mojo::Binding<device::mojom::blink::VRServiceClient> m_binding;
};
} // namespace blink
#endif // VRController_h