| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_H_ | 5 #ifndef CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_H_ |
| 6 #define CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_H_ | 6 #define CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_H_ |
| 7 | 7 |
| 8 #include <jni.h> | 8 #include <jni.h> |
| 9 | 9 |
| 10 #include <memory> | 10 #include <memory> |
| 11 | 11 |
| 12 #include "base/android/jni_weak_ref.h" | 12 #include "base/android/jni_weak_ref.h" |
| 13 #include "base/callback.h" | 13 #include "base/callback.h" |
| 14 #include "base/macros.h" | 14 #include "base/macros.h" |
| 15 #include "base/memory/weak_ptr.h" | 15 #include "base/memory/weak_ptr.h" |
| 16 #include "base/single_thread_task_runner.h" | 16 #include "base/single_thread_task_runner.h" |
| 17 #include "chrome/browser/android/vr_shell/ui_interface.h" | 17 #include "chrome/browser/android/vr_shell/ui_interface.h" |
| 18 #include "chrome/browser/android/vr_shell/vr_controller_model.h" | 18 #include "chrome/browser/android/vr_shell/vr_controller_model.h" |
| 19 #include "content/public/browser/web_contents_observer.h" | 19 #include "content/public/browser/web_contents_observer.h" |
| 20 #include "device/vr/android/gvr/cardboard_gamepad_data_provider.h" |
| 20 #include "device/vr/android/gvr/gvr_delegate.h" | 21 #include "device/vr/android/gvr/gvr_delegate.h" |
| 21 #include "device/vr/android/gvr/gvr_gamepad_data_provider.h" | 22 #include "device/vr/android/gvr/gvr_gamepad_data_provider.h" |
| 22 #include "device/vr/vr_service.mojom.h" | 23 #include "device/vr/vr_service.mojom.h" |
| 23 #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/
gvr.h" | 24 #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/
gvr.h" |
| 24 #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/
gvr_types.h" | 25 #include "third_party/gvr-android-sdk/src/libraries/headers/vr/gvr/capi/include/
gvr_types.h" |
| 25 | 26 |
| 26 namespace blink { | 27 namespace blink { |
| 27 class WebInputEvent; | 28 class WebInputEvent; |
| 28 } | 29 } |
| 29 | 30 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 57 SHOW_TAB, | 58 SHOW_TAB, |
| 58 OPEN_NEW_TAB, | 59 OPEN_NEW_TAB, |
| 59 EXIT_PRESENT, | 60 EXIT_PRESENT, |
| 60 }; | 61 }; |
| 61 | 62 |
| 62 class VrMetricsHelper; | 63 class VrMetricsHelper; |
| 63 | 64 |
| 64 // The native instance of the Java VrShell. This class is not threadsafe and | 65 // The native instance of the Java VrShell. This class is not threadsafe and |
| 65 // must only be used on the UI thread. | 66 // must only be used on the UI thread. |
| 66 class VrShell : public device::PresentingGvrDelegate, | 67 class VrShell : public device::PresentingGvrDelegate, |
| 67 device::GvrGamepadDataProvider { | 68 device::GvrGamepadDataProvider, |
| 69 device::CardboardGamepadDataProvider { |
| 68 public: | 70 public: |
| 69 VrShell(JNIEnv* env, | 71 VrShell(JNIEnv* env, |
| 70 jobject obj, | 72 jobject obj, |
| 71 ui::WindowAndroid* window, | 73 ui::WindowAndroid* window, |
| 72 bool for_web_vr, | 74 bool for_web_vr, |
| 73 bool in_cct, | 75 bool in_cct, |
| 74 VrShellDelegate* delegate, | 76 VrShellDelegate* delegate, |
| 75 gvr_context* gvr_api, | 77 gvr_context* gvr_api, |
| 76 bool reprojected_rendering); | 78 bool reprojected_rendering); |
| 77 void SwapContents( | 79 void SwapContents( |
| 78 JNIEnv* env, | 80 JNIEnv* env, |
| 79 const base::android::JavaParamRef<jobject>& obj, | 81 const base::android::JavaParamRef<jobject>& obj, |
| 80 const base::android::JavaParamRef<jobject>& web_contents, | 82 const base::android::JavaParamRef<jobject>& web_contents, |
| 81 const base::android::JavaParamRef<jobject>& touch_event_synthesizer); | 83 const base::android::JavaParamRef<jobject>& touch_event_synthesizer); |
| 82 void LoadUIContent(JNIEnv* env, | 84 void LoadUIContent(JNIEnv* env, |
| 83 const base::android::JavaParamRef<jobject>& obj); | 85 const base::android::JavaParamRef<jobject>& obj); |
| 84 void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); | 86 void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); |
| 85 void OnTriggerEvent(JNIEnv* env, | 87 void OnTriggerEvent(JNIEnv* env, |
| 86 const base::android::JavaParamRef<jobject>& obj); | 88 const base::android::JavaParamRef<jobject>& obj, |
| 89 bool touched); |
| 87 void OnPause(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); | 90 void OnPause(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); |
| 88 void OnResume(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); | 91 void OnResume(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); |
| 89 void SetSurface(JNIEnv* env, | 92 void SetSurface(JNIEnv* env, |
| 90 const base::android::JavaParamRef<jobject>& obj, | 93 const base::android::JavaParamRef<jobject>& obj, |
| 91 const base::android::JavaParamRef<jobject>& surface); | 94 const base::android::JavaParamRef<jobject>& surface); |
| 92 void SetWebVrMode(JNIEnv* env, | 95 void SetWebVrMode(JNIEnv* env, |
| 93 const base::android::JavaParamRef<jobject>& obj, | 96 const base::android::JavaParamRef<jobject>& obj, |
| 94 bool enabled); | 97 bool enabled); |
| 95 bool GetWebVrMode(JNIEnv* env, | 98 bool GetWebVrMode(JNIEnv* env, |
| 96 const base::android::JavaParamRef<jobject>& obj); | 99 const base::android::JavaParamRef<jobject>& obj); |
| 97 void OnFullscreenChanged(bool enabled); | 100 void OnFullscreenChanged(bool enabled); |
| 98 void OnLoadProgressChanged(JNIEnv* env, | 101 void OnLoadProgressChanged(JNIEnv* env, |
| 99 const base::android::JavaParamRef<jobject>& obj, | 102 const base::android::JavaParamRef<jobject>& obj, |
| 100 double progress); | 103 double progress); |
| 101 void OnTabListCreated(JNIEnv* env, | 104 void OnTabListCreated(JNIEnv* env, |
| 102 const base::android::JavaParamRef<jobject>& obj, | 105 const base::android::JavaParamRef<jobject>& obj, |
| 103 jobjectArray tabs, | 106 jobjectArray tabs, |
| 104 jobjectArray incognito_tabs); | 107 jobjectArray incognito_tabs); |
| 105 void OnTabUpdated(JNIEnv* env, | 108 void OnTabUpdated(JNIEnv* env, |
| 106 const base::android::JavaParamRef<jobject>& obj, | 109 const base::android::JavaParamRef<jobject>& obj, |
| 107 jboolean incognito, | 110 jboolean incognito, |
| 108 jint id, | 111 jint id, |
| 109 jstring jtitle); | 112 jstring jtitle); |
| 110 void OnTabRemoved(JNIEnv* env, | 113 void OnTabRemoved(JNIEnv* env, |
| 111 const base::android::JavaParamRef<jobject>& obj, | 114 const base::android::JavaParamRef<jobject>& obj, |
| 112 jboolean incognito, | 115 jboolean incognito, |
| 113 jint id); | 116 jint id); |
| 114 void OnContentPaused(bool paused); | 117 void OnContentPaused(bool paused); |
| 115 void NavigateBack(); | 118 void NavigateBack(); |
| 119 void ToggleCardboardGamepad(bool enabled); |
| 116 base::android::ScopedJavaGlobalRef<jobject> TakeContentSurface( | 120 base::android::ScopedJavaGlobalRef<jobject> TakeContentSurface( |
| 117 JNIEnv* env, | 121 JNIEnv* env, |
| 118 const base::android::JavaParamRef<jobject>& obj); | 122 const base::android::JavaParamRef<jobject>& obj); |
| 119 void RestoreContentSurface(JNIEnv* env, | 123 void RestoreContentSurface(JNIEnv* env, |
| 120 const base::android::JavaParamRef<jobject>& obj); | 124 const base::android::JavaParamRef<jobject>& obj); |
| 121 void SetHistoryButtonsEnabled(JNIEnv* env, | 125 void SetHistoryButtonsEnabled(JNIEnv* env, |
| 122 const base::android::JavaParamRef<jobject>& obj, | 126 const base::android::JavaParamRef<jobject>& obj, |
| 123 jboolean can_go_back, | 127 jboolean can_go_back, |
| 124 jboolean can_go_forward); | 128 jboolean can_go_forward); |
| 125 | 129 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 155 | 159 |
| 156 void ForceExitVr(); | 160 void ForceExitVr(); |
| 157 void ExitPresent(); | 161 void ExitPresent(); |
| 158 void ExitFullscreen(); | 162 void ExitFullscreen(); |
| 159 | 163 |
| 160 void ProcessContentGesture(std::unique_ptr<blink::WebInputEvent> event); | 164 void ProcessContentGesture(std::unique_ptr<blink::WebInputEvent> event); |
| 161 void SubmitControllerModel(std::unique_ptr<VrControllerModel> model); | 165 void SubmitControllerModel(std::unique_ptr<VrControllerModel> model); |
| 162 | 166 |
| 163 // device::GvrGamepadDataProvider implementation. | 167 // device::GvrGamepadDataProvider implementation. |
| 164 void UpdateGamepadData(device::GvrGamepadData) override; | 168 void UpdateGamepadData(device::GvrGamepadData) override; |
| 165 void RegisterGamepadDataFetcher(device::GvrGamepadDataFetcher*) override; | 169 void RegisterGvrGamepadDataFetcher(device::GvrGamepadDataFetcher*) override; |
| 170 |
| 171 // device::CardboardGamepadDataProvider implementation. |
| 172 void RegisterCardboardGamepadDataFetcher( |
| 173 device::CardboardGamepadDataFetcher*) override; |
| 166 | 174 |
| 167 private: | 175 private: |
| 168 ~VrShell() override; | 176 ~VrShell() override; |
| 169 void PostToGlThreadWhenReady(const base::Closure& task); | 177 void PostToGlThreadWhenReady(const base::Closure& task); |
| 170 void SetUiState(); | 178 void SetUiState(); |
| 171 | 179 |
| 172 // device::GvrDelegate implementation. | 180 // device::GvrDelegate implementation. |
| 173 void SetWebVRSecureOrigin(bool secure_origin) override; | 181 void SetWebVRSecureOrigin(bool secure_origin) override; |
| 174 void SubmitWebVRFrame(int16_t frame_index, | 182 void SubmitWebVRFrame(int16_t frame_index, |
| 175 const gpu::MailboxHolder& mailbox) override; | 183 const gpu::MailboxHolder& mailbox) override; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 base::CancelableClosure poll_capturing_media_task_; | 229 base::CancelableClosure poll_capturing_media_task_; |
| 222 bool is_capturing_audio_ = false; | 230 bool is_capturing_audio_ = false; |
| 223 bool is_capturing_video_ = false; | 231 bool is_capturing_video_ = false; |
| 224 bool is_capturing_screen_ = false; | 232 bool is_capturing_screen_ = false; |
| 225 | 233 |
| 226 // TODO(mthiesse): Remove the need for this to be stored here. | 234 // TODO(mthiesse): Remove the need for this to be stored here. |
| 227 // crbug.com/674594 | 235 // crbug.com/674594 |
| 228 gvr_context* gvr_api_; | 236 gvr_context* gvr_api_; |
| 229 | 237 |
| 230 // Are we currently providing a gamepad factory to the gamepad manager? | 238 // Are we currently providing a gamepad factory to the gamepad manager? |
| 231 bool gamepad_source_active_ = false; | 239 bool gvr_gamepad_source_active_ = false; |
| 232 // Registered fetcher, must remain alive for UpdateGamepadData calls. | 240 bool cardboard_gamepad_source_active_ = false; |
| 241 |
| 242 // Registered fetchers, must remain alive for UpdateGamepadData calls. |
| 233 // That's ok since the fetcher is only destroyed from VrShell's destructor. | 243 // That's ok since the fetcher is only destroyed from VrShell's destructor. |
| 234 device::GvrGamepadDataFetcher* gamepad_data_fetcher_ = nullptr; | 244 device::GvrGamepadDataFetcher* gvr_gamepad_data_fetcher_ = nullptr; |
| 245 device::CardboardGamepadDataFetcher* cardboard_gamepad_data_fetcher_ = |
| 246 nullptr; |
| 247 int64_t cardboard_gamepad_timer_ = 0; |
| 235 | 248 |
| 236 base::WeakPtrFactory<VrShell> weak_ptr_factory_; | 249 base::WeakPtrFactory<VrShell> weak_ptr_factory_; |
| 237 | 250 |
| 238 DISALLOW_COPY_AND_ASSIGN(VrShell); | 251 DISALLOW_COPY_AND_ASSIGN(VrShell); |
| 239 }; | 252 }; |
| 240 | 253 |
| 241 bool RegisterVrShell(JNIEnv* env); | 254 bool RegisterVrShell(JNIEnv* env); |
| 242 | 255 |
| 243 } // namespace vr_shell | 256 } // namespace vr_shell |
| 244 | 257 |
| 245 #endif // CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_H_ | 258 #endif // CHROME_BROWSER_ANDROID_VR_SHELL_VR_SHELL_H_ |
| OLD | NEW |