summaryrefslogtreecommitdiffstats
path: root/dom/plugins/base/android/ANPSystem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/plugins/base/android/ANPSystem.cpp')
-rw-r--r--dom/plugins/base/android/ANPSystem.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/dom/plugins/base/android/ANPSystem.cpp b/dom/plugins/base/android/ANPSystem.cpp
new file mode 100644
index 000000000..d5b2a7710
--- /dev/null
+++ b/dom/plugins/base/android/ANPSystem.cpp
@@ -0,0 +1,88 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "base/basictypes.h"
+
+#include "ANPBase.h"
+#include "GeneratedJNIWrappers.h"
+#include "PluginPRLibrary.h"
+#include "assert.h"
+#include "nsNPAPIPluginInstance.h"
+#include "nsNPAPIPlugin.h"
+
+#include <android/log.h>
+
+#define LOG(args...) __android_log_print(ANDROID_LOG_INFO, "GeckoPlugins" , ## args)
+#define ASSIGN(obj, name) (obj)->name = anp_system_##name
+
+const char*
+anp_system_getApplicationDataDirectory(NPP instance)
+{
+ static const char *dir = nullptr;
+ static const char *privateDir = nullptr;
+
+ bool isPrivate = false;
+
+ if (!dir) {
+ dir = getenv("ANDROID_PLUGIN_DATADIR");
+ }
+
+ if (!privateDir) {
+ privateDir = getenv("ANDROID_PLUGIN_DATADIR_PRIVATE");
+ }
+
+ if (!instance) {
+ return dir;
+ }
+
+ nsNPAPIPluginInstance* pinst = static_cast<nsNPAPIPluginInstance*>(instance->ndata);
+ if (pinst && NS_SUCCEEDED(pinst->IsPrivateBrowsing(&isPrivate)) && isPrivate) {
+ return privateDir;
+ }
+
+ return dir;
+}
+
+const char*
+anp_system_getApplicationDataDirectory()
+{
+ return anp_system_getApplicationDataDirectory(nullptr);
+}
+
+jclass anp_system_loadJavaClass(NPP instance, const char* className)
+{
+ LOG("%s", __PRETTY_FUNCTION__);
+
+ nsNPAPIPluginInstance* pinst = static_cast<nsNPAPIPluginInstance*>(instance->ndata);
+ mozilla::PluginPRLibrary* lib = static_cast<mozilla::PluginPRLibrary*>(pinst->GetPlugin()->GetLibrary());
+
+ nsCString libName;
+ lib->GetLibraryPath(libName);
+
+ return mozilla::java::GeckoAppShell::LoadPluginClass(className, libName).Forget();
+}
+
+void anp_system_setPowerState(NPP instance, ANPPowerState powerState)
+{
+ nsNPAPIPluginInstance* pinst = nsNPAPIPluginInstance::GetFromNPP(instance);
+
+ if (pinst) {
+ pinst->SetWakeLock(powerState == kScreenOn_ANPPowerState);
+ }
+}
+
+void InitSystemInterfaceV1(ANPSystemInterfaceV1 *i) {
+ _assert(i->inSize == sizeof(*i));
+ ASSIGN(i, getApplicationDataDirectory);
+ ASSIGN(i, loadJavaClass);
+ ASSIGN(i, setPowerState);
+}
+
+void InitSystemInterfaceV2(ANPSystemInterfaceV2 *i) {
+ _assert(i->inSize == sizeof(*i));
+ ASSIGN(i, getApplicationDataDirectory);
+ ASSIGN(i, loadJavaClass);
+ ASSIGN(i, setPowerState);
+}