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:
authorTommi Komulainen <tko@litl.com>2009-08-25 10:34:06 (GMT)
committer Marco Pesenti Gritti <marcopg@litl.com>2010-07-27 22:04:22 (GMT)
commit4ca63208acd85880d873b2e59e6ce42df33f874c (patch)
tree2c6e21c493fd5419248cb039874edb34a2c42121 /browser-plugin/scriptable.cpp
parent158f60dac9961a0ed044229b224b7943f3770957 (diff)
browser-plugin: add magicWrapper property
Allow browser to provide an object with callbacks / properties for the plugin to call when status changes (title, clipboard controls, etc.)
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)
{