| 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 #include "chrome/browser/android/vr_shell/vr_shell.h" | 5 #include "chrome/browser/android/vr_shell/vr_shell.h" |
| 6 | 6 |
| 7 #include <android/native_window_jni.h> | 7 #include <android/native_window_jni.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 #include "content/public/browser/browser_context.h" | 38 #include "content/public/browser/browser_context.h" |
| 39 #include "content/public/browser/browser_thread.h" | 39 #include "content/public/browser/browser_thread.h" |
| 40 #include "content/public/browser/navigation_controller.h" | 40 #include "content/public/browser/navigation_controller.h" |
| 41 #include "content/public/browser/render_view_host.h" | 41 #include "content/public/browser/render_view_host.h" |
| 42 #include "content/public/browser/render_widget_host.h" | 42 #include "content/public/browser/render_widget_host.h" |
| 43 #include "content/public/browser/render_widget_host_iterator.h" | 43 #include "content/public/browser/render_widget_host_iterator.h" |
| 44 #include "content/public/browser/render_widget_host_view.h" | 44 #include "content/public/browser/render_widget_host_view.h" |
| 45 #include "content/public/browser/web_contents.h" | 45 #include "content/public/browser/web_contents.h" |
| 46 #include "content/public/common/content_features.h" | 46 #include "content/public/common/content_features.h" |
| 47 #include "content/public/common/referrer.h" | 47 #include "content/public/common/referrer.h" |
| 48 #include "content/public/common/service_manager_connection.h" |
| 49 #include "device/geolocation/public/interfaces/geolocation_config.mojom.h" |
| 48 #include "device/vr/android/gvr/cardboard_gamepad_data_fetcher.h" | 50 #include "device/vr/android/gvr/cardboard_gamepad_data_fetcher.h" |
| 49 #include "device/vr/android/gvr/gvr_device.h" | 51 #include "device/vr/android/gvr/gvr_device.h" |
| 50 #include "device/vr/android/gvr/gvr_device_provider.h" | 52 #include "device/vr/android/gvr/gvr_device_provider.h" |
| 51 #include "device/vr/android/gvr/gvr_gamepad_data_fetcher.h" | 53 #include "device/vr/android/gvr/gvr_gamepad_data_fetcher.h" |
| 52 #include "gpu/command_buffer/common/mailbox.h" | 54 #include "gpu/command_buffer/common/mailbox.h" |
| 53 #include "jni/VrShellImpl_jni.h" | 55 #include "jni/VrShellImpl_jni.h" |
| 56 #include "services/service_manager/public/cpp/connector.h" |
| 54 #include "third_party/WebKit/public/platform/WebInputEvent.h" | 57 #include "third_party/WebKit/public/platform/WebInputEvent.h" |
| 55 #include "ui/android/view_android.h" | 58 #include "ui/android/view_android.h" |
| 56 #include "ui/android/window_android.h" | 59 #include "ui/android/window_android.h" |
| 57 #include "ui/base/page_transition_types.h" | 60 #include "ui/base/page_transition_types.h" |
| 58 #include "ui/display/display.h" | 61 #include "ui/display/display.h" |
| 59 #include "ui/display/screen.h" | 62 #include "ui/display/screen.h" |
| 60 #include "ui/gfx/android/java_bitmap.h" | 63 #include "ui/gfx/android/java_bitmap.h" |
| 61 #include "ui/gfx/codec/png_codec.h" | 64 #include "ui/gfx/codec/png_codec.h" |
| 62 #include "ui/gfx/geometry/size.h" | 65 #include "ui/gfx/geometry/size.h" |
| 63 #include "ui/gfx/native_widget_types.h" | 66 #include "ui/gfx/native_widget_types.h" |
| 64 #include "url/gurl.h" | 67 #include "url/gurl.h" |
| 65 | 68 |
| 66 using base::android::JavaParamRef; | 69 using base::android::JavaParamRef; |
| 67 using base::android::JavaRef; | 70 using base::android::JavaRef; |
| 68 | 71 |
| 69 namespace vr_shell { | 72 namespace vr_shell { |
| 70 | 73 |
| 71 namespace { | 74 namespace { |
| 72 vr_shell::VrShell* g_instance; | 75 vr_shell::VrShell* g_instance; |
| 73 | 76 |
| 74 constexpr base::TimeDelta poll_media_access_interval_ = | 77 constexpr base::TimeDelta poll_media_access_interval_ = |
| 75 base::TimeDelta::FromSecondsD(0.1); | 78 base::TimeDelta::FromSecondsD(0.2); |
| 76 | 79 |
| 77 constexpr base::TimeDelta kExitVrDueToUnsupportedModeDelay = | 80 constexpr base::TimeDelta kExitVrDueToUnsupportedModeDelay = |
| 78 base::TimeDelta::FromSeconds(5); | 81 base::TimeDelta::FromSeconds(5); |
| 79 | 82 |
| 80 void SetIsInVR(content::WebContents* contents, bool is_in_vr) { | 83 void SetIsInVR(content::WebContents* contents, bool is_in_vr) { |
| 81 if (contents && contents->GetRenderWidgetHostView()) { | 84 if (contents && contents->GetRenderWidgetHostView()) { |
| 82 // TODO(asimjour) Contents should not be aware of VR mode. Instead, we | 85 // TODO(asimjour) Contents should not be aware of VR mode. Instead, we |
| 83 // should add a flag for disabling specific UI such as the keyboard (see | 86 // should add a flag for disabling specific UI such as the keyboard (see |
| 84 // VrTabHelper for details). | 87 // VrTabHelper for details). |
| 85 contents->GetRenderWidgetHostView()->SetIsInVR(is_in_vr); | 88 contents->GetRenderWidgetHostView()->SetIsInVR(is_in_vr); |
| (...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 637 // be no duplicate WebContents here. | 640 // be no duplicate WebContents here. |
| 638 if (indicator->IsCapturingAudio(web_contents)) | 641 if (indicator->IsCapturingAudio(web_contents)) |
| 639 num_tabs_capturing_audio++; | 642 num_tabs_capturing_audio++; |
| 640 if (indicator->IsCapturingVideo(web_contents)) | 643 if (indicator->IsCapturingVideo(web_contents)) |
| 641 num_tabs_capturing_video++; | 644 num_tabs_capturing_video++; |
| 642 if (indicator->IsBeingMirrored(web_contents)) | 645 if (indicator->IsBeingMirrored(web_contents)) |
| 643 num_tabs_capturing_screen++; | 646 num_tabs_capturing_screen++; |
| 644 if (web_contents->IsConnectedToBluetoothDevice()) | 647 if (web_contents->IsConnectedToBluetoothDevice()) |
| 645 num_tabs_bluetooth_connected++; | 648 num_tabs_bluetooth_connected++; |
| 646 } | 649 } |
| 650 auto* connector = |
| 651 content::ServiceManagerConnection::GetForProcess()->GetConnector(); |
| 652 connector->BindInterface("content_browser", &geolocation_config_); |
| 653 |
| 654 geolocation_config_->IsHighAccuracyLocationBeingCaptured( |
| 655 base::Bind(&VrShell::SetHighAccuracyLocation, base::Unretained(this))); |
| 647 | 656 |
| 648 bool is_capturing_audio = num_tabs_capturing_audio > 0; | 657 bool is_capturing_audio = num_tabs_capturing_audio > 0; |
| 649 bool is_capturing_video = num_tabs_capturing_video > 0; | 658 bool is_capturing_video = num_tabs_capturing_video > 0; |
| 650 bool is_capturing_screen = num_tabs_capturing_screen > 0; | 659 bool is_capturing_screen = num_tabs_capturing_screen > 0; |
| 651 bool is_bluetooth_connected = num_tabs_bluetooth_connected > 0; | 660 bool is_bluetooth_connected = num_tabs_bluetooth_connected > 0; |
| 652 if (is_capturing_audio != is_capturing_audio_) { | 661 if (is_capturing_audio != is_capturing_audio_) { |
| 653 ui_->SetAudioCapturingIndicator(is_capturing_audio); | 662 ui_->SetAudioCapturingIndicator(is_capturing_audio); |
| 654 is_capturing_audio_ = is_capturing_audio; | 663 is_capturing_audio_ = is_capturing_audio; |
| 655 } | 664 } |
| 656 if (is_capturing_video != is_capturing_video_) { | 665 if (is_capturing_video != is_capturing_video_) { |
| 657 ui_->SetVideoCapturingIndicator(is_capturing_video); | 666 ui_->SetVideoCapturingIndicator(is_capturing_video); |
| 658 is_capturing_video_ = is_capturing_video; | 667 is_capturing_video_ = is_capturing_video; |
| 659 } | 668 } |
| 660 if (is_capturing_screen != is_capturing_screen_) { | 669 if (is_capturing_screen != is_capturing_screen_) { |
| 661 ui_->SetScreenCapturingIndicator(is_capturing_screen); | 670 ui_->SetScreenCapturingIndicator(is_capturing_screen); |
| 662 is_capturing_screen_ = is_capturing_screen; | 671 is_capturing_screen_ = is_capturing_screen; |
| 663 } | 672 } |
| 664 if (is_bluetooth_connected != is_bluetooth_connected_) { | 673 if (is_bluetooth_connected != is_bluetooth_connected_) { |
| 665 ui_->SetBluetoothConnectedIndicator(is_bluetooth_connected); | 674 ui_->SetBluetoothConnectedIndicator(is_bluetooth_connected); |
| 666 is_bluetooth_connected_ = is_bluetooth_connected; | 675 is_bluetooth_connected_ = is_bluetooth_connected; |
| 667 } | 676 } |
| 668 } | 677 } |
| 669 | 678 |
| 679 void VrShell::SetHighAccuracyLocation(bool high_accuracy_location) { |
| 680 if (high_accuracy_location == high_accuracy_location_) |
| 681 return; |
| 682 ui_->SetLocationAccessIndicator(high_accuracy_location); |
| 683 high_accuracy_location_ = high_accuracy_location; |
| 684 } |
| 685 |
| 670 void VrShell::SetContentCssSize(float width, float height, float dpr) { | 686 void VrShell::SetContentCssSize(float width, float height, float dpr) { |
| 671 JNIEnv* env = base::android::AttachCurrentThread(); | 687 JNIEnv* env = base::android::AttachCurrentThread(); |
| 672 Java_VrShellImpl_setContentCssSize(env, j_vr_shell_.obj(), width, height, | 688 Java_VrShellImpl_setContentCssSize(env, j_vr_shell_.obj(), width, height, |
| 673 dpr); | 689 dpr); |
| 674 } | 690 } |
| 675 | 691 |
| 676 void VrShell::ProcessContentGesture( | 692 void VrShell::ProcessContentGesture( |
| 677 std::unique_ptr<blink::WebInputEvent> event) { | 693 std::unique_ptr<blink::WebInputEvent> event) { |
| 678 if (input_manager_) { | 694 if (input_manager_) { |
| 679 input_manager_->ProcessUpdatedGesture(std::move(event)); | 695 input_manager_->ProcessUpdatedGesture(std::move(event)); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 733 jlong gvr_api, | 749 jlong gvr_api, |
| 734 jboolean reprojected_rendering) { | 750 jboolean reprojected_rendering) { |
| 735 return reinterpret_cast<intptr_t>(new VrShell( | 751 return reinterpret_cast<intptr_t>(new VrShell( |
| 736 env, obj, reinterpret_cast<ui::WindowAndroid*>(window_android), | 752 env, obj, reinterpret_cast<ui::WindowAndroid*>(window_android), |
| 737 for_web_vr, web_vr_autopresentation_expected, in_cct, | 753 for_web_vr, web_vr_autopresentation_expected, in_cct, |
| 738 VrShellDelegate::GetNativeVrShellDelegate(env, delegate), | 754 VrShellDelegate::GetNativeVrShellDelegate(env, delegate), |
| 739 reinterpret_cast<gvr_context*>(gvr_api), reprojected_rendering)); | 755 reinterpret_cast<gvr_context*>(gvr_api), reprojected_rendering)); |
| 740 } | 756 } |
| 741 | 757 |
| 742 } // namespace vr_shell | 758 } // namespace vr_shell |
| OLD | NEW |