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_