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 |