diff --git a/mozilla/modules/plugin/samples/4x-scriptable/nsI4xScriptablePlugin.idl b/mozilla/modules/plugin/samples/4x-scriptable/nsI4xScriptablePlugin.idl index f350cb9615e..4069120c1e4 100644 --- a/mozilla/modules/plugin/samples/4x-scriptable/nsI4xScriptablePlugin.idl +++ b/mozilla/modules/plugin/samples/4x-scriptable/nsI4xScriptablePlugin.idl @@ -22,10 +22,14 @@ #include "nsISupports.idl" +interface acmeIScriptObject; + [scriptable, uuid(482e1890-1fe5-11d5-9cf8-0060b0fbd8ac)] interface nsI4xScriptablePlugin : nsISupports { void showVersion(); void clear(); readonly attribute string version; + + void setWindow(in acmeIScriptObject window); }; diff --git a/mozilla/modules/plugin/samples/4x-scriptable/nsScriptablePeer.cpp b/mozilla/modules/plugin/samples/4x-scriptable/nsScriptablePeer.cpp index 9ed0358a909..b1445ee1167 100644 --- a/mozilla/modules/plugin/samples/4x-scriptable/nsScriptablePeer.cpp +++ b/mozilla/modules/plugin/samples/4x-scriptable/nsScriptablePeer.cpp @@ -47,6 +47,8 @@ // be callable from JavaScript // #include "plugin.h" +#include "acmeIScriptObject.h" +#include "npapi.h" static NS_DEFINE_IID(kI4xScriptablePluginIID, NS_I4XSCRIPTABLEPLUGIN_IID); static NS_DEFINE_IID(kIClassInfoIID, NS_ICLASSINFO_IID); @@ -54,8 +56,9 @@ static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); nsScriptablePeer::nsScriptablePeer(CPlugin* aPlugin) { - mPlugin = aPlugin; mRefCnt = 0; + mPlugin = aPlugin; + mWindow = nsnull; } nsScriptablePeer::~nsScriptablePeer() @@ -133,3 +136,33 @@ NS_IMETHODIMP nsScriptablePeer::GetVersion(char * *aVersion) mPlugin->getVersion(aVersion); return NS_OK; } + +NS_IMETHODIMP nsScriptablePeer::SetWindow(acmeIScriptObject *window) +{ + NS_IF_ADDREF(window); + NS_IF_RELEASE(mWindow); + mWindow = window; + + // evaluate a JavaScript expression. + acmeIScriptObject* result; + nsresult rv = window->Evaluate("Math.PI", &result); + if (NS_SUCCEEDED(rv) && result) { + double value; + result->ToNumber(&value); + NS_RELEASE(result); + } + + // read the current window's location. + acmeIScriptObject* location = nsnull; + rv = window->GetProperty("location", &location); + if (NS_SUCCEEDED(rv) && location) { + char* locationStr = NULL; + rv = location->ToString(&locationStr); + if (NS_SUCCEEDED(rv) && locationStr) { + NPN_MemFree(locationStr); + } + NS_RELEASE(location); + } + + return NS_OK; +} diff --git a/mozilla/modules/plugin/samples/4x-scriptable/nsScriptablePeer.h b/mozilla/modules/plugin/samples/4x-scriptable/nsScriptablePeer.h index 38327cda103..de6c91432cb 100644 --- a/mozilla/modules/plugin/samples/4x-scriptable/nsScriptablePeer.h +++ b/mozilla/modules/plugin/samples/4x-scriptable/nsScriptablePeer.h @@ -100,6 +100,7 @@ public: protected: CPlugin* mPlugin; + acmeIScriptObject* mWindow; }; #endif \ No newline at end of file