bug 424960 - only enable crash reporting for X% of release builds. r=bsmedberg (blocking 1.9)
authorted.mielczarek@gmail.com
Mon, 07 Apr 2008 14:18:06 -0700
changeset 14003 2f0567b66496ce4838c13626a52e31aae4992b3d
parent 14002 929ab5c67da38dc7478267dfe2d9cd1c616cc2b1
child 14004 21e9a9e5e9c6df11be5df81934fdba02ec0cc928
push idunknown
push userunknown
push dateunknown
reviewersbsmedberg
bugs424960
milestone1.9pre
bug 424960 - only enable crash reporting for X% of release builds. r=bsmedberg (blocking 1.9)
configure.in
toolkit/crashreporter/client/crashreporter.cpp
toolkit/crashreporter/client/crashreporter.h
toolkit/crashreporter/client/crashreporter_linux.cpp
toolkit/crashreporter/client/crashreporter_osx.mm
toolkit/crashreporter/client/crashreporter_win.cpp
toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/info.nib
toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/keyedobjects.nib
--- a/configure.in
+++ b/configure.in
@@ -5382,16 +5382,27 @@ if test -n "$MOZ_CRASHREPORTER"; then
     PKG_CHECK_MODULES(MOZ_GTHREAD, gthread-2.0)
     AC_SUBST(MOZ_GTHREAD_CFLAGS)
     AC_SUBST(MOZ_GTHREAD_LIBS)
 
     AC_CHECK_HEADERS([curl/curl.h], [], [AC_MSG_ERROR([Couldn't find curl/curl.h which is required for the crash reporter.  Use --disable-crashreporter to disable the crash reporter.])])
   fi
 fi
 
+MOZ_ARG_WITH_STRING(crashreporter-enable-percent,
+[  --with-crashreporter-enable-percent=NN  Enable sending crash reports by default on NN% of users. (default=100)],
+[ val=`echo $withval | sed 's/[^0-9]//g'`
+    MOZ_CRASHREPORTER_ENABLE_PERCENT="$val"])
+
+if test -z "$MOZ_CRASHREPORTER_ENABLE_PERCENT"; then
+   MOZ_CRASHREPORTER_ENABLE_PERCENT=100
+fi
+AC_DEFINE_UNQUOTED(MOZ_CRASHREPORTER_ENABLE_PERCENT, $MOZ_CRASHREPORTER_ENABLE_PERCENT)
+
+
 dnl ========================================================
 dnl = Build mochitest JS/DOM tests (on by default)
 dnl ========================================================
 MOZ_ARG_DISABLE_BOOL(mochitest,
 [  --disable-mochitest        Disable mochitest harness],
     MOZ_MOCHITEST=,
     MOZ_MOCHITEST=1 )
 
--- a/toolkit/crashreporter/client/crashreporter.cpp
+++ b/toolkit/crashreporter/client/crashreporter.cpp
@@ -43,16 +43,17 @@
 // Disable exception handler warnings.
 # pragma warning( disable : 4530 )
 #endif
 
 #include <fstream>
 #include <sstream>
 #include <memory>
 #include <time.h>
+#include <stdlib.h>
 #include <string.h>
 
 using std::string;
 using std::istream;
 using std::ifstream;
 using std::istringstream;
 using std::ostringstream;
 using std::ostream;
@@ -360,16 +361,22 @@ bool SendCompleted(bool success, const s
 {
   if (success) {
     DeleteDump();
     return AddSubmittedReport(serverResponse);
   }
   return true;
 }
 
+bool ShouldEnableSending()
+{
+  srand(time(0));
+  return ((rand() % 100) < MOZ_CRASHREPORTER_ENABLE_PERCENT);
+}
+
 } // namespace CrashReporter
 
 using namespace CrashReporter;
 
 void RewriteStrings(StringTable& queryParameters)
 {
   // rewrite some UI strings with the values from the query parameters
   string product = queryParameters["ProductName"];
--- a/toolkit/crashreporter/client/crashreporter.h
+++ b/toolkit/crashreporter/client/crashreporter.h
@@ -97,16 +97,17 @@ namespace CrashReporter {
                     StringTable& strings,
                     bool escape);
   bool WriteStringsToFile(const std::string& path,
                           const std::string& header,
                           StringTable& strings,
                           bool escape);
   void LogMessage(const std::string& message);
   void DeleteDump();
+  bool ShouldEnableSending();
 }
 
 //=============================================================================
 // implemented in the platform-specific files
 //=============================================================================
 
 bool UIInit();
 void UIShutdown();
--- a/toolkit/crashreporter/client/crashreporter_linux.cpp
+++ b/toolkit/crashreporter/client/crashreporter_linux.cpp
@@ -105,20 +105,23 @@ static void LoadSettings()
       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gEmailMeCheck),
                                    settings["EmailMe"][0] != '0');
     }
     if (settings.find("IncludeURL") != settings.end() &&
         gIncludeURLCheck != 0) {
       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gIncludeURLCheck),
                                    settings["IncludeURL"][0] != '0');
     }
