aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--plugin/icedteanp/IcedTeaNPPlugin.cc4
-rw-r--r--plugin/icedteanp/IcedTeaPluginUtils.cc4
-rw-r--r--plugin/icedteanp/IcedTeaScriptablePluginObject.cc24
-rw-r--r--plugin/icedteanp/IcedTeaScriptablePluginObject.h11
-rw-r--r--tests/cpp-unit-tests/IcedTeaScriptablePluginObjectTest.cc36
6 files changed, 50 insertions, 39 deletions
diff --git a/ChangeLog b/ChangeLog
index adc81dc..cbf0207 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2013-06-21 Adam Domurad <[email protected]>
+ * plugin/icedteanp/IcedTeaScriptablePluginObject.cc:
+ Move 'get_scriptable_java_package_object' and
+ 'get_scriptable_java_object' into their correct respective classes.
+ * plugin/icedteanp/IcedTeaScriptablePluginObject.h: Same.
+ * plugin/icedteanp/IcedTeaNPPlugin.cc: Update references.
+ * plugin/icedteanp/IcedTeaPluginUtils.cc: Same.
+ * tests/cpp-unit-tests/IcedTeaScriptablePluginObjectTest.cc: Same.
+
+2013-06-21 Adam Domurad <[email protected]>
+
* plugin/icedteanp/IcedTeaScriptablePluginObject.cc
(IcedTeaScriptablePluginObject::get_scriptable_java_package_object): Fix
memory leak due to allocated NPClass.
diff --git a/plugin/icedteanp/IcedTeaNPPlugin.cc b/plugin/icedteanp/IcedTeaNPPlugin.cc
index ac1efc8..b5d2a94 100644
--- a/plugin/icedteanp/IcedTeaNPPlugin.cc
+++ b/plugin/icedteanp/IcedTeaNPPlugin.cc
@@ -2175,11 +2175,11 @@ get_scriptable_object(NPP instance)
applet_class_id.append(*(java_result->return_string));
- obj = IcedTeaScriptableJavaPackageObject::get_scriptable_java_object(instance, applet_class_id, instance_id, false);
+ obj = IcedTeaScriptableJavaObject::get_scriptable_java_object(instance, applet_class_id, instance_id, false);
} else
{
- obj = IcedTeaScriptablePluginObject::get_scriptable_java_package_object(instance, "");
+ obj = IcedTeaScriptableJavaPackageObject::get_scriptable_java_package_object(instance, "");
}
return obj;
diff --git a/plugin/icedteanp/IcedTeaPluginUtils.cc b/plugin/icedteanp/IcedTeaPluginUtils.cc
index 8e690bd..204e258 100644
--- a/plugin/icedteanp/IcedTeaPluginUtils.cc
+++ b/plugin/icedteanp/IcedTeaPluginUtils.cc
@@ -822,11 +822,11 @@ javaObjectResultToNPVariant(NPP instance, const std::string& jobject_id, NPVaria
NPObject* obj;
if (jclass_id.at(0) == '[') // array
{
- obj = IcedTeaScriptableJavaPackageObject::get_scriptable_java_object(instance, jclass_id,
+ obj = IcedTeaScriptableJavaObject::get_scriptable_java_object(instance, jclass_id,
jobject_id, true);
} else
{
- obj = IcedTeaScriptableJavaPackageObject::get_scriptable_java_object(instance, jclass_id,
+ obj = IcedTeaScriptableJavaObject::get_scriptable_java_object(instance, jclass_id,
jobject_id, false);
}
diff --git a/plugin/icedteanp/IcedTeaScriptablePluginObject.cc b/plugin/icedteanp/IcedTeaScriptablePluginObject.cc
index 233a33e..c998ffd 100644
--- a/plugin/icedteanp/IcedTeaScriptablePluginObject.cc
+++ b/plugin/icedteanp/IcedTeaScriptablePluginObject.cc
@@ -94,7 +94,7 @@ IcedTeaScriptablePluginObject::getProperty(NPObject *npobj, NPIdentifier name, N
// Package request?
if (!strcmp(browser_functions.utf8fromidentifier(name), "java"))
{
- //NPObject* obj = IcedTeaScriptablePluginObject::get_scriptable_java_package_object(getInstanceFromMemberPtr(npobj), name);
+ //NPObject* obj = IcedTeaScriptableJavaPackageObject::get_scriptable_java_package_object(getInstanceFromMemberPtr(npobj), name);
//OBJECT_TO_NPVARIANT(obj, *result);
//printf ("Filling variant %p with object %p\n", result);
@@ -159,7 +159,7 @@ scriptable_plugin_object_class() {
}
NPObject*
-IcedTeaScriptablePluginObject::get_scriptable_java_package_object(NPP instance, const NPUTF8* name)
+IcedTeaScriptableJavaPackageObject::get_scriptable_java_package_object(NPP instance, const NPUTF8* name)
{
/* Shared NPClass instance for IcedTeaScriptablePluginObject */
static NPClass np_class = scriptable_plugin_object_class();
@@ -308,14 +308,14 @@ IcedTeaScriptableJavaPackageObject::getProperty(NPObject *npobj, NPIdentifier na
if (isPropertyClass)
{
PLUGIN_DEBUG("Returning package object\n");
- obj = IcedTeaScriptablePluginObject::get_scriptable_java_package_object(
+ obj = IcedTeaScriptableJavaPackageObject::get_scriptable_java_package_object(
IcedTeaPluginUtilities::getInstanceFromMemberPtr(npobj),
property_name.c_str());
}
else
{
PLUGIN_DEBUG("Returning Java object\n");
- obj = IcedTeaScriptableJavaPackageObject::get_scriptable_java_object(
+ obj = IcedTeaScriptableJavaObject::get_scriptable_java_object(
IcedTeaPluginUtilities::getInstanceFromMemberPtr(npobj),
*(java_result->return_string), "0", false);
}
@@ -382,7 +382,7 @@ scriptable_java_package_object_class() {
}
NPObject*
-IcedTeaScriptableJavaPackageObject::get_scriptable_java_object(NPP instance,
+IcedTeaScriptableJavaObject::get_scriptable_java_object(NPP instance,
std::string class_id,
std::string instance_id,
bool isArray)
@@ -393,7 +393,7 @@ IcedTeaScriptableJavaPackageObject::get_scriptable_java_object(NPP instance,
std::string obj_key = class_id + ":" + instance_id;
PLUGIN_DEBUG("get_scriptable_java_object searching for %s...\n", obj_key.c_str());
- NPObject* scriptable_object = IcedTeaPluginUtilities::getNPObjectFromJavaKey(obj_key);
+ IcedTeaScriptableJavaObject* scriptable_object = (IcedTeaScriptableJavaObject*) IcedTeaPluginUtilities::getNPObjectFromJavaKey(obj_key);
if (scriptable_object != NULL)
{
@@ -403,7 +403,7 @@ IcedTeaScriptableJavaPackageObject::get_scriptable_java_object(NPP instance,
}
// try to create normally
- scriptable_object = browser_functions.createobject(instance, &np_class);
+ scriptable_object = (IcedTeaScriptableJavaObject*)browser_functions.createobject(instance, &np_class);
// didn't work? try creating asynch
if (!scriptable_object)
@@ -426,11 +426,11 @@ IcedTeaScriptableJavaPackageObject::get_scriptable_java_object(NPP instance,
PLUGIN_DEBUG("Constructed new Java Object with classid=%s, instanceid=%s, isArray=%d and scriptable_object=%p\n", class_id.c_str(), instance_id.c_str(), isArray, scriptable_object);
- ((IcedTeaScriptableJavaObject*) scriptable_object)->setClassIdentifier(class_id);
- ((IcedTeaScriptableJavaObject*) scriptable_object)->setIsArray(isArray);
+ scriptable_object->setClassIdentifier(class_id);
+ scriptable_object->setIsArray(isArray);
if (instance_id != "0")
- ((IcedTeaScriptableJavaObject*) scriptable_object)->setInstanceIdentifier(instance_id);
+ scriptable_object->setInstanceIdentifier(instance_id);
IcedTeaPluginUtilities::storeInstanceID(scriptable_object, instance);
IcedTeaPluginUtilities::storeObjectMapping(obj_key, scriptable_object);
@@ -709,7 +709,7 @@ IcedTeaScriptableJavaObject::getProperty(NPObject *npobj, NPIdentifier name, NPV
if (!strcmp(browser_functions.utf8fromidentifier(name), "Packages"))
{
- NPObject* pkgObject = IcedTeaScriptablePluginObject::get_scriptable_java_package_object(instance, "");
+ NPObject* pkgObject = IcedTeaScriptableJavaPackageObject::get_scriptable_java_package_object(instance, "");
OBJECT_TO_NPVARIANT(pkgObject, *result);
return true;
}
@@ -890,7 +890,7 @@ IcedTeaScriptableJavaObject::construct(NPObject *npobj, const NPVariant *args, u
std::string return_obj_class_id = class_id;
return_obj_instance_id.append(*(java_result->return_string));
- obj = IcedTeaScriptableJavaPackageObject::get_scriptable_java_object(
+ obj = IcedTeaScriptableJavaObject::get_scriptable_java_object(
IcedTeaPluginUtilities::getInstanceFromMemberPtr(npobj),
return_obj_class_id, return_obj_instance_id, false);
diff --git a/plugin/icedteanp/IcedTeaScriptablePluginObject.h b/plugin/icedteanp/IcedTeaScriptablePluginObject.h
index ad8a2eb..71fab4e 100644
--- a/plugin/icedteanp/IcedTeaScriptablePluginObject.h
+++ b/plugin/icedteanp/IcedTeaScriptablePluginObject.h
@@ -87,7 +87,6 @@ class IcedTeaScriptablePluginObject: public NPObject
static bool construct(NPObject *npobj, const NPVariant *args,
uint32_t argCount, NPVariant *result);
- static NPObject* get_scriptable_java_package_object(NPP instance, const NPUTF8* name);
};
NPObject* allocate_scriptable_jp_object(NPP npp, NPClass *aClass);
@@ -136,10 +135,7 @@ class IcedTeaScriptableJavaPackageObject: public NPObject
static bool construct(NPObject *npobj, const NPVariant *args,
uint32_t argCount, NPVariant *result);
- static NPObject* get_scriptable_java_object(NPP instance,
- std::string class_id,
- std::string instance_id,
- bool isArray);
+ static NPObject* get_scriptable_java_package_object(NPP instance, const NPUTF8* name);
static bool is_valid_java_object(NPObject* object_ptr);
};
@@ -199,6 +195,11 @@ class IcedTeaScriptableJavaObject: public NPObject
static bool construct(NPObject *npobj, const NPVariant *args,
uint32_t argCount, NPVariant *result);
+
+ static NPObject* get_scriptable_java_object(NPP instance,
+ std::string class_id,
+ std::string instance_id,
+ bool isArray);
};
/* Creates and retains a scriptable java object (intended to be called asynch.) */
diff --git a/tests/cpp-unit-tests/IcedTeaScriptablePluginObjectTest.cc b/tests/cpp-unit-tests/IcedTeaScriptablePluginObjectTest.cc
index 0827570..9de0bbd 100644
--- a/tests/cpp-unit-tests/IcedTeaScriptablePluginObjectTest.cc
+++ b/tests/cpp-unit-tests/IcedTeaScriptablePluginObjectTest.cc
@@ -53,13 +53,6 @@ SUITE(IcedTeaScriptablePluginObject) {
delete obj;
CHECK(leak_detector.memory_leaks() == 0);
}
-
- TEST(get_scriptable_java_object) {
- MemoryLeakDetector leak_detector;
- NPObject* obj = IcedTeaScriptablePluginObject::get_scriptable_java_package_object(&dummy_npp, "DummyPackage");
- browser_functions.releaseobject(obj);
- CHECK(leak_detector.memory_leaks() == 0);
- }
}
SUITE(IcedTeaScriptableJavaObject) {
@@ -69,24 +62,15 @@ SUITE(IcedTeaScriptableJavaObject) {
IcedTeaScriptableJavaObject::deAllocate(obj);
CHECK(leak_detector.memory_leaks() == 0);
}
-}
-
-SUITE(IcedTeaScriptableJavaPackageObject) {
- TEST(deallocate) {
- MemoryLeakDetector leak_detector;
- IcedTeaScriptableJavaPackageObject* obj = new IcedTeaScriptableJavaPackageObject(&dummy_npp);
- IcedTeaScriptableJavaPackageObject::deAllocate(obj);
- CHECK(leak_detector.memory_leaks() == 0);
- }
TEST(get_scriptable_java_object) {
MemoryLeakDetector leak_detector;
- NPObject* first_obj = IcedTeaScriptableJavaPackageObject::get_scriptable_java_object(&dummy_npp, "DummyClass", "DummyInstance", false);
+ NPObject* first_obj = IcedTeaScriptableJavaObject::get_scriptable_java_object(&dummy_npp, "DummyClass", "DummyInstance", false);
browser_functions.releaseobject(first_obj);
/* After the first call, the object should be cached in the object map */
- NPObject* second_obj = IcedTeaScriptableJavaPackageObject::get_scriptable_java_object(&dummy_npp, "DummyClass", "DummyInstance", false);
+ NPObject* second_obj = IcedTeaScriptableJavaObject::get_scriptable_java_object(&dummy_npp, "DummyClass", "DummyInstance", false);
/* Objects should be the same, because of caching */
CHECK(first_obj == second_obj);
@@ -96,3 +80,19 @@ SUITE(IcedTeaScriptableJavaPackageObject) {
CHECK(leak_detector.memory_leaks() == 0);
}
}
+
+SUITE(IcedTeaScriptableJavaPackageObject) {
+ TEST(deallocate) {
+ MemoryLeakDetector leak_detector;
+ IcedTeaScriptableJavaPackageObject* obj = new IcedTeaScriptableJavaPackageObject(&dummy_npp);
+ IcedTeaScriptableJavaPackageObject::deAllocate(obj);
+ CHECK(leak_detector.memory_leaks() == 0);
+ }
+
+ TEST(get_scriptable_java_object) {
+ MemoryLeakDetector leak_detector;
+ NPObject* obj = IcedTeaScriptableJavaPackageObject::get_scriptable_java_package_object(&dummy_npp, "DummyPackage");
+ browser_functions.releaseobject(obj);
+ CHECK(leak_detector.memory_leaks() == 0);
+ }
+}