Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/browser-plugin/scriptable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'browser-plugin/scriptable.cpp')
-rw-r--r--browser-plugin/scriptable.cpp39
1 files changed, 37 insertions, 2 deletions
diff --git a/browser-plugin/scriptable.cpp b/browser-plugin/scriptable.cpp
index 2669cac..0be9736 100644
--- a/browser-plugin/scriptable.cpp
+++ b/browser-plugin/scriptable.cpp
@@ -193,9 +193,11 @@ AllocateScriptablePluginObject (NPP npp, NPClass *aClass)
}
ScriptablePluginObject::ScriptablePluginObject (NPP npp) :
- ScriptablePluginObjectBase (npp)
+ ScriptablePluginObjectBase (npp),
+ mMagicWrapper(0)
{
mTitleID = NPN_GetStringIdentifier ("title");
+ mMagicWrapperID = NPN_GetStringIdentifier ("magicWrapper");
mZoomInID = NPN_GetStringIdentifier ("zoomIn");
mZoomOutID = NPN_GetStringIdentifier ("zoomOut");
@@ -226,7 +228,8 @@ bool
ScriptablePluginObject::HasProperty (NPIdentifier name)
{
NPIdentifier properties[] = {
- mTitleID
+ mTitleID,
+ mMagicWrapperID
};
for (guint i = 0; i < G_N_ELEMENTS(properties); i++) {
@@ -259,6 +262,38 @@ ScriptablePluginObject::GetProperty (NPIdentifier name, NPVariant *result)
}
bool
+ScriptablePluginObject::SetProperty (NPIdentifier name, const NPVariant *value)
+{
+ Plugin *plugin = reinterpret_cast<Plugin*> (mNpp->pdata);
+
+ if (name == mMagicWrapperID) {
+ NPObject *newWrapper = NULL;
+
+ if (NPVARIANT_IS_OBJECT (*value)) {
+ newWrapper = NPVARIANT_TO_OBJECT (*value);
+ } else if (NPVARIANT_IS_VOID (*value) ||
+ NPVARIANT_IS_NULL (*value)) {
+ // ok, newWrapper=NULL
+ } else {
+ NPN_SetException (this, "Invalid type for magicWrapper, expected object or null");
+ return false;
+ }
+
+ if (newWrapper) {
+ NPN_RetainObject (newWrapper);
+ }
+ if (mMagicWrapper) {
+ NPN_ReleaseObject (mMagicWrapper);
+ }
+ mMagicWrapper = newWrapper;
+
+ return true;
+ }
+
+ return false;
+}
+
+bool
ScriptablePluginObject::Invoke (NPIdentifier name, const NPVariant *args,
uint32_t argCount, NPVariant *result)
{