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
5 #include "weblayer/browser/fullscreen_callback_proxy.h"
6
7 #include "base/android/jni_string.h"
8 #include "url/gurl.h"
9 #include "weblayer/browser/java/jni/FullscreenCallbackProxy_jni.h"
10 #include "weblayer/browser/tab_impl.h"
11
12 using base::android::AttachCurrentThread;
13 using base::android::ConvertUTF8ToJavaString;
14 using base::android::ScopedJavaLocalRef;
15
16 namespace weblayer {
17
FullscreenCallbackProxy(JNIEnv * env,jobject obj,Tab * tab)18 FullscreenCallbackProxy::FullscreenCallbackProxy(JNIEnv* env,
19 jobject obj,
20 Tab* tab)
21 : tab_(tab), java_delegate_(env, obj) {
22 tab_->SetFullscreenDelegate(this);
23 }
24
~FullscreenCallbackProxy()25 FullscreenCallbackProxy::~FullscreenCallbackProxy() {
26 tab_->SetFullscreenDelegate(nullptr);
27 }
28
EnterFullscreen(base::OnceClosure exit_closure)29 void FullscreenCallbackProxy::EnterFullscreen(base::OnceClosure exit_closure) {
30 exit_fullscreen_closure_ = std::move(exit_closure);
31 TRACE_EVENT0("weblayer", "Java_FullscreenCallbackProxy_enterFullscreen");
32 Java_FullscreenCallbackProxy_enterFullscreen(AttachCurrentThread(),
33 java_delegate_);
34 }
35
ExitFullscreen()36 void FullscreenCallbackProxy::ExitFullscreen() {
37 TRACE_EVENT0("weblayer", "Java_FullscreenCallbackProxy_exitFullscreen");
38 // If the web contents initiated the fullscreen exit, the closure will still
39 // be valid, so clean it up now.
40 exit_fullscreen_closure_.Reset();
41 Java_FullscreenCallbackProxy_exitFullscreen(AttachCurrentThread(),
42 java_delegate_);
43 }
44
DoExitFullscreen(JNIEnv * env)45 void FullscreenCallbackProxy::DoExitFullscreen(JNIEnv* env) {
46 if (exit_fullscreen_closure_)
47 std::move(exit_fullscreen_closure_).Run();
48 }
49
JNI_FullscreenCallbackProxy_CreateFullscreenCallbackProxy(JNIEnv * env,const base::android::JavaParamRef<jobject> & proxy,jlong tab)50 static jlong JNI_FullscreenCallbackProxy_CreateFullscreenCallbackProxy(
51 JNIEnv* env,
52 const base::android::JavaParamRef<jobject>& proxy,
53 jlong tab) {
54 return reinterpret_cast<jlong>(
55 new FullscreenCallbackProxy(env, proxy, reinterpret_cast<TabImpl*>(tab)));
56 }
57
JNI_FullscreenCallbackProxy_DeleteFullscreenCallbackProxy(JNIEnv * env,jlong proxy)58 static void JNI_FullscreenCallbackProxy_DeleteFullscreenCallbackProxy(
59 JNIEnv* env,
60 jlong proxy) {
61 delete reinterpret_cast<FullscreenCallbackProxy*>(proxy);
62 }
63
64 } // namespace weblayer
65