// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"

#include "base/rand_util.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_version_info.h"
#include "chrome/common/dump_without_crashing.h"

namespace browser_sync {

void ChromeReportUnrecoverableError() {
  // Only upload on canary/dev builds to avoid overwhelming crash server.
  chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
  if (channel != chrome::VersionInfo::CHANNEL_CANARY &&
      channel != chrome::VersionInfo::CHANNEL_DEV) {
    return;
  }

  // We only want to upload |kErrorUploadRatio| ratio of errors.
  const double kErrorUploadRatio = 0.15;
  if (kErrorUploadRatio <= 0.0)
    return; // We are not allowed to upload errors.
  double random_number = base::RandDouble();
  if (random_number > kErrorUploadRatio)
    return;

  logging::DumpWithoutCrashing();
}

}  // namespace browser_sync

// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"

#include "base/rand_util.h"
#include "build/build_config.h"

#if defined(OS_WIN)
#include <windows.h>
#endif

#include "chrome/common/chrome_constants.h"

namespace browser_sync {

void ChromeReportUnrecoverableError() {
  // TODO(lipalani): Add this for other platforms as well.
#if defined(OS_WIN)
  const double kErrorUploadRatio = 0.15;

  // We only want to upload |kErrorUploadRatio| ratio of errors.
  if (kErrorUploadRatio <= 0.0)
    return; // We are not allowed to upload errors.
  double random_number = base::RandDouble();
  if (random_number > kErrorUploadRatio)
    return;

  // Get the breakpad pointer from chrome.exe
  typedef void (__cdecl *DumpProcessFunction)();
  DumpProcessFunction DumpProcess = reinterpret_cast<DumpProcessFunction>(
      ::GetProcAddress(::GetModuleHandle(
                       chrome::kBrowserProcessExecutableName),
                       "DumpProcessWithoutCrash"));
  if (DumpProcess)
    DumpProcess();
#endif  // OS_WIN

}

}  // namespace browser_sync

--- 
+++ 
@@ -5,38 +5,29 @@
 #include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"
 
 #include "base/rand_util.h"
-#include "build/build_config.h"
-
-#if defined(OS_WIN)
-#include <windows.h>
-#endif
-
 #include "chrome/common/chrome_constants.h"
+#include "chrome/common/chrome_version_info.h"
+#include "chrome/common/dump_without_crashing.h"
 
 namespace browser_sync {
 
 void ChromeReportUnrecoverableError() {
-  // TODO(lipalani): Add this for other platforms as well.
-#if defined(OS_WIN)
-  const double kErrorUploadRatio = 0.15;
+  // Only upload on canary/dev builds to avoid overwhelming crash server.
+  chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
+  if (channel != chrome::VersionInfo::CHANNEL_CANARY &&
+      channel != chrome::VersionInfo::CHANNEL_DEV) {
+    return;
+  }
 
   // We only want to upload |kErrorUploadRatio| ratio of errors.
+  const double kErrorUploadRatio = 0.15;
   if (kErrorUploadRatio <= 0.0)
     return; // We are not allowed to upload errors.
   double random_number = base::RandDouble();
   if (random_number > kErrorUploadRatio)
     return;
 
-  // Get the breakpad pointer from chrome.exe
-  typedef void (__cdecl *DumpProcessFunction)();
-  DumpProcessFunction DumpProcess = reinterpret_cast<DumpProcessFunction>(
-      ::GetProcAddress(::GetModuleHandle(
-                       chrome::kBrowserProcessExecutableName),
-                       "DumpProcessWithoutCrash"));
-  if (DumpProcess)
-    DumpProcess();
-#endif  // OS_WIN
-
+  logging::DumpWithoutCrashing();
 }
 
 }  // namespace browser_sync
[Sync] Support unrecoverable error uploading on non-win platforms

We now use chrome/common/dump_without_crashing.h, and only upload on canary/
dev builds.

BUG=127429

Review URL: https://codereview.chromium.org/80963003

git-svn-id: de016e52bd170d2d4f2344f9bf92d50478b649e0@236623 0039d316-1c4b-4281-b951-d872f2087c98
