From f2d8c5bed31609d7d6e3ae77f33e90ea7f888eb3 Mon Sep 17 00:00:00 2001 From: Selim Gurun Date: Tue, 4 Sep 2012 16:31:02 -0700 Subject: 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 --- Source/WebKit/android/jni/WebCoreFrameBridge.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'Source/WebKit') 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 create(jobject obj) + static PassRefPtr 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 addedObject = WeakJavaInstance::create(javascriptObj); + RefPtr 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"); -- cgit v1.1