diff options
author | Tommi 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) |
commit | 4ca63208acd85880d873b2e59e6ce42df33f874c (patch) | |
tree | 2c6e21c493fd5419248cb039874edb34a2c42121 | |
parent | 158f60dac9961a0ed044229b224b7943f3770957 (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.)
-rw-r--r-- | browser-plugin/scriptable.cpp | 39 | ||||
-rw-r--r-- | browser-plugin/scriptable.h | 4 |
2 files changed, 41 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) { diff --git a/browser-plugin/scriptable.h b/browser-plugin/scriptable.h index 0b9bf29..4a96b77 100644 --- a/browser-plugin/scriptable.h +++ b/browser-plugin/scriptable.h @@ -83,6 +83,7 @@ class ScriptablePluginObject : public ScriptablePluginObjectBase virtual bool HasMethod (NPIdentifier name); virtual bool HasProperty (NPIdentifier name); virtual bool GetProperty (NPIdentifier name, NPVariant *result); + virtual bool SetProperty (NPIdentifier name, const NPVariant *value); virtual bool Invoke (NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result); virtual bool InvokeDefault (const NPVariant *args, uint32_t argCount, @@ -90,11 +91,14 @@ class ScriptablePluginObject : public ScriptablePluginObjectBase private: NPIdentifier mTitleID; + NPIdentifier mMagicWrapperID; NPIdentifier mZoomInID; NPIdentifier mZoomOutID; NPIdentifier mFindPreviousID; NPIdentifier mFindNextID; + + NPObject *mMagicWrapper; }; class ConstructablePluginObject : public ScriptablePluginObjectBase |