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

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

Issue 2773903003: Add way to get native VR UI information from Java (Closed)
Patch Set: Cleanup Created 3 years, 9 months 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 <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>
11 11
12 #include "base/android/jni_array.h"
12 #include "base/android/jni_string.h" 13 #include "base/android/jni_string.h"
14 #include "base/json/json_writer.h"
13 #include "base/memory/ptr_util.h" 15 #include "base/memory/ptr_util.h"
14 #include "base/metrics/histogram_macros.h" 16 #include "base/metrics/histogram_macros.h"
15 #include "base/threading/platform_thread.h" 17 #include "base/threading/platform_thread.h"
16 #include "base/threading/thread.h" 18 #include "base/threading/thread.h"
17 #include "base/threading/thread_restrictions.h" 19 #include "base/threading/thread_restrictions.h"
18 #include "base/threading/thread_task_runner_handle.h" 20 #include "base/threading/thread_task_runner_handle.h"
19 #include "base/values.h" 21 #include "base/values.h"
20 #include "chrome/browser/android/tab_android.h" 22 #include "chrome/browser/android/tab_android.h"
21 #include "chrome/browser/android/vr_shell/android_ui_gesture_target.h" 23 #include "chrome/browser/android/vr_shell/android_ui_gesture_target.h"
22 #include "chrome/browser/android/vr_shell/vr_compositor.h" 24 #include "chrome/browser/android/vr_shell/vr_compositor.h"
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 base::Bind(&VrShellGl::CreateContentSurface, gl_thread_->GetVrShellGl())); 392 base::Bind(&VrShellGl::CreateContentSurface, gl_thread_->GetVrShellGl()));
391 } 393 }
392 394
393 void VrShell::SetHistoryButtonsEnabled(JNIEnv* env, 395 void VrShell::SetHistoryButtonsEnabled(JNIEnv* env,
394 const JavaParamRef<jobject>& obj, 396 const JavaParamRef<jobject>& obj,
395 jboolean can_go_back, 397 jboolean can_go_back,
396 jboolean can_go_forward) { 398 jboolean can_go_forward) {
397 html_interface_->SetHistoryButtonsEnabled(can_go_back, can_go_forward); 399 html_interface_->SetHistoryButtonsEnabled(can_go_back, can_go_forward);
398 } 400 }
399 401
402 void VrShell::RequestUiElementInfo(JNIEnv* env,
403 const JavaParamRef<jobject>& obj,
404 jintArray element_ids,
405 jint callback_id) {
406 std::vector<int> element_ids_vector;
407 base::android::JavaIntArrayToIntVector(env, element_ids, &element_ids_vector);
408 PostToGlThreadWhenReady(
409 base::Bind(&VrShellGl::CreateUiElementInfos, gl_thread_->GetVrShellGl(),
410 element_ids_vector, callback_id,
411 base::Bind(&VrShell::OnUiElementInfoCreated,
412 weak_ptr_factory_.GetWeakPtr())));
413 }
414
400 void VrShell::UiSurfaceChanged(jobject surface) { 415 void VrShell::UiSurfaceChanged(jobject surface) {
401 ui_compositor_->SurfaceChanged(surface); 416 ui_compositor_->SurfaceChanged(surface);
402 } 417 }
403 418
404 void VrShell::ContentSurfaceChanged(jobject surface) { 419 void VrShell::ContentSurfaceChanged(jobject surface) {
405 content_surface_ = surface; 420 content_surface_ = surface;
406 content_compositor_->SurfaceChanged(surface); 421 content_compositor_->SurfaceChanged(surface);
407 JNIEnv* env = base::android::AttachCurrentThread(); 422 JNIEnv* env = base::android::AttachCurrentThread();
408 Java_VrShellImpl_contentSurfaceChanged(env, j_vr_shell_.obj()); 423 Java_VrShellImpl_contentSurfaceChanged(env, j_vr_shell_.obj());
409 } 424 }
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 base::android::ConvertUTF16ToJavaString(env, url_string); 547 base::android::ConvertUTF16ToJavaString(env, url_string);
533 Java_VrShellImpl_loadURL(env, j_vr_shell_.obj(), string, 548 Java_VrShellImpl_loadURL(env, j_vr_shell_.obj(), string,
534 ui::PageTransition::PAGE_TRANSITION_TYPED); 549 ui::PageTransition::PAGE_TRANSITION_TYPED);
535 break; 550 break;
536 } 551 }
537 default: 552 default:
538 NOTREACHED(); 553 NOTREACHED();
539 } 554 }
540 } 555 }
541 556
557 void VrShell::OnUiElementInfoCreated(
558 int callback_id,
559 std::unique_ptr<base::DictionaryValue> info) {
560 std::string json_reply;
561 base::JSONWriter::Write(*info, &json_reply);
bsheedy 2017/03/24 18:47:54 Converting to a JSON string in native then back to
tiborg 2017/03/27 15:14:33 I'm not aware of a better solution either. I think
562 JNIEnv* env = base::android::AttachCurrentThread();
563 Java_VrShellImpl_replyToUiElementInfoRequest(
564 env, j_vr_shell_.obj(),
565 base::android::ConvertUTF8ToJavaString(env, json_reply), callback_id);
566 }
567
542 void VrShell::RenderViewHostChanged(content::RenderViewHost* old_host, 568 void VrShell::RenderViewHostChanged(content::RenderViewHost* old_host,
543 content::RenderViewHost* new_host) { 569 content::RenderViewHost* new_host) {
544 content::RenderWidgetHostView* view = new_host->GetWidget()->GetView(); 570 content::RenderWidgetHostView* view = new_host->GetWidget()->GetView();
545 view->SetBackgroundColor(SK_ColorTRANSPARENT); 571 view->SetBackgroundColor(SK_ColorTRANSPARENT);
546 view->SetIsInVR(true); 572 view->SetIsInVR(true);
547 } 573 }
548 574
549 void VrShell::MainFrameWasResized(bool width_changed) { 575 void VrShell::MainFrameWasResized(bool width_changed) {
550 display::Display display = 576 display::Display display =
551 display::Screen::GetScreen()->GetDisplayNearestView( 577 display::Screen::GetScreen()->GetDisplayNearestView(
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 jboolean reprojected_rendering) { 805 jboolean reprojected_rendering) {
780 return reinterpret_cast<intptr_t>(new VrShell( 806 return reinterpret_cast<intptr_t>(new VrShell(
781 env, obj, reinterpret_cast<ui::WindowAndroid*>(content_window_android), 807 env, obj, reinterpret_cast<ui::WindowAndroid*>(content_window_android),
782 content::WebContents::FromJavaWebContents(ui_web_contents), 808 content::WebContents::FromJavaWebContents(ui_web_contents),
783 reinterpret_cast<ui::WindowAndroid*>(ui_window_android), for_web_vr, 809 reinterpret_cast<ui::WindowAndroid*>(ui_window_android), for_web_vr,
784 VrShellDelegate::GetNativeVrShellDelegate(env, delegate), 810 VrShellDelegate::GetNativeVrShellDelegate(env, delegate),
785 reinterpret_cast<gvr_context*>(gvr_api), reprojected_rendering)); 811 reinterpret_cast<gvr_context*>(gvr_api), reprojected_rendering));
786 } 812 }
787 813
788 } // namespace vr_shell 814 } // namespace vr_shell
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698