[gnome-shell] browser-plugin: Refactor plugin_object_set_property, and fix a bug
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] browser-plugin: Refactor plugin_object_set_property, and fix a bug
- Date: Thu, 26 Jan 2012 13:25:26 +0000 (UTC)
commit 26991988cb76a9bd2f43700a98212099bdb023fb
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Wed Jan 25 01:33:40 2012 -0500
browser-plugin: Refactor plugin_object_set_property, and fix a bug
If the user did "obj.onchanged = 1;" or passed another sort of invalid type,
then we would clear the old listener as well as throw an exception.
https://bugzilla.gnome.org/show_bug.cgi?id=668517
browser-plugin/browser-plugin.c | 55 +++++++++++++++-----------------------
1 files changed, 22 insertions(+), 33 deletions(-)
---
diff --git a/browser-plugin/browser-plugin.c b/browser-plugin/browser-plugin.c
index da08a05..17a8955 100644
--- a/browser-plugin/browser-plugin.c
+++ b/browser-plugin/browser-plugin.c
@@ -810,48 +810,37 @@ plugin_object_get_property (NPObject *npobj,
}
static bool
+plugin_object_set_callback (NPObject **listener,
+ const NPVariant *value)
+{
+ if (!NPVARIANT_IS_OBJECT (*value) && !NPVARIANT_IS_NULL (*value))
+ return FALSE;
+
+ if (*listener)
+ funcs.releaseobject (*listener);
+ *listener = NULL;
+
+ if (NPVARIANT_IS_OBJECT (*value))
+ {
+ funcs.retainobject (*listener);
+ *listener = NPVARIANT_TO_OBJECT (*value);
+ }
+
+ return TRUE;
+}
+
+static bool
plugin_object_set_property (NPObject *npobj,
NPIdentifier name,
const NPVariant *value)
{
PluginObject *obj;
- if (!plugin_object_has_property (npobj, name))
- return FALSE;
-
if (name == onextension_changed_id)
- {
- obj = (PluginObject*) npobj;
- if (obj->listener)
- funcs.releaseobject (obj->listener);
-
- obj->listener = NULL;
- if (NPVARIANT_IS_OBJECT (*value))
- {
- obj->listener = NPVARIANT_TO_OBJECT (*value);
- funcs.retainobject (obj->listener);
- return TRUE;
- }
- else if (NPVARIANT_IS_NULL (*value))
- return TRUE;
- }
+ return plugin_object_set_callback (&obj->listener, value);
if (name == onrestart_id)
- {
- obj = (PluginObject*) npobj;
- if (obj->restart_listener)
- funcs.releaseobject (obj->restart_listener);
-
- obj->restart_listener = NULL;
- if (NPVARIANT_IS_OBJECT (*value))
- {
- obj->restart_listener = NPVARIANT_TO_OBJECT (*value);
- funcs.retainobject (obj->restart_listener);
- return TRUE;
- }
- else if (NPVARIANT_IS_NULL (*value))
- return TRUE;
- }
+ return plugin_object_set_callback (&obj->restart_listener, value);
return FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]