Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(260)

Side by Side Diff: chrome/browser/android/vr_shell/vr_shell.cc

Issue 2428383006: Decouple VR Shell DPR and CSS size from Physical Displays. (Closed)
Patch Set: Address bshe comments + minor fix Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/metrics/histogram_macros.h" 7 #include "base/metrics/histogram_macros.h"
8 #include "chrome/browser/android/vr_shell/ui_elements.h" 8 #include "chrome/browser/android/vr_shell/ui_elements.h"
9 #include "chrome/browser/android/vr_shell/ui_interface.h" 9 #include "chrome/browser/android/vr_shell/ui_interface.h"
10 #include "chrome/browser/android/vr_shell/ui_scene.h" 10 #include "chrome/browser/android/vr_shell/ui_scene.h"
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 mouse_event.x = x; 134 mouse_event.x = x;
135 mouse_event.y = y; 135 mouse_event.y = y;
136 mouse_event.windowX = x; 136 mouse_event.windowX = x;
137 mouse_event.windowY = y; 137 mouse_event.windowY = y;
138 mouse_event.timeStampSeconds = timestamp; 138 mouse_event.timeStampSeconds = timestamp;
139 mouse_event.clickCount = 1; 139 mouse_event.clickCount = 1;
140 mouse_event.modifiers = 0; 140 mouse_event.modifiers = 0;
141 141
142 return mouse_event; 142 return mouse_event;
143 } 143 }
144
145 } // namespace 144 } // namespace
146 145
147 namespace vr_shell { 146 namespace vr_shell {
148 147
149 VrShell::VrShell(JNIEnv* env, 148 VrShell::VrShell(JNIEnv* env,
150 jobject obj, 149 jobject obj,
151 content::WebContents* main_contents, 150 content::WebContents* main_contents,
152 ui::WindowAndroid* content_window, 151 ui::WindowAndroid* content_window,
153 content::WebContents* ui_contents, 152 content::WebContents* ui_contents,
154 ui::WindowAndroid* ui_window, 153 ui::WindowAndroid* ui_window,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 } 206 }
208 g_instance = nullptr; 207 g_instance = nullptr;
209 gl::init::ClearGLBindings(); 208 gl::init::ClearGLBindings();
210 } 209 }
211 210
212 void VrShell::SetDelegate(JNIEnv* env, 211 void VrShell::SetDelegate(JNIEnv* env,
213 const base::android::JavaParamRef<jobject>& obj, 212 const base::android::JavaParamRef<jobject>& obj,
214 const base::android::JavaParamRef<jobject>& delegate) { 213 const base::android::JavaParamRef<jobject>& delegate) {
215 base::AutoLock lock(gvr_init_lock_); 214 base::AutoLock lock(gvr_init_lock_);
216 delegate_ = VrShellDelegate::GetNativeDelegate(env, delegate); 215 delegate_ = VrShellDelegate::GetNativeDelegate(env, delegate);
217 if (gvr_api_) { 216 if (swap_chain_.get()) {
218 main_thread_task_runner_->PostTask( 217 main_thread_task_runner_->PostTask(
219 FROM_HERE, base::Bind(&device::GvrDeviceProvider::OnGvrDelegateReady, 218 FROM_HERE, base::Bind(&device::GvrDeviceProvider::OnGvrDelegateReady,
220 delegate_->GetDeviceProvider(), 219 delegate_->GetDeviceProvider(),
221 weak_ptr_factory_.GetWeakPtr())); 220 weak_ptr_factory_.GetWeakPtr()));
222 } 221 }
223 } 222 }
224 223
225 enum class ViewerType { 224 enum class ViewerType {
226 UNKNOWN_TYPE = 0, 225 UNKNOWN_TYPE = 0,
227 CARDBOARD = 1, 226 CARDBOARD = 1,
228 DAYDREAM = 2, 227 DAYDREAM = 2,
229 VIEWER_TYPE_MAX, 228 VIEWER_TYPE_MAX,
230 }; 229 };
231 230
232 void VrShell::GvrInit(JNIEnv* env, 231 void VrShell::GvrInit(JNIEnv* env,
233 const JavaParamRef<jobject>& obj, 232 const JavaParamRef<jobject>& obj,
234 jlong native_gvr_api) { 233 jlong native_gvr_api) {
235 base::AutoLock lock(gvr_init_lock_);
236
237 // set the initial webvr state 234 // set the initial webvr state
238 metrics_helper_->SetVRActive(true); 235 metrics_helper_->SetVRActive(true);
239 236
240 gvr_api_ = 237 gvr_api_ =
241 gvr::GvrApi::WrapNonOwned(reinterpret_cast<gvr_context*>(native_gvr_api)); 238 gvr::GvrApi::WrapNonOwned(reinterpret_cast<gvr_context*>(native_gvr_api));
242 // TODO(klausw,crbug.com/655722): should report OnGvrDelegateReady here once 239 // TODO(klausw,crbug.com/655722): should report OnGvrDelegateReady here once
243 // we switch to using a WebVR render surface. We currently need to wait for 240 // we switch to using a WebVR render surface. We currently need to wait for
244 // the compositor window's size to be known first. See also 241 // the compositor window's size to be known first. See also
245 // ContentSurfaceChanged. 242 // ContentSurfaceChanged.
246 controller_.reset( 243 controller_.reset(
(...skipping 15 matching lines...) Expand all
262 break; 259 break;
263 } 260 }
264 UMA_HISTOGRAM_ENUMERATION("VRViewerType", static_cast<int>(viewerType), 261 UMA_HISTOGRAM_ENUMERATION("VRViewerType", static_cast<int>(viewerType),
265 static_cast<int>(ViewerType::VIEWER_TYPE_MAX)); 262 static_cast<int>(ViewerType::VIEWER_TYPE_MAX));
266 } 263 }
267 264
268 void VrShell::InitializeGl(JNIEnv* env, 265 void VrShell::InitializeGl(JNIEnv* env,
269 const JavaParamRef<jobject>& obj, 266 const JavaParamRef<jobject>& obj,
270 jint content_texture_handle, 267 jint content_texture_handle,
271 jint ui_texture_handle) { 268 jint ui_texture_handle) {
269 base::AutoLock lock(gvr_init_lock_);
272 CHECK(gl::GetGLImplementation() != gl::kGLImplementationNone || 270 CHECK(gl::GetGLImplementation() != gl::kGLImplementationNone ||
273 gl::init::InitializeGLOneOff()); 271 gl::init::InitializeGLOneOff());
274 272
275 content_texture_id_ = content_texture_handle; 273 content_texture_id_ = content_texture_handle;
276 ui_texture_id_ = ui_texture_handle; 274 ui_texture_id_ = ui_texture_handle;
277 275
278 // While WebVR is going through the compositor path, it shares 276 // While WebVR is going through the compositor path, it shares
279 // the same texture ID. This will change once it gets its own 277 // the same texture ID. This will change once it gets its own
280 // surface, but store it separately to avoid future confusion. 278 // surface, but store it separately to avoid future confusion.
281 // TODO(klausw,crbug.com/655722): remove this. 279 // TODO(klausw,crbug.com/655722): remove this.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 new gvr::BufferViewport(gvr_api_->CreateBufferViewport())); 335 new gvr::BufferViewport(gvr_api_->CreateBufferViewport()));
338 buffer_viewport_list_->GetBufferViewport(GVR_LEFT_EYE, 336 buffer_viewport_list_->GetBufferViewport(GVR_LEFT_EYE,
339 webvr_left_viewport_.get()); 337 webvr_left_viewport_.get());
340 webvr_left_viewport_->SetSourceBufferIndex(kFramePrimaryBuffer); 338 webvr_left_viewport_->SetSourceBufferIndex(kFramePrimaryBuffer);
341 339
342 webvr_right_viewport_.reset( 340 webvr_right_viewport_.reset(
343 new gvr::BufferViewport(gvr_api_->CreateBufferViewport())); 341 new gvr::BufferViewport(gvr_api_->CreateBufferViewport()));
344 buffer_viewport_list_->GetBufferViewport(GVR_RIGHT_EYE, 342 buffer_viewport_list_->GetBufferViewport(GVR_RIGHT_EYE,
345 webvr_right_viewport_.get()); 343 webvr_right_viewport_.get());
346 webvr_right_viewport_->SetSourceBufferIndex(kFramePrimaryBuffer); 344 webvr_right_viewport_->SetSourceBufferIndex(kFramePrimaryBuffer);
345
346 if (delegate_) {
347 main_thread_task_runner_->PostTask(
348 FROM_HERE, base::Bind(&device::GvrDeviceProvider::OnGvrDelegateReady,
349 delegate_->GetDeviceProvider(),
350 weak_ptr_factory_.GetWeakPtr()));
351 }
347 } 352 }
348 353
349 void VrShell::UpdateController(const gvr::Vec3f& forward_vector) { 354 void VrShell::UpdateController(const gvr::Vec3f& forward_vector) {
350 controller_->UpdateState(); 355 controller_->UpdateState();
351 356
352 #if defined(ENABLE_VR_SHELL) 357 #if defined(ENABLE_VR_SHELL)
353 // Note that button up/down state is transient, so IsButtonUp only returns 358 // Note that button up/down state is transient, so IsButtonUp only returns
354 // true for a single frame (and we're guaranteed not to miss it). 359 // true for a single frame (and we're guaranteed not to miss it).
355 if (controller_->IsButtonUp( 360 if (controller_->IsButtonUp(
356 gvr::ControllerButton::GVR_CONTROLLER_BUTTON_APP)) { 361 gvr::ControllerButton::GVR_CONTROLLER_BUTTON_APP)) {
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 if (distance_to_plane > 0 && distance_to_plane < closest_element_distance) { 460 if (distance_to_plane > 0 && distance_to_plane < closest_element_distance) {
456 float x = rect_2d_point.x + 0.5f; 461 float x = rect_2d_point.x + 0.5f;
457 float y = 0.5f - rect_2d_point.y; 462 float y = 0.5f - rect_2d_point.y;
458 bool is_inside = x >= 0.0f && x < 1.0f && y >= 0.0f && y < 1.0f; 463 bool is_inside = x >= 0.0f && x < 1.0f && y >= 0.0f && y < 1.0f;
459 if (!is_inside) 464 if (!is_inside)
460 continue; 465 continue;
461 466
462 closest_element_distance = distance_to_plane; 467 closest_element_distance = distance_to_plane;
463 Rectf pixel_rect; 468 Rectf pixel_rect;
464 if (plane->content_quad) { 469 if (plane->content_quad) {
465 pixel_rect = {0, 0, content_tex_width_, content_tex_height_}; 470 pixel_rect = {0, 0, content_tex_css_width_, content_tex_css_height_};
466 } else { 471 } else {
467 pixel_rect = {plane->copy_rect.x, plane->copy_rect.y, 472 pixel_rect = {plane->copy_rect.x, plane->copy_rect.y,
468 plane->copy_rect.width, plane->copy_rect.height}; 473 plane->copy_rect.width, plane->copy_rect.height};
469 } 474 }
470 pixel_x = pixel_rect.width * x + pixel_rect.x; 475 pixel_x = pixel_rect.width * x + pixel_rect.x;
471 pixel_y = pixel_rect.height * y + pixel_rect.y; 476 pixel_y = pixel_rect.height * y + pixel_rect.y;
472 477
473 target_point_ = plane_intersection_point; 478 target_point_ = plane_intersection_point;
474 target_element_ = plane.get(); 479 target_element_ = plane.get();
475 input_target = plane->content_quad ? content_input_manager_.get() 480 input_target = plane->content_quad ? content_input_manager_.get()
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 render_size_primary_webvr_.width = width; 698 render_size_primary_webvr_.width = width;
694 render_size_primary_webvr_.height = height; 699 render_size_primary_webvr_.height = height;
695 // TODO(klausw,crbug.com/655722): set the WebVR render surface size here once 700 // TODO(klausw,crbug.com/655722): set the WebVR render surface size here once
696 // we have that. 701 // we have that.
697 } 702 }
698 703
699 gvr::Sizei VrShell::GetWebVRCompositorSurfaceSize() { 704 gvr::Sizei VrShell::GetWebVRCompositorSurfaceSize() {
700 // This is a stopgap while we're using the WebVR compositor rendering path. 705 // This is a stopgap while we're using the WebVR compositor rendering path.
701 // TODO(klausw,crbug.com/655722): Remove this method and member once we're 706 // TODO(klausw,crbug.com/655722): Remove this method and member once we're
702 // using a separate WebVR render surface. 707 // using a separate WebVR render surface.
703 return content_tex_pixels_for_webvr_; 708 return content_tex_physical_size_;
704 } 709 }
705 710
706 711
707 void VrShell::DrawUiView(const gvr::Mat4f* head_pose, 712 void VrShell::DrawUiView(const gvr::Mat4f* head_pose,
708 const std::vector<const ContentRectangle*>& elements, 713 const std::vector<const ContentRectangle*>& elements,
709 const gvr::Sizei& render_size, int viewport_offset) { 714 const gvr::Sizei& render_size, int viewport_offset) {
710 TRACE_EVENT0("gpu", "VrShell::DrawUiView"); 715 TRACE_EVENT0("gpu", "VrShell::DrawUiView");
711 for (auto eye : {GVR_LEFT_EYE, GVR_RIGHT_EYE}) { 716 for (auto eye : {GVR_LEFT_EYE, GVR_RIGHT_EYE}) {
712 buffer_viewport_list_->GetBufferViewport( 717 buffer_viewport_list_->GetBufferViewport(
713 eye + viewport_offset, buffer_viewport_.get()); 718 eye + viewport_offset, buffer_viewport_.get());
(...skipping 25 matching lines...) Expand all
739 void VrShell::DrawElements( 744 void VrShell::DrawElements(
740 const gvr::Mat4f& render_matrix, 745 const gvr::Mat4f& render_matrix,
741 const std::vector<const ContentRectangle*>& elements) { 746 const std::vector<const ContentRectangle*>& elements) {
742 for (const auto& rect : elements) { 747 for (const auto& rect : elements) {
743 Rectf copy_rect; 748 Rectf copy_rect;
744 jint texture_handle; 749 jint texture_handle;
745 if (rect->content_quad) { 750 if (rect->content_quad) {
746 copy_rect = {0, 0, 1, 1}; 751 copy_rect = {0, 0, 1, 1};
747 texture_handle = content_texture_id_; 752 texture_handle = content_texture_id_;
748 } else { 753 } else {
749 copy_rect.x = static_cast<float>(rect->copy_rect.x) / ui_tex_width_; 754 copy_rect.x = static_cast<float>(rect->copy_rect.x) / ui_tex_css_width_;
750 copy_rect.y = static_cast<float>(rect->copy_rect.y) / ui_tex_height_; 755 copy_rect.y = static_cast<float>(rect->copy_rect.y) / ui_tex_css_height_;
751 copy_rect.width = static_cast<float>(rect->copy_rect.width) / 756 copy_rect.width = static_cast<float>(rect->copy_rect.width) /
752 ui_tex_width_; 757 ui_tex_css_width_;
753 copy_rect.height = static_cast<float>(rect->copy_rect.height) / 758 copy_rect.height = static_cast<float>(rect->copy_rect.height) /
754 ui_tex_height_; 759 ui_tex_css_height_;
755 texture_handle = ui_texture_id_; 760 texture_handle = ui_texture_id_;
756 } 761 }
757 gvr::Mat4f transform = MatrixMul(render_matrix, rect->transform.to_world); 762 gvr::Mat4f transform = MatrixMul(render_matrix, rect->transform.to_world);
758 vr_shell_renderer_->GetTexturedQuadRenderer()->Draw( 763 vr_shell_renderer_->GetTexturedQuadRenderer()->Draw(
759 texture_handle, transform, copy_rect); 764 texture_handle, transform, copy_rect);
760 } 765 }
761 } 766 }
762 767
763 void VrShell::DrawCursor(const gvr::Mat4f& render_matrix) { 768 void VrShell::DrawCursor(const gvr::Mat4f& render_matrix) {
764 gvr::Mat4f mat; 769 gvr::Mat4f mat;
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 void VrShell::UpdateWebVRTextureBounds(const gvr::Rectf& left_bounds, 920 void VrShell::UpdateWebVRTextureBounds(const gvr::Rectf& left_bounds,
916 const gvr::Rectf& right_bounds) { 921 const gvr::Rectf& right_bounds) {
917 webvr_left_viewport_->SetSourceUv(left_bounds); 922 webvr_left_viewport_->SetSourceUv(left_bounds);
918 webvr_right_viewport_->SetSourceUv(right_bounds); 923 webvr_right_viewport_->SetSourceUv(right_bounds);
919 } 924 }
920 925
921 gvr::GvrApi* VrShell::gvr_api() { 926 gvr::GvrApi* VrShell::gvr_api() {
922 return gvr_api_.get(); 927 return gvr_api_.get();
923 } 928 }
924 929
925 void VrShell::ContentSurfaceChanged(JNIEnv* env, 930 void VrShell::SurfacesChanged(JNIEnv* env,
926 const JavaParamRef<jobject>& object, 931 const JavaParamRef<jobject>& object,
927 jint width, 932 const JavaParamRef<jobject>& content_surface,
928 jint height, 933 const JavaParamRef<jobject>& ui_surface) {
929 const JavaParamRef<jobject>& surface) { 934 content_compositor_->SurfaceChanged(content_surface);
930 TRACE_EVENT0("gpu", "VrShell::ContentSurfaceChanged"); 935 ui_compositor_->SurfaceChanged(ui_surface);
931 // If we have a delegate, must trigger "ready" callback one time only.
932 // Do so the first time we got a nonzero size. (This assumes it doesn't
933 // change, but once we get resize ability we'll no longer need this hack.)
934 // TODO(klausw,crbug.com/655722): remove when we have surface support.
935 bool delegate_not_ready = delegate_ && !content_tex_pixels_for_webvr_.width;
936
937 content_compositor_->SurfaceChanged((int)width, (int)height, surface);
938 content_tex_pixels_for_webvr_.width = width;
939 content_tex_pixels_for_webvr_.height = height;
940 float scale_factor = display::Screen::GetScreen()
941 ->GetPrimaryDisplay().device_scale_factor();
942 content_tex_width_ = width / scale_factor;
943 content_tex_height_ = height / scale_factor;
944
945 // TODO(klausw,crbug.com/655722): move this back to GvrInit once we have
946 // our own WebVR surface.
947 if (delegate_ && delegate_not_ready) {
948 main_thread_task_runner_->PostTask(
949 FROM_HERE, base::Bind(&device::GvrDeviceProvider::OnGvrDelegateReady,
950 delegate_->GetDeviceProvider(),
951 weak_ptr_factory_.GetWeakPtr()));
952 }
953 } 936 }
954 937
955 void VrShell::UiSurfaceChanged(JNIEnv* env, 938 void VrShell::ContentBoundsChanged(JNIEnv* env,
956 const JavaParamRef<jobject>& object, 939 const JavaParamRef<jobject>& object,
957 jint width, 940 jint width, jint height, jfloat dpr) {
958 jint height, 941 TRACE_EVENT0("gpu", "VrShell::ContentBoundsChanged");
959 const JavaParamRef<jobject>& surface) { 942 content_tex_physical_size_.width = width;
960 ui_compositor_->SurfaceChanged((int)width, (int)height, surface); 943 content_tex_physical_size_.height = height;
961 float scale_factor = display::Screen::GetScreen() 944 // TODO(mthiesse): Synchronize with GL thread, and update tex css size in
962 ->GetPrimaryDisplay().device_scale_factor(); 945 // response to MainFrameWasResized, not here.
963 ui_tex_width_ = width / scale_factor; 946 content_tex_css_width_ = width / dpr;
964 ui_tex_height_ = height / scale_factor; 947 content_tex_css_height_ = height / dpr;
948
949 content_compositor_->SetWindowBounds(width, height);
950 }
951
952 void VrShell::UIBoundsChanged(JNIEnv* env,
953 const JavaParamRef<jobject>& object,
954 jint width, jint height, jfloat dpr) {
955 ui_compositor_->SetWindowBounds(width, height);
965 } 956 }
966 957
967 UiScene* VrShell::GetScene() { 958 UiScene* VrShell::GetScene() {
968 return scene_.get(); 959 return scene_.get();
969 } 960 }
970 961
971 UiInterface* VrShell::GetUiInterface() { 962 UiInterface* VrShell::GetUiInterface() {
972 return html_interface_.get(); 963 return html_interface_.get();
973 } 964 }
974 965
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1021 default: 1012 default:
1022 NOTREACHED(); 1013 NOTREACHED();
1023 } 1014 }
1024 } 1015 }
1025 1016
1026 void VrShell::RenderViewHostChanged(content::RenderViewHost* old_host, 1017 void VrShell::RenderViewHostChanged(content::RenderViewHost* old_host,
1027 content::RenderViewHost* new_host) { 1018 content::RenderViewHost* new_host) {
1028 new_host->GetWidget()->GetView()->SetBackgroundColor(SK_ColorTRANSPARENT); 1019 new_host->GetWidget()->GetView()->SetBackgroundColor(SK_ColorTRANSPARENT);
1029 } 1020 }
1030 1021
1022 void VrShell::MainFrameWasResized(bool width_changed) {
1023 display::Display display = display::Screen::GetScreen()
1024 ->GetDisplayNearestWindow(ui_contents_->GetNativeView());
1025 // TODO(mthiesse): Synchronize with GL thread.
1026 ui_tex_css_width_ = display.size().width();
1027 ui_tex_css_height_ = display.size().height();
1028 }
1029
1030 void VrShell::SetContentCssSize(float width, float height, float dpr) {
1031 JNIEnv* env = base::android::AttachCurrentThread();
1032 Java_VrShellImpl_setContentCssSize(env, j_vr_shell_.obj(), width, height,
1033 dpr);
1034 }
1035
1036 void VrShell::SetUiCssSize(float width, float height, float dpr) {
1037 JNIEnv* env = base::android::AttachCurrentThread();
1038 Java_VrShellImpl_setUiCssSize(env, j_vr_shell_.obj(), width, height, dpr);
1039 }
1040
1031 // ---------------------------------------------------------------------------- 1041 // ----------------------------------------------------------------------------
1032 // Native JNI methods 1042 // Native JNI methods
1033 // ---------------------------------------------------------------------------- 1043 // ----------------------------------------------------------------------------
1034 1044
1035 jlong Init(JNIEnv* env, 1045 jlong Init(JNIEnv* env,
1036 const JavaParamRef<jobject>& obj, 1046 const JavaParamRef<jobject>& obj,
1037 const JavaParamRef<jobject>& content_web_contents, 1047 const JavaParamRef<jobject>& content_web_contents,
1038 jlong content_window_android, 1048 jlong content_window_android,
1039 const JavaParamRef<jobject>& ui_web_contents, 1049 const JavaParamRef<jobject>& ui_web_contents,
1040 jlong ui_window_android, 1050 jlong ui_window_android,
1041 jboolean for_web_vr) { 1051 jboolean for_web_vr) {
1042 return reinterpret_cast<intptr_t>(new VrShell( 1052 return reinterpret_cast<intptr_t>(new VrShell(
1043 env, obj, content::WebContents::FromJavaWebContents(content_web_contents), 1053 env, obj, content::WebContents::FromJavaWebContents(content_web_contents),
1044 reinterpret_cast<ui::WindowAndroid*>(content_window_android), 1054 reinterpret_cast<ui::WindowAndroid*>(content_window_android),
1045 content::WebContents::FromJavaWebContents(ui_web_contents), 1055 content::WebContents::FromJavaWebContents(ui_web_contents),
1046 reinterpret_cast<ui::WindowAndroid*>(ui_window_android), 1056 reinterpret_cast<ui::WindowAndroid*>(ui_window_android),
1047 for_web_vr)); 1057 for_web_vr));
1048 } 1058 }
1049 1059
1050 } // namespace vr_shell 1060 } // namespace vr_shell
OLDNEW
« no previous file with comments | « chrome/browser/android/vr_shell/vr_shell.h ('k') | chrome/browser/resources/vr_shell/vr_shell_ui.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698