fullscreen_callback_proxy.cc 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "weblayer/browser/fullscreen_callback_proxy.h"
  5. #include "base/android/jni_string.h"
  6. #include "base/trace_event/trace_event.h"
  7. #include "url/gurl.h"
  8. #include "weblayer/browser/java/jni/FullscreenCallbackProxy_jni.h"
  9. #include "weblayer/browser/tab_impl.h"
  10. using base::android::AttachCurrentThread;
  11. using base::android::ConvertUTF8ToJavaString;
  12. using base::android::ScopedJavaLocalRef;
  13. namespace weblayer {
  14. FullscreenCallbackProxy::FullscreenCallbackProxy(JNIEnv* env,
  15. jobject obj,
  16. Tab* tab)
  17. : tab_(tab), java_delegate_(env, obj) {
  18. tab_->SetFullscreenDelegate(this);
  19. }
  20. FullscreenCallbackProxy::~FullscreenCallbackProxy() {
  21. tab_->SetFullscreenDelegate(nullptr);
  22. }
  23. void FullscreenCallbackProxy::EnterFullscreen(base::OnceClosure exit_closure) {
  24. exit_fullscreen_closure_ = std::move(exit_closure);
  25. TRACE_EVENT0("weblayer", "Java_FullscreenCallbackProxy_enterFullscreen");
  26. Java_FullscreenCallbackProxy_enterFullscreen(AttachCurrentThread(),
  27. java_delegate_);
  28. }
  29. void FullscreenCallbackProxy::ExitFullscreen() {
  30. TRACE_EVENT0("weblayer", "Java_FullscreenCallbackProxy_exitFullscreen");
  31. // If the web contents initiated the fullscreen exit, the closure will still
  32. // be valid, so clean it up now.
  33. exit_fullscreen_closure_.Reset();
  34. Java_FullscreenCallbackProxy_exitFullscreen(AttachCurrentThread(),
  35. java_delegate_);
  36. }
  37. void FullscreenCallbackProxy::DoExitFullscreen(JNIEnv* env) {
  38. if (exit_fullscreen_closure_)
  39. std::move(exit_fullscreen_closure_).Run();
  40. }
  41. static jlong JNI_FullscreenCallbackProxy_CreateFullscreenCallbackProxy(
  42. JNIEnv* env,
  43. const base::android::JavaParamRef<jobject>& proxy,
  44. jlong tab) {
  45. return reinterpret_cast<jlong>(
  46. new FullscreenCallbackProxy(env, proxy, reinterpret_cast<TabImpl*>(tab)));
  47. }
  48. static void JNI_FullscreenCallbackProxy_DeleteFullscreenCallbackProxy(
  49. JNIEnv* env,
  50. jlong proxy) {
  51. delete reinterpret_cast<FullscreenCallbackProxy*>(proxy);
  52. }
  53. } // namespace weblayer