diff options
| author | Derek Sollenberger <djsollen@google.com> | 2010-03-23 14:07:05 -0400 |
|---|---|---|
| committer | Derek Sollenberger <djsollen@google.com> | 2010-03-23 14:34:09 -0400 |
| commit | 27a298a6476fbd78e67f35441e1428bc878a969d (patch) | |
| tree | ca631f680e2bc3b4c0a8d54ec3b6c983d4c1c26c /WebKit/android/jni | |
| parent | 7d7e576868fe78bf1b95968ad5d6ddc395c65ec9 (diff) | |
| download | external_webkit-27a298a6476fbd78e67f35441e1428bc878a969d.zip external_webkit-27a298a6476fbd78e67f35441e1428bc878a969d.tar.gz external_webkit-27a298a6476fbd78e67f35441e1428bc878a969d.tar.bz2 | |
Allowing native code access to the application context as long as
there is at least one valid instance of the webviewcore class.
This change allows plugins access to the application context when
the plugin package is loaded, prior to any instances of the plugin
being created.
Change-Id: I74a58cf76cc3c2d0ef7bca19346f13f58f616830
Diffstat (limited to 'WebKit/android/jni')
| -rw-r--r-- | WebKit/android/jni/WebViewCore.cpp | 21 | ||||
| -rw-r--r-- | WebKit/android/jni/WebViewCore.h | 4 |
2 files changed, 25 insertions, 0 deletions
diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp index a0e4642..00ac725 100644 --- a/WebKit/android/jni/WebViewCore.cpp +++ b/WebKit/android/jni/WebViewCore.cpp @@ -168,6 +168,27 @@ bool WebViewCore::isInstance(WebViewCore* inst) { return gInstanceList.find(inst) >= 0; } +jobject WebViewCore::getApplicationContext() { + + // check to see if there is a valid webviewcore object + if (gInstanceList.isEmpty()) + return 0; + + // get the context from the webview + jobject context = gInstanceList[0]->getContext(); + + if (!context) + return 0; + + // get the application context using JNI + JNIEnv* env = JSC::Bindings::getJNIEnv(); + jclass contextClass = env->GetObjectClass(context); + jmethodID appContextMethod = env->GetMethodID(contextClass, "getApplicationContext", "()Landroid/content/Context;"); + jobject result = env->CallObjectMethod(context, appContextMethod); + checkException(env); + return result; +} + // ---------------------------------------------------------------------------- #define GET_NATIVE_VIEW(env, obj) ((WebViewCore*)env->GetIntField(obj, gWebViewCoreFields.m_nativeClass)) diff --git a/WebKit/android/jni/WebViewCore.h b/WebKit/android/jni/WebViewCore.h index abe0d8d..8c885e6 100644 --- a/WebKit/android/jni/WebViewCore.h +++ b/WebKit/android/jni/WebViewCore.h @@ -569,6 +569,10 @@ namespace android { // call only from webkit thread (like add/remove), return true if inst // is still alive static bool isInstance(WebViewCore*); + + // if there exists at least on WebViewCore instance then we return the + // application context, otherwise NULL is returned. + static jobject getApplicationContext(); }; } // namespace android |
