diff --git a/modules/plugin/test/mochitest/Makefile.in b/modules/plugin/test/mochitest/Makefile.in index f754fec70976..0186bfe1b9d1 100644 --- a/modules/plugin/test/mochitest/Makefile.in +++ b/modules/plugin/test/mochitest/Makefile.in @@ -116,7 +116,6 @@ endif ifeq (gtk2,$(MOZ_WIDGET_TOOLKIT)) _MOCHITEST_FILES += \ test_copyText.html \ - test_crash_nested_loop.html \ $(NULL) endif diff --git a/modules/plugin/test/mochitest/test_crash_nested_loop.html b/modules/plugin/test/mochitest/test_crash_nested_loop.html deleted file mode 100644 index bad44294d331..000000000000 --- a/modules/plugin/test/mochitest/test_crash_nested_loop.html +++ /dev/null @@ -1,40 +0,0 @@ - - Plugin crashing in nested loop - - - - - - - diff --git a/modules/plugin/test/testplugin/nptest.cpp b/modules/plugin/test/testplugin/nptest.cpp index dc8796081290..8875e6f81721 100644 --- a/modules/plugin/test/testplugin/nptest.cpp +++ b/modules/plugin/test/testplugin/nptest.cpp @@ -60,8 +60,6 @@ #define PLUGIN_VERSION "1.0.0.0" #define ARRAY_LENGTH(a) (sizeof(a)/sizeof(a[0])) -#define STATIC_ASSERT(condition) \ - extern void np_static_assert(int arg[(condition) ? 1 : -1]) // // Intentional crash @@ -69,7 +67,7 @@ int gCrashCount = 0; -void +static void NoteIntentionalCrash() { char* bloatLog = getenv("XPCOM_MEM_BLOAT_LOG"); @@ -89,9 +87,11 @@ NoteIntentionalCrash() } } -void +static void IntentionalCrash() { + NoteIntentionalCrash(); + int *pi = NULL; *pi = 55; // Crash dereferencing null pointer ++gCrashCount; @@ -156,7 +156,6 @@ static bool checkGCRace(NPObject* npobj, const NPVariant* args, uint32_t argCoun static bool hangPlugin(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result); static bool getClipboardText(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result); static bool callOnDestroy(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result); -static bool crashPluginInNestedLoop(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result); static const NPUTF8* sPluginMethodIdentifierNames[] = { "npnEvaluateTest", @@ -198,10 +197,9 @@ static const NPUTF8* sPluginMethodIdentifierNames[] = { "hang", "getClipboardText", "callOnDestroy", - "crashInNestedLoop", }; static NPIdentifier sPluginMethodIdentifiers[ARRAY_LENGTH(sPluginMethodIdentifierNames)]; -static const ScriptableFunction sPluginMethodFunctions[] = { +static const ScriptableFunction sPluginMethodFunctions[ARRAY_LENGTH(sPluginMethodIdentifierNames)] = { npnEvaluateTest, npnInvokeTest, npnInvokeDefaultTest, @@ -241,12 +239,8 @@ static const ScriptableFunction sPluginMethodFunctions[] = { hangPlugin, getClipboardText, callOnDestroy, - crashPluginInNestedLoop, }; -STATIC_ASSERT(ARRAY_LENGTH(sPluginMethodIdentifierNames) == - ARRAY_LENGTH(sPluginMethodFunctions)); - struct URLNotifyData { const char* cookie; @@ -711,7 +705,6 @@ NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char* instanceData->npnNewStream = true; } if (strcmp(argn[i], "newcrash") == 0) { - NoteIntentionalCrash(); IntentionalCrash(); } } @@ -794,10 +787,8 @@ NPP_Destroy(NPP instance, NPSavedData** save) printf("NPP_Destroy\n"); InstanceData* instanceData = (InstanceData*)(instance->pdata); - if (instanceData->crashOnDestroy) { - NoteIntentionalCrash(); + if (instanceData->crashOnDestroy) IntentionalCrash(); - } if (instanceData->callOnDestroy) { NPVariant result; @@ -2154,7 +2145,6 @@ streamTest(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* static bool crashPlugin(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result) { - NoteIntentionalCrash(); IntentionalCrash(); VOID_TO_NPVARIANT(*result); return true; @@ -2641,29 +2631,12 @@ getClipboardText(NPObject* npobj, const NPVariant* args, uint32_t argCount, return true; } -bool -crashPluginInNestedLoop(NPObject* npobj, const NPVariant* args, - uint32_t argCount, NPVariant* result) -{ - NPP npp = static_cast(npobj)->npp; - InstanceData* id = static_cast(npp->pdata); - return pluginCrashInNestedLoop(id); -} - #else bool getClipboardText(NPObject* npobj, const NPVariant* args, uint32_t argCount, NPVariant* result) { - // XXX Not implemented! - return false; -} - -bool -crashPluginInNestedLoop(NPObject* npobj, const NPVariant* args, - uint32_t argCount, NPVariant* result) -{ - // XXX Not implemented! + /// XXX Not implemented! return false; } #endif diff --git a/modules/plugin/test/testplugin/nptest.h b/modules/plugin/test/testplugin/nptest.h index af10bb4988d9..327efcea8f79 100644 --- a/modules/plugin/test/testplugin/nptest.h +++ b/modules/plugin/test/testplugin/nptest.h @@ -127,7 +127,4 @@ typedef struct InstanceData { void notifyDidPaint(InstanceData* instanceData); -void NoteIntentionalCrash(); -void IntentionalCrash(); - #endif // nptest_h_ diff --git a/modules/plugin/test/testplugin/nptest_gtk2.cpp b/modules/plugin/test/testplugin/nptest_gtk2.cpp index 581237471e57..ef5a9d073a5d 100644 --- a/modules/plugin/test/testplugin/nptest_gtk2.cpp +++ b/modules/plugin/test/testplugin/nptest_gtk2.cpp @@ -35,15 +35,12 @@ #include "nptest_platform.h" #include "npapi.h" -#include #include #ifdef MOZ_X11 #include #include #endif -#include #include -#include using namespace std; @@ -638,68 +635,3 @@ pluginGetClipboardText(InstanceData* instanceData) return retText; } - -//----------------------------------------------------------------------------- -// NB: this test is quite gross in that it's not only -// nondeterministic, but dependent on the guts of the nested glib -// event loop handling code in PluginModule. We first sleep long -// enough to make sure that the "detection timer" will be pending when -// we enter the nested glib loop, then similarly for the "process browser -// events" timer. Then we "schedule" the crasher thread to run at about the -// same time we expect that the PluginModule "process browser events" task -// will run. If all goes well, the plugin process will crash and generate the -// XPCOM "plugin crashed" task, and the browser will run that task while still -// in the "process some events" loop. - -static void* -CrasherThread(void* data) -{ - // Give the parent thread a chance to send the message. - usleep(200); - - IntentionalCrash(); - - // not reached - return(NULL); -} - -bool -pluginCrashInNestedLoop(InstanceData* instanceData) -{ - // wait at least long enough for nested loop detector task to be pending ... - sleep(1); - - // Run the nested loop detector. Other events are not expected. - if (!g_main_context_iteration(NULL, TRUE)) { - g_warning("DetectNestedEventLoop did not fire"); - return true; // trigger a test failure - - } - - // wait at least long enough for the "process browser events" task to be - // pending ... - sleep(1); - - // we'll be crashing soon, note that fact now to avoid messing with - // timing too much - NoteIntentionalCrash(); - - // schedule the crasher thread ... - pthread_t crasherThread; - if (0 != pthread_create(&crasherThread, NULL, CrasherThread, NULL)) { - g_warning("Failed to create thread"); - return true; // trigger a test failure - } - - // .. and hope the time it takes to spawn means that it crashes at about the - // same time as the "process browser events" task that should run next is - // being processed in the parent. Other events are not expected. - if (g_main_context_iteration(NULL, TRUE)) { - g_warning("Should have crashed in ProcessBrowserEvents"); - } else { - g_warning("ProcessBrowserEvents did not fire"); - } - - // if we get here without crashing, then we'll trigger a test failure - return true; -} diff --git a/modules/plugin/test/testplugin/nptest_platform.h b/modules/plugin/test/testplugin/nptest_platform.h index 08f028edad16..2e85306ecbad 100644 --- a/modules/plugin/test/testplugin/nptest_platform.h +++ b/modules/plugin/test/testplugin/nptest_platform.h @@ -126,12 +126,4 @@ void pluginDoInternalConsistencyCheck(InstanceData* instanceData, std::string& e */ std::string pluginGetClipboardText(InstanceData* instanceData); -/** - * Crash while in a nested event loop. The goal is to catch the - * browser processing the XPCOM event generated from the plugin's - * crash while other plugin code is still on the stack. - * See https://bugzilla.mozilla.org/show_bug.cgi?id=550026. - */ -bool pluginCrashInNestedLoop(InstanceData* instanceData); - #endif // nptest_platform_h_