-    if (settings.find("SubmitReport") != settings.end()) {
-      gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gSubmitReportCheck),
-                                   settings["SubmitReport"][0] != '0');
-    }
+    bool enabled;
+    if (settings.find("SubmitReport") != settings.end())
+      enabled = settings["SubmitReport"][0] != '0';
+    else
+      enabled = ShouldEnableSending();
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gSubmitReportCheck),
+                                 enabled);
   }
 }
 
 static void SaveSettings()
 {
   StringTable settings;
 
   ReadStringsFromFile(gSettingsPath + "/" + kIniFile, settings, true);
--- a/toolkit/crashreporter/client/crashreporter_osx.mm
+++ b/toolkit/crashreporter/client/crashreporter_osx.mm
@@ -154,16 +154,31 @@ static bool RestartApplication()
     [mViewReportButton setAutoresizingMask:buttonMask];
     [mSubmitReportButton setAutoresizingMask:checkMask];
     [mCommentScrollView setAutoresizingMask:commentScrollMask];
   }
 
   // resize some buttons horizontally and possibly some controls vertically
   [self doInitialResizing];
 
+  // load default state of submit checkbox
+  // we don't just do this via IB because we want the default to be
+  // off a certain percentage of the time
+  BOOL submitChecked = NO;
+  NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
+  if (nil != [userDefaults objectForKey:@"submitReport"]) {
+    submitChecked =  [userDefaults boolForKey:@"submitReport"];
+  }
+  else {
+    // use compile-time specified enable percentage
+    submitChecked = ShouldEnableSending();
+    [userDefaults setBool:submitChecked forKey:@"submitReport"];
+  }
+  [mSubmitReportButton setState:(submitChecked ? NSOnState : NSOffState)];
+  
   [self updateSubmit];
   [self updateURL];
   [self updateEmail];
 
   [mWindow makeKeyAndOrderFront:nil];
 }
 
 -(void)showErrorUI:(const string&)message
@@ -239,16 +254,19 @@ static bool RestartApplication()
 - (void)closeMeDown:(id)unused
 {
   [NSApp terminate:self];
 }
 
 -(IBAction)submitReportClicked:(id)sender
 {
   [self updateSubmit];
+  NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
+  [userDefaults setBool:[mSubmitReportButton state] == NSOnState
+   forKey:@"submitReport"];
 }
 
 -(IBAction)viewReportClicked:(id)sender
 {
   [self showReportInfo];
   [NSApp beginSheet:mViewReportWindow modalForWindow:mWindow
    modalDelegate:nil didEndSelector:nil contextInfo:nil];
 }
--- a/toolkit/crashreporter/client/crashreporter_win.cpp
+++ b/toolkit/crashreporter/client/crashreporter_win.cpp
@@ -534,17 +534,18 @@ static void UpdateURL(HWND hwndDlg)
 }
 
 static void UpdateEmail(HWND hwndDlg)
 {
   if (IsDlgButtonChecked(hwndDlg, IDC_EMAILMECHECK)) {
     wchar_t email[MAX_EMAIL_LENGTH];
     GetDlgItemText(hwndDlg, IDC_EMAILTEXT, email, sizeof(email));
     gQueryParameters[L"Email"] = email;
-    EnableWindow(GetDlgItem(hwndDlg, IDC_EMAILTEXT), true);
+    if (IsDlgButtonChecked(hwndDlg, IDC_SUBMITREPORTCHECK))
+      EnableWindow(GetDlgItem(hwndDlg, IDC_EMAILTEXT), true);
   } else {
     gQueryParameters.erase(L"Email");
     EnableWindow(GetDlgItem(hwndDlg, IDC_EMAILTEXT), false);
   }
 }
 
 static void UpdateComment(HWND hwndDlg)
 {
@@ -776,16 +777,29 @@ static void StretchControlsToFit(HWND hw
       MoveWindow(hwndControl, r.left, r.top,
                  r.right - r.left,
                  r.bottom - r.top,
                  TRUE);
     }
   }
 }
 
