diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -1395,36 +1395,37 @@ function BrowserShutdown()
 
   CombinedStopReload.uninit();
 
   gGestureSupport.init(false);
 
   FullScreen.cleanup();
 
   try {
     FullZoom.destroy();
   }
   catch(ex) {
     Components.utils.reportError(ex);
   }
 
   var os = Components.classes["@mozilla.org/observer-service;1"]
     .getService(Components.interfaces.nsIObserverService);
   os.removeObserver(gSessionHistoryObserver, "browser:purge-session-history");
   os.removeObserver(gXPInstallObserver, "xpinstall-install-blocked");
+  os.removeObserver(gMissingPluginInstaller.pluginCrashed, "plugin-crashed");
 
   try {
     gBrowser.removeProgressListener(window.XULBrowserWindow);
     gBrowser.removeTabsProgressListener(window.TabsProgressListener);
   } catch (ex) {
   }
 
   PlacesStarButton.uninit();
 
   try {
     gPrefService.removeObserver(gAutoHideTabbarPrefListener.domain,
                                 gAutoHideTabbarPrefListener);
     gPrefService.removeObserver(gHomeButton.prefDomain, gHomeButton);
     gPrefService.removeObserver(gURLBarEmptyText.domain, gURLBarEmptyText);
   } catch (ex) {
     Components.utils.reportError(ex);
   }
 
@@ -6183,42 +6184,53 @@ var gMissingPluginInstaller = {
                                    function(evt) { if (evt.keyCode == evt.DOM_VK_RETURN)
                                                      gMissingPluginInstaller.managePlugins(evt) },
                                    true);
   },
 
   // Crashed-plugin observer. Notified once per plugin crash, before events
   // are dispatched to individual plugin instances.
   pluginCrashed : function(subject, topic, data) {
     let propertyBag = subject;
     if (!(propertyBag instanceof Ci.nsIPropertyBag2) ||
         !(propertyBag instanceof Ci.nsIWritablePropertyBag2))
      return;
 
 #ifdef MOZ_CRASHREPORTER
     let minidumpID = subject.getPropertyAsAString("minidumpID");
     let submitReports = gCrashReporter.submitReports;
     // The crash reporter wants a DOM element it can append an IFRAME to,
     // which it uses to submit a form. Let's just give it gBrowser.
-    if (submitReports)
+    if (submitReports) {
+      Components.utils.reportError("Submitting crash report");
       gMissingPluginInstaller.CrashSubmit.submit(minidumpID, gBrowser, null, null);
+    }
     propertyBag.setPropertyAsBool("submittedCrashReport", submitReports);
 #endif
   },
 
+  _refreshBrowserFunction: function(browser) {
+    return function() {
+      if (!e.isTrusted)
+        return;
+
+      browser.reload();
+    }
+  },
+
   pluginInstanceCrashed: function (aEvent) {
     // Evil content could fire a fake event at us, ignore them.
     if (!aEvent.isTrusted)
       return;
 
     if (!(aEvent instanceof Ci.nsIDOMDataContainerEvent))
       return;
 
     let submittedReport = aEvent.getData("submittedCrashReport");
     let pluginName      = aEvent.getData("pluginName");
 
     // We're expecting this to be a plugin.
     let plugin = aEvent.target;
     if (!(plugin instanceof Ci.nsIObjectLoadingContent))
       return;
 
     // Force a style flush, so that we ensure our binding is attached.
     plugin.clientTop;
@@ -6234,40 +6246,40 @@ var gMissingPluginInstaller = {
     // The binding has role="link" here, since missing/disabled/blocked
     // plugin UI has a onclick handler on the whole thing. This isn't needed
     // for the plugin-crashed UI, because we use actual HTML links in the text.
     overlay.removeAttribute("role");
 
 #ifdef MOZ_CRASHREPORTER
     let helpClass = submittedReport ? "submitLink" : "notSubmitLink";
     let helpLink = doc.getAnonymousElementByAttribute(plugin, "class", helpClass);
     helpLink.href = gMissingPluginInstaller.crashReportHelpURL;
     let showClass = submittedReport ? "msg msgSubmitted" : "msg msgNotSubmitted";
     let textToShow = doc.getAnonymousElementByAttribute(plugin, "class", showClass);
     textToShow.style.display = "block";
 #endif
 
     let crashText = doc.getAnonymousElementByAttribute(plugin, "class", "msg msgCrashed");
     crashText.textContent = messageString;
 
     let link = doc.getAnonymousElementByAttribute(plugin, "class", "reloadLink");
-    link.addEventListener("click", function(e) { if (e.isTrusted) browser.reload(); }, true);
-
     let browser = gBrowser.getBrowserForDocument(plugin.ownerDocument
                                                        .defaultView.top.document);
+    link.addEventListener("click", this._refreshBrowserFunction(browser), true);
+
     let notificationBox = gBrowser.getNotificationBox(browser);
 
     // Is the <object>'s size too small to hold what we want to show?
     let pluginRect = plugin.getBoundingClientRect();
     // XXX bug 446693. The text-shadow on the submitted-report text at
     //     the bottom causes scrollHeight to be larger than it should be.
     let isObjectTooSmall = (overlay.scrollWidth > pluginRect.width) ||
                            (overlay.scrollHeight - 5 > pluginRect.height);
     if (isObjectTooSmall) {
         // Hide the overlay's contents. Use visibility style, so that it
         // doesn't collapse down to 0x0.
         overlay.style.visibility = "hidden";
         // If another plugin on the page was large enough to show our UI, we
         // don't want to show a notification bar.
         if (!doc.mozNoPluginCrashedNotification)
           showNotificationBar();
     } else {
         // If a previous plugin on the page was too small and resulted in
@@ -6284,37 +6296,37 @@ var gMissingPluginInstaller = {
     }
 
     function showNotificationBar() {
       // If there's already an existing notification bar, don't do anything.
       let notification = notificationBox.getNotificationWithValue("plugin-crashed");
       if (notification)
         return;
 
       // Configure the notification bar
       let priority = notificationBox.PRIORITY_WARNING_MEDIUM;
       let iconURL = "chrome://mozapps/skin/plugins/pluginGeneric-16.png";
       let label = gNavigatorBundle.getString("crashedpluginsMessage.reloadButton.label");
       let accessKey = gNavigatorBundle.getString("crashedpluginsMessage.reloadButton.accesskey");
 
       let buttons = [{
         label: label,
         accessKey: accessKey,
         popup: null,
-        callback: function() { browser.reload(); },
+        callback: this._refreshBrowserFunction(browser),
       }];
 
       let notification = notificationBox.appendNotification(messageString, "plugin-crashed",
                                                             iconURL, priority, buttons);
     }
 
   },
 
   refreshBrowser: function (aEvent) {
     // browser elements are anonymous so we can't just use target.
     var browser = aEvent.originalTarget;
     var notificationBox = gBrowser.getNotificationBox(browser);
     var notification = notificationBox.getNotificationWithValue("missing-plugins");
 
     // clear the plugin list, now that at least one plugin has been installed
     browser.missingPlugins = null;
     if (notification) {
       // reset UI
