diff options
author | Selim Gurun <sgurun@google.com> | 2012-09-04 16:31:02 -0700 |
---|---|---|
committer | Selim Gurun <sgurun@google.com> | 2012-09-10 16:39:35 -0700 |
commit | f2d8c5bed31609d7d6e3ae77f33e90ea7f888eb3 (patch) | |
tree | f0eaf8dc0c087e6961ef36fc9250bdda15ee17f5 /Source/WebKit | |
parent | 61df0147f508e20bd22fab568b7c8b3c405cfad5 (diff) | |
download | external_webkit-f2d8c5bed31609d7d6e3ae77f33e90ea7f888eb3.zip external_webkit-f2d8c5bed31609d7d6e3ae77f33e90ea7f888eb3.tar.gz external_webkit-f2d8c5bed31609d7d6e3ae77f33e90ea7f888eb3.tar.bz2 |
Control access to inherited methods of jsinterface objects
Bug: 7073422
Use a flag and annotation for allowing access to inherited methods of
jsinterface objects. When flag is false, no annotation is needed. When
flag is true, annotation is needed for allowing access to inherited methods.
Change-Id: I610119dc5410d8df1962fa9dbea09866f81d374c
Diffstat (limited to 'Source/WebKit')
-rw-r--r-- | Source/WebKit/android/jni/WebCoreFrameBridge.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/Source/WebKit/android/jni/WebCoreFrameBridge.cpp b/Source/WebKit/android/jni/WebCoreFrameBridge.cpp index 61ffd29..ecda831 100644 --- a/Source/WebKit/android/jni/WebCoreFrameBridge.cpp +++ b/Source/WebKit/android/jni/WebCoreFrameBridge.cpp @@ -61,6 +61,7 @@ #include "IconDatabase.h" #include "Image.h" #include "InspectorClientAndroid.h" +#include "JavaClassJobjectV8.h" #include "JavaNPObjectV8.h" #include "JavaInstanceJobjectV8.h" #include "KURL.h" @@ -1504,14 +1505,14 @@ static jobject StringByEvaluatingJavaScriptFromString(JNIEnv *env, jobject obj, // and virtualEnd and swap the weak reference for the real object. class WeakJavaInstance : public JavaInstanceJobject { public: - static PassRefPtr<WeakJavaInstance> create(jobject obj) + static PassRefPtr<WeakJavaInstance> create(jobject obj, bool requireAnnotation) { - return adoptRef(new WeakJavaInstance(obj)); + return adoptRef(new WeakJavaInstance(obj, requireAnnotation)); } private: - WeakJavaInstance(jobject instance) - : JavaInstanceJobject(instance) + WeakJavaInstance(jobject instance, bool requireAnnotation) + : JavaInstanceJobject(instance, requireAnnotation) , m_beginEndDepth(0) { JNIEnv* env = getJNIEnv(); @@ -1568,7 +1569,7 @@ private: }; static void AddJavascriptInterface(JNIEnv *env, jobject obj, jint nativeFramePointer, - jobject javascriptObj, jstring interfaceName) + jobject javascriptObj, jstring interfaceName, jboolean requireAnnotation) { WebCore::Frame* pFrame = 0; if (nativeFramePointer == 0) @@ -1582,7 +1583,8 @@ static void AddJavascriptInterface(JNIEnv *env, jobject obj, jint nativeFramePoi ALOGV("::WebCore:: addJSInterface: %p", pFrame); if (pFrame) { - RefPtr<JavaInstance> addedObject = WeakJavaInstance::create(javascriptObj); + RefPtr<JavaInstance> addedObject = WeakJavaInstance::create(javascriptObj, + requireAnnotation); const char* name = getCharactersFromJStringInEnv(env, interfaceName); // Pass ownership of the added object to bindToWindowObject. NPObject* npObject = JavaInstanceToNPObject(addedObject.get()); @@ -1950,7 +1952,7 @@ static JNINativeMethod gBrowserFrameNativeMethods[] = { (void*) Reload }, { "nativeGoBackOrForward", "(I)V", (void*) GoBackOrForward }, - { "nativeAddJavascriptInterface", "(ILjava/lang/Object;Ljava/lang/String;)V", + { "nativeAddJavascriptInterface", "(ILjava/lang/Object;Ljava/lang/String;Z)V", (void*) AddJavascriptInterface }, { "stringByEvaluatingJavaScriptFromString", "(Ljava/lang/String;)Ljava/lang/String;", @@ -1985,6 +1987,8 @@ static JNINativeMethod gBrowserFrameNativeMethods[] = { int registerWebFrame(JNIEnv* env) { + JavaClassJobject::RegisterJavaClassJobject(env); + jclass clazz = env->FindClass("android/webkit/BrowserFrame"); ALOG_ASSERT(clazz, "Cannot find BrowserFrame"); gFrameField = env->GetFieldID(clazz, "mNativeFrame", "I"); |