From f78bb415979068cd6ebbaf94e23e2e56bf682977 Mon Sep 17 00:00:00 2001 From: Jim Chen Date: Thu, 18 Aug 2016 18:04:11 -0400 Subject: [PATCH] Bug 1294482 - Move onFullScreenPluginHidden out of AndroidJNI.cpp; r=snorp Move onFullScreenPluginHidden out of AndroidJNI.cpp and into a new-style native method in nsAppShell.cpp. --- dom/plugins/base/nsPluginInstanceOwner.h | 2 +- .../java/org/mozilla/gecko/GeckoAppShell.java | 5 ++- mozglue/android/jni-stubs.inc | 38 +++++++++---------- widget/android/AndroidJNI.cpp | 22 ----------- widget/android/GeneratedJNINatives.h | 6 ++- widget/android/GeneratedJNIWrappers.cpp | 3 ++ widget/android/GeneratedJNIWrappers.h | 18 +++++++++ widget/android/nsAppShell.cpp | 5 +++ 8 files changed, 54 insertions(+), 45 deletions(-) diff --git a/dom/plugins/base/nsPluginInstanceOwner.h b/dom/plugins/base/nsPluginInstanceOwner.h index 75d3a6c4c451..dd26e53ea943 100644 --- a/dom/plugins/base/nsPluginInstanceOwner.h +++ b/dom/plugins/base/nsPluginInstanceOwner.h @@ -260,7 +260,7 @@ public: void RequestFullScreen(); void ExitFullScreen(); - // Called from AndroidJNI when we removed the fullscreen view. + // Called from nsAppShell when we removed the fullscreen view. static void ExitFullScreen(jobject view); #endif diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java index 981c4dfd84ba..7196967492ff 100644 --- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java +++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java @@ -250,8 +250,6 @@ public class GeckoAppShell public static native void addPresentationSurface(Surface surface); public static native void removePresentationSurface(Surface surface); - public static native void onFullScreenPluginHidden(View view); - private static LayerView sLayerView; private static Rect sScreenSize; @@ -1489,6 +1487,9 @@ public class GeckoAppShell } } + @WrapForJNI(calledFrom = "ui", dispatchTo = "gecko") + public static native void onFullScreenPluginHidden(View view); + @WrapForJNI(calledFrom = "gecko") public static void addFullScreenPluginView(View view) { if (getGeckoInterface() != null) diff --git a/mozglue/android/jni-stubs.inc b/mozglue/android/jni-stubs.inc index 62afa47fb67a..3ed34fa74d1f 100644 --- a/mozglue/android/jni-stubs.inc +++ b/mozglue/android/jni-stubs.inc @@ -115,25 +115,6 @@ Java_org_mozilla_gecko_GeckoAppShell_removePresentationSurface(JNIEnv * arg0, jc #ifdef JNI_STUBS -typedef void (*Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden_t)(JNIEnv *, jclass, jobject); -static Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden_t f_Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden; -extern "C" NS_EXPORT void MOZ_JNICALL -Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden(JNIEnv * arg0, jclass arg1, jobject arg2) { - if (!f_Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden) { - arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"), - "JNI Function called before it was loaded"); - return ; - } - f_Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden(arg0, arg1, arg2); -} -#endif - -#ifdef JNI_BINDINGS - xul_dlsym("Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden", &f_Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden); -#endif - -#ifdef JNI_STUBS - typedef void (*Java_org_mozilla_gecko_GeckoAppShell_syncNotifyObservers_t)(JNIEnv *, jclass, jstring, jstring); static Java_org_mozilla_gecko_GeckoAppShell_syncNotifyObservers_t f_Java_org_mozilla_gecko_GeckoAppShell_syncNotifyObservers; extern "C" NS_EXPORT void MOZ_JNICALL @@ -229,6 +210,25 @@ Java_org_mozilla_gecko_GeckoAppShell_notifyAlertListener(JNIEnv * arg0, jclass a #ifdef JNI_STUBS +typedef void (*Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden_t)(JNIEnv *, jclass, jobject); +static Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden_t f_Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden; +extern "C" NS_EXPORT void MOZ_JNICALL +Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden(JNIEnv * arg0, jclass arg1, jobject arg2) { + if (!f_Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden) { + arg0->ThrowNew(arg0->FindClass("java/lang/UnsupportedOperationException"), + "JNI Function called before it was loaded"); + return ; + } + f_Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden(arg0, arg1, arg2); +} +#endif + +#ifdef JNI_BINDINGS + xul_dlsym("Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden", &f_Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden); +#endif + +#ifdef JNI_STUBS + typedef void (*Java_org_mozilla_gecko_GeckoAppShell_cameraCallbackBridge_t)(JNIEnv *, jclass, jbyteArray); static Java_org_mozilla_gecko_GeckoAppShell_cameraCallbackBridge_t f_Java_org_mozilla_gecko_GeckoAppShell_cameraCallbackBridge; extern "C" NS_EXPORT void MOZ_JNICALL diff --git a/widget/android/AndroidJNI.cpp b/widget/android/AndroidJNI.cpp index 2b979fa0afa4..b30ca7275aff 100644 --- a/widget/android/AndroidJNI.cpp +++ b/widget/android/AndroidJNI.cpp @@ -90,28 +90,6 @@ Java_org_mozilla_gecko_GeckoAppShell_removePresentationSurface(JNIEnv* jenv, jcl } } -NS_EXPORT void JNICALL -Java_org_mozilla_gecko_GeckoAppShell_onFullScreenPluginHidden(JNIEnv* jenv, jclass, jobject view) -{ - class ExitFullScreenRunnable : public Runnable { - public: - ExitFullScreenRunnable(jobject view) : mView(view) {} - - NS_IMETHOD Run() override { - JNIEnv* const env = jni::GetGeckoThreadEnv(); - nsPluginInstanceOwner::ExitFullScreen(mView); - env->DeleteGlobalRef(mView); - return NS_OK; - } - - private: - jobject mView; - }; - - nsCOMPtr runnable = new ExitFullScreenRunnable(jenv->NewGlobalRef(view)); - NS_DispatchToMainThread(runnable); -} - NS_EXPORT void JNICALL Java_org_mozilla_gecko_GeckoAppShell_onSurfaceTextureFrameAvailable(JNIEnv* jenv, jclass, jobject surfaceTexture, jint id) { diff --git a/widget/android/GeneratedJNINatives.h b/widget/android/GeneratedJNINatives.h index c44587f1fafa..b2589dc14e60 100644 --- a/widget/android/GeneratedJNINatives.h +++ b/widget/android/GeneratedJNINatives.h @@ -78,7 +78,7 @@ template class GeckoAppShell::Natives : public mozilla::jni::NativeImpl { public: - static const JNINativeMethod methods[6]; + static const JNINativeMethod methods[7]; }; template @@ -96,6 +96,10 @@ const JNINativeMethod GeckoAppShell::Natives::methods[] = { mozilla::jni::NativeStub ::template Wrap<&Impl::NotifyUriVisited>), + mozilla::jni::MakeNativeMethod( + mozilla::jni::NativeStub + ::template Wrap<&Impl::OnFullScreenPluginHidden>), + mozilla::jni::MakeNativeMethod( mozilla::jni::NativeStub ::template Wrap<&Impl::OnLocationChanged>), diff --git a/widget/android/GeneratedJNIWrappers.cpp b/widget/android/GeneratedJNIWrappers.cpp index 336653f52b45..154e6dc4a61b 100644 --- a/widget/android/GeneratedJNIWrappers.cpp +++ b/widget/android/GeneratedJNIWrappers.cpp @@ -607,6 +607,9 @@ auto GeckoAppShell::NotifyWakeLockChanged(mozilla::jni::String::Param a0, mozill return mozilla::jni::Method::Call(GeckoAppShell::Context(), nullptr, a0, a1); } +constexpr char GeckoAppShell::OnFullScreenPluginHidden_t::name[]; +constexpr char GeckoAppShell::OnFullScreenPluginHidden_t::signature[]; + constexpr char GeckoAppShell::OnLocationChanged_t::name[]; constexpr char GeckoAppShell::OnLocationChanged_t::signature[]; diff --git a/widget/android/GeneratedJNIWrappers.h b/widget/android/GeneratedJNIWrappers.h index ae6116d3f762..8acb03e802b3 100644 --- a/widget/android/GeneratedJNIWrappers.h +++ b/widget/android/GeneratedJNIWrappers.h @@ -1630,6 +1630,24 @@ public: static auto NotifyWakeLockChanged(mozilla::jni::String::Param, mozilla::jni::String::Param) -> void; + struct OnFullScreenPluginHidden_t { + typedef GeckoAppShell Owner; + typedef void ReturnType; + typedef void SetterType; + typedef mozilla::jni::Args< + mozilla::jni::Object::Param> Args; + static constexpr char name[] = "onFullScreenPluginHidden"; + static constexpr char signature[] = + "(Landroid/view/View;)V"; + static const bool isStatic = true; + static const mozilla::jni::ExceptionMode exceptionMode = + mozilla::jni::ExceptionMode::ABORT; + static const mozilla::jni::CallingThread callingThread = + mozilla::jni::CallingThread::UI; + static const mozilla::jni::DispatchTarget dispatchTarget = + mozilla::jni::DispatchTarget::GECKO; + }; + struct OnLocationChanged_t { typedef GeckoAppShell Owner; typedef void ReturnType; diff --git a/widget/android/nsAppShell.cpp b/widget/android/nsAppShell.cpp index 43c601d217aa..1abaf25fc1c4 100644 --- a/widget/android/nsAppShell.cpp +++ b/widget/android/nsAppShell.cpp @@ -323,6 +323,11 @@ public: AndroidAlerts::NotifyListener( aName->ToString(), aTopic->ToCString().get()); } + + static void OnFullScreenPluginHidden(jni::Object::Param aView) + { + nsPluginInstanceOwner::ExitFullScreen(aView.Get()); + } }; nsAppShell::nsAppShell()