diff --git a/modules/plugin/test/mochitest/Makefile.in b/modules/plugin/test/mochitest/Makefile.in index 7380e6a08d48..fc3fac7c305c 100644 --- a/modules/plugin/test/mochitest/Makefile.in +++ b/modules/plugin/test/mochitest/Makefile.in @@ -47,6 +47,7 @@ include $(topsrcdir)/config/rules.mk _MOCHITEST_FILES = \ test_npobject_getters.html \ test_npruntime_npninvoke.html \ + test_npruntime_npninvokedefault.html \ loremipsum.txt \ loremipsum_file.txt \ post.sjs \ diff --git a/modules/plugin/test/mochitest/test_npruntime_npninvokedefault.html b/modules/plugin/test/mochitest/test_npruntime_npninvokedefault.html new file mode 100644 index 000000000000..7963f9e471b2 --- /dev/null +++ b/modules/plugin/test/mochitest/test_npruntime_npninvokedefault.html @@ -0,0 +1,122 @@ + + + NPN_Invoke_Default Tests + + + + + +

+ + + + + + +
+
+ + diff --git a/modules/plugin/test/testplugin/README b/modules/plugin/test/testplugin/README index 9d5e5515ab74..21817e7a66bc 100644 --- a/modules/plugin/test/testplugin/README +++ b/modules/plugin/test/testplugin/README @@ -39,6 +39,10 @@ passing it 1 or more arguments specified in args. The return value of this call is compared against 'expected', and if they match, npnInvokeTest will return true. Otherwise, it will return false. +* npnInvokeDefaultTest(object, argument) +Causes the plugin to call NPN_InvokeDefault on the specified object, +with the specified argument. Returns the result of the invocation. + * getError() If an error has occurred during the last stream or npruntime function, this will return a string error message, otherwise it returns "pass". diff --git a/modules/plugin/test/testplugin/nptest.cpp b/modules/plugin/test/testplugin/nptest.cpp index 48ec576bd545..0728e96bc13b 100644 --- a/modules/plugin/test/testplugin/nptest.cpp +++ b/modules/plugin/test/testplugin/nptest.cpp @@ -66,6 +66,7 @@ typedef bool (* ScriptableFunction) (NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result); static bool npnInvokeTest(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result); +static bool npnInvokeDefaultTest(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result); static bool setUndefinedValueTest(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result); static bool identifierToStringTest(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result); static bool timerTest(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result); @@ -86,6 +87,7 @@ static bool doInternalConsistencyCheck(NPObject* npobj, const NPVariant* args, u static const NPUTF8* sPluginMethodIdentifierNames[] = { "npnInvokeTest", + "npnInvokeDefaultTest", "setUndefinedValueTest", "identifierToStringTest", "timerTest", @@ -107,6 +109,7 @@ static const NPUTF8* sPluginMethodIdentifierNames[] = { static NPIdentifier sPluginMethodIdentifiers[ARRAY_LENGTH(sPluginMethodIdentifierNames)]; static const ScriptableFunction sPluginMethodFunctions[ARRAY_LENGTH(sPluginMethodIdentifierNames)] = { npnInvokeTest, + npnInvokeDefaultTest, setUndefinedValueTest, identifierToStringTest, timerTest, @@ -1001,6 +1004,12 @@ NPN_Invoke(NPP npp, NPObject* obj, NPIdentifier methodName, const NPVariant *arg return sBrowserFuncs->invoke(npp, obj, methodName, args, argCount, result); } +bool +NPN_InvokeDefault(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result) +{ + return sBrowserFuncs->invokeDefault(npp, obj, args, argCount, result); +} + const char* NPN_UserAgent(NPP instance) { @@ -1325,6 +1334,42 @@ compareVariants(NPP instance, const NPVariant* var1, const NPVariant* var2) return success; } +static bool +npnInvokeDefaultTest(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result) +{ + bool success = false; + NPP npp = static_cast(npobj)->npp; + + NPObject* windowObject; + NPN_GetValue(npp, NPNVWindowNPObject, &windowObject); + if (!windowObject) + return false; + + NPIdentifier objectIdentifier = variantToIdentifier(args[0]); + if (!objectIdentifier) + return false; + + NPVariant objectVariant; + if (NPN_GetProperty(npp, windowObject, objectIdentifier, + &objectVariant)) { + if (NPVARIANT_IS_OBJECT(objectVariant)) { + NPObject* selfObject = NPVARIANT_TO_OBJECT(objectVariant); + if (selfObject != NULL) { + NPVariant resultVariant; + if (NPN_InvokeDefault(npp, selfObject, &args[1], argCount - 1, + &resultVariant)) { + *result = resultVariant; + success = true; + } + } + } + NPN_ReleaseVariantValue(&objectVariant); + } + + NPN_ReleaseObject(windowObject); + return success; +} + static bool npnInvokeTest(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result) {