| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_WEBXR_ANDROID_OPENXR_PLATFORM_HELPER_ANDROID_H_ |
| #define COMPONENTS_WEBXR_ANDROID_OPENXR_PLATFORM_HELPER_ANDROID_H_ |
| |
| #include "device/vr/openxr/openxr_platform_helper.h" |
| |
| #include <memory> |
| |
| #include "base/android/scoped_java_ref.h" |
| #include "components/webxr/android/xr_session_coordinator.h" |
| #include "device/vr/openxr/openxr_platform.h" |
| |
| namespace content { |
| class WebContents; |
| } |
| |
| namespace webxr { |
| |
| // Android specific implementation of the OpenXrPlatformHelper. |
| class OpenXrPlatformHelperAndroid : public device::OpenXrPlatformHelper { |
| public: |
| OpenXrPlatformHelperAndroid(); |
| ~OpenXrPlatformHelperAndroid() override; |
| |
| // Queries whether or not the hardware can currently support an OpenXR session |
| // and updates a few internal values about the kinds of sessions that can be |
| // supported. Returns false if the device cannot support OpenXR. |
| bool CheckHardwareSupport(content::WebContents* web_contents); |
| |
| // OpenXrPlatformHelper |
| std::unique_ptr<device::OpenXrGraphicsBinding> GetGraphicsBinding() override; |
| void GetPlatformCreateInfo( |
| const device::OpenXrCreateInfo& create_info, |
| PlatformCreateInfoReadyCallback result_callback, |
| PlatormInitiatedShutdownCallback shutdown_callback) override; |
| device::mojom::XRDeviceData GetXRDeviceData() override; |
| bool Initialize() override; |
| |
| XrResult DestroyInstance(XrInstance& instance) override; |
| |
| void PrepareForSessionShutdown( |
| base::OnceClosure shutdown_ready_callback) override; |
| |
| private: |
| // Creates a temporary XrInstance that's only used for querying information |
| // about the OpenXR system, and not able to present session content. |
| XrResult CreateTemporaryInstance(XrInstance* instance, |
| content::WebContents* web_contents); |
| |
| void OnInstanceCreateFailure() override; |
| |
| void OnXrActivityReady(PlatformCreateInfoReadyCallback callback, |
| const base::android::JavaParamRef<jobject>& activity); |
| |
| std::unique_ptr<XrSessionCoordinator> session_coordinator_; |
| |
| XrInstanceCreateInfoAndroidKHR create_info_{ |
| XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR}; |
| base::android::ScopedJavaGlobalRef<jobject> activity_; |
| base::android::ScopedJavaGlobalRef<jobject> app_context_; |
| |
| bool is_ar_blend_mode_supported_ = false; |
| }; |
| |
| } // namespace webxr |
| |
| #endif // COMPONENTS_WEBXR_ANDROID_OPENXR_PLATFORM_HELPER_ANDROID_H_ |