+static void SubmitReportChecked(HWND hwndDlg)
+{
+  bool enabled = (IsDlgButtonChecked(hwndDlg, IDC_SUBMITREPORTCHECK) != 0);
+  EnableWindow(GetDlgItem(hwndDlg, IDC_VIEWREPORTBUTTON), enabled);
+  EnableWindow(GetDlgItem(hwndDlg, IDC_COMMENTTEXT), enabled);
+  EnableWindow(GetDlgItem(hwndDlg, IDC_INCLUDEURLCHECK), enabled);
+  EnableWindow(GetDlgItem(hwndDlg, IDC_EMAILMECHECK), enabled);
+  EnableWindow(GetDlgItem(hwndDlg, IDC_EMAILTEXT),
+               enabled && (IsDlgButtonChecked(hwndDlg, IDC_EMAILMECHECK)
+                           != 0));
+  SetDlgItemVisible(hwndDlg, IDC_PROGRESSTEXT, enabled);
+}
+
 static BOOL CALLBACK CrashReporterDialogProc(HWND hwndDlg, UINT message,
                                              WPARAM wParam, LPARAM lParam)
 {
   static int sHeight = 0;
 
   bool success;
   bool enabled;
 
@@ -811,30 +825,23 @@ static BOOL CALLBACK CrashReporterDialog
 
     hwnd = GetDlgItem(hwndDlg, IDC_SUBMITREPORTCHECK);
     GetRelativeRect(hwnd, hwndDlg, &rect);
     int maxdiff = ResizeControl(hwnd, rect, Str(ST_CHECKSUBMIT), false,
                                 gCheckboxPadding);
     SetDlgItemText(hwndDlg, IDC_SUBMITREPORTCHECK,
                    Str(ST_CHECKSUBMIT).c_str());
 
-    if (CheckBoolKey(gCrashReporterKey.c_str(),
-                     SUBMIT_REPORT_VALUE, &enabled) &&
-        !enabled) {
-      CheckDlgButton(hwndDlg, IDC_SUBMITREPORTCHECK, BST_UNCHECKED);
-      EnableWindow(GetDlgItem(hwndDlg, IDC_VIEWREPORTBUTTON), enabled);
-      EnableWindow(GetDlgItem(hwndDlg, IDC_COMMENTTEXT), enabled);
-      EnableWindow(GetDlgItem(hwndDlg, IDC_INCLUDEURLCHECK), enabled);
-      EnableWindow(GetDlgItem(hwndDlg, IDC_EMAILMECHECK), enabled);
-      EnableWindow(GetDlgItem(hwndDlg, IDC_EMAILTEXT), enabled);
-      SetDlgItemVisible(hwndDlg, IDC_PROGRESSTEXT, enabled);
-    } else {
-      CheckDlgButton(hwndDlg, IDC_SUBMITREPORTCHECK, BST_CHECKED);
-    }
+    if (!CheckBoolKey(gCrashReporterKey.c_str(),
+                      SUBMIT_REPORT_VALUE, &enabled))
+      enabled = ShouldEnableSending();
 
+    CheckDlgButton(hwndDlg, IDC_SUBMITREPORTCHECK, enabled ? BST_CHECKED
+                                                           : BST_UNCHECKED);
+    SubmitReportChecked(hwndDlg);
 
     HWND hwndComment = GetDlgItem(hwndDlg, IDC_COMMENTTEXT);
     WNDPROC OldWndProc = (WNDPROC)SetWindowLongPtr(hwndComment,
                                                    GWLP_WNDPROC,
                                                    (LONG_PTR)EditSubclassProc);
 
     // Subclass comment edit control to get placeholder text
     SetWindowLongPtr(hwndComment, GWLP_USERDATA, (LONG_PTR)OldWndProc);
@@ -1035,25 +1042,17 @@ static BOOL CALLBACK CrashReporterDialog
   case WM_COMMAND: {
     if (HIWORD(wParam) == BN_CLICKED) {
       switch(LOWORD(wParam)) {
       case IDC_VIEWREPORTBUTTON:
         DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_VIEWREPORTDIALOG), hwndDlg,
                        (DLGPROC)ViewReportDialogProc, 0);
         break;
       case IDC_SUBMITREPORTCHECK:
-        enabled = (IsDlgButtonChecked(hwndDlg, IDC_SUBMITREPORTCHECK) != 0);
-        EnableWindow(GetDlgItem(hwndDlg, IDC_VIEWREPORTBUTTON), enabled);
-        EnableWindow(GetDlgItem(hwndDlg, IDC_COMMENTTEXT), enabled);
-        EnableWindow(GetDlgItem(hwndDlg, IDC_INCLUDEURLCHECK), enabled);
-        EnableWindow(GetDlgItem(hwndDlg, IDC_EMAILMECHECK), enabled);
-        EnableWindow(GetDlgItem(hwndDlg, IDC_EMAILTEXT),
-                     enabled && (IsDlgButtonChecked(hwndDlg, IDC_EMAILMECHECK)
-                                 != 0));
-        SetDlgItemVisible(hwndDlg, IDC_PROGRESSTEXT, enabled);
+        SubmitReportChecked(hwndDlg);
         break;
       case IDC_INCLUDEURLCHECK:
         UpdateURL(hwndDlg);
         break;
       case IDC_EMAILMECHECK:
         UpdateEmail(hwndDlg);
         break;
       case IDC_CLOSEBUTTON:
--- a/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/info.nib
+++ b/toolkit/crashreporter/client/macbuild/Contents/Resources/English.lproj/MainMenu.nib/info.nib
@@ -3,16 +3,16 @@
 <plist version="1.0">
 <dict>
 	<key>IBFramework Version</key>
 	<string>629</string>
 	<key>IBOldestOS</key>
 	<integer>5</integer>
 	<key>IBOpenObjects</key>
 	<array>
-		<integer>21</integer>
+		<integer>2</integer>
 	</array>
 	<key>IBSystem Version</key>
-	<string>9B18</string>
+	<string>9C7010</string>
 	<key>targetFramework</key>
 	<string>IBCocoaFramework</string>
 </dict>
 </plist>
index 7d3709ec9ceec75dc38fb8785079e0edb2ca1411..d390a16cd8afc6c7054d4dc7dbad131c8cf1424b
GIT binary patch
literal 27027
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