diff options
Diffstat (limited to 'WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp')
-rw-r--r-- | WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp | 72 |
1 files changed, 58 insertions, 14 deletions
diff --git a/WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp b/WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp index cb01267..ca868be 100644 --- a/WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp +++ b/WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp @@ -58,6 +58,7 @@ webkit_test_plugin_new_instance(NPMIMEType /*mimetype*/, { if (browser->version >= 14) { PluginObject* obj = (PluginObject*)browser->createobject(instance, getPluginClass()); + instance->pdata = obj; for (int i = 0; i < argc; i++) { if (strcasecmp(argn[i], "onstreamload") == 0 && !obj->onStreamLoad) @@ -85,8 +86,11 @@ webkit_test_plugin_new_instance(NPMIMEType /*mimetype*/, obj->testDocumentOpenInDestroyStream = TRUE; else if (strcasecmp(argn[i], "testwindowopen") == 0) obj->testWindowOpen = TRUE; + else if (strcasecmp(argn[i], "onSetWindow") == 0 && !obj->onSetWindow) + obj->onSetWindow = strdup(argv[i]); } - instance->pdata = obj; + + browser->getvalue(instance, NPNVprivateModeBool, (void *)&obj->cachedPrivateBrowsingMode); } return NPERR_NO_ERROR; @@ -114,6 +118,9 @@ webkit_test_plugin_destroy_instance(NPP instance, NPSavedData** /*save*/) if (obj->logDestroy) pluginLog(instance, "NPP_Destroy"); + if (obj->onSetWindow) + free(obj->onSetWindow); + browser->releaseobject(&obj->header); } @@ -126,10 +133,14 @@ webkit_test_plugin_set_window(NPP instance, NPWindow *window) PluginObject* obj = static_cast<PluginObject*>(instance->pdata); if (obj) { + obj->lastWindow = *window; + if (obj->logSetWindow) { pluginLog(instance, "NPP_SetWindow: %d %d", (int)window->width, (int)window->height); obj->logSetWindow = false; } + if (obj->onSetWindow) + executeScript(obj, obj->onSetWindow); if (obj->testWindowOpen) { testWindowOpen(instance); @@ -160,11 +171,11 @@ webkit_test_plugin_new_stream(NPP instance, NPMIMEType /*type*/, NPStream *stream, NPBool /*seekable*/, - uint16* stype) + uint16_t* stype) { PluginObject* obj = static_cast<PluginObject*>(instance->pdata); obj->stream = stream; - *stype = NP_ASFILEONLY; + *stype = NP_NORMAL; if (obj->returnErrorFromNewStream) return NPERR_GENERIC_ERROR; @@ -179,12 +190,32 @@ webkit_test_plugin_new_stream(NPP instance, } static NPError -webkit_test_plugin_destroy_stream(NPP instance, NPStream* /*stream*/, NPError /*reason*/) +webkit_test_plugin_destroy_stream(NPP instance, NPStream* /*stream*/, NPError reason) { PluginObject* obj = (PluginObject*)instance->pdata; - if (obj->onStreamDestroy) - executeScript(obj, obj->onStreamDestroy); + if (obj->onStreamDestroy) { + NPObject* windowObject = 0; + NPError error = browser->getvalue(instance, NPNVWindowNPObject, &windowObject); + + if (error == NPERR_NO_ERROR) { + NPVariant onStreamDestroyVariant; + if (browser->getproperty(instance, windowObject, browser->getstringidentifier(obj->onStreamDestroy), &onStreamDestroyVariant)) { + if (NPVARIANT_IS_OBJECT(onStreamDestroyVariant)) { + NPObject* onStreamDestroyFunction = NPVARIANT_TO_OBJECT(onStreamDestroyVariant); + + NPVariant reasonVariant; + INT32_TO_NPVARIANT(reason, reasonVariant); + + NPVariant result; + browser->invokeDefault(instance, onStreamDestroyFunction, &reasonVariant, 1, &result); + browser->releasevariantvalue(&result); + } + browser->releasevariantvalue(&onStreamDestroyVariant); + } + browser->releaseobject(windowObject); + } + } if (obj->testDocumentOpenInDestroyStream) { testDocumentOpen(instance); @@ -199,20 +230,25 @@ webkit_test_plugin_stream_as_file(NPP /*instance*/, NPStream* /*stream*/, const { } -static int32 +static int32_t webkit_test_plugin_write_ready(NPP /*instance*/, NPStream* /*stream*/) { - return 0; + return 4096; } -static int32 -webkit_test_plugin_write(NPP /*instance*/, +static int32_t +webkit_test_plugin_write(NPP instance, NPStream* /*stream*/, int32_t /*offset*/, - int32_t /*len*/, + int32_t len, void* /*buffer*/) { - return 0; + PluginObject* obj = (PluginObject*)instance->pdata; + + if (obj->returnNegativeOneFromWrite) + return -1; + + return len; } static void @@ -282,9 +318,17 @@ webkit_test_plugin_get_value(NPP instance, NPPVariable variable, void *value) } static NPError -webkit_test_plugin_set_value(NPP /*instance*/, NPNVariable /*variable*/, void* /*value*/) +webkit_test_plugin_set_value(NPP instance, NPNVariable variable, void* value) { - return NPERR_NO_ERROR; + PluginObject* obj = static_cast<PluginObject*>(instance->pdata); + + switch (variable) { + case NPNVprivateModeBool: + obj->cachedPrivateBrowsingMode = *(NPBool*)value; + return NPERR_NO_ERROR; + default: + return NPERR_GENERIC_ERROR; + } } char * |