summaryrefslogtreecommitdiffstats
path: root/components/crash/tools/crash_service.h
diff options
context:
space:
mode:
authorsdefresne <sdefresne@chromium.org>2015-09-17 07:26:09 -0700
committerCommit bot <commit-bot@chromium.org>2015-09-17 14:28:49 +0000
commitd7978868d7ebb7e8f671442f9515d947fab3e9ed (patch)
treea6d74a47c6afb8175b068550a85812b161bad084 /components/crash/tools/crash_service.h
parentb4be7a222b0f097d60a3139874426e35edbd4b07 (diff)
downloadchromium_src-d7978868d7ebb7e8f671442f9515d947fab3e9ed.zip
chromium_src-d7978868d7ebb7e8f671442f9515d947fab3e9ed.tar.gz
chromium_src-d7978868d7ebb7e8f671442f9515d947fab3e9ed.tar.bz2
Revert of Turn components/crash into a layered component. (patchset #6 id:100001 of https://codereview.chromium.org/1315303004/ )
Reason for revert: This breaks Webkit layout tests. Original issue's description: > Turn components/crash into a layered component. > > The crash component cannot be used on iOS (as it depends on //content). > Turn it into a layered component so that it is possible to put shared > code related to crash there (components/crash_keys and objc_zombie.{h,mm}). > > BUG=522955 > TBR=sky@chromium.org > TBR=jschuh@chromium.org > NOPRESUBMIT=true > > Committed: https://crrev.com/4e483c64be5136b785e92c5baa971baca7eea2bc > Cr-Commit-Position: refs/heads/master@{#349384} TBR=blundell@chromium.org,jam@chromium.org,jschuh@chromium.org,mark@chromium.org,rsesek@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=522955 Review URL: https://codereview.chromium.org/1351923002 Cr-Commit-Position: refs/heads/master@{#349417}
Diffstat (limited to 'components/crash/tools/crash_service.h')
-rw-r--r--components/crash/tools/crash_service.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/components/crash/tools/crash_service.h b/components/crash/tools/crash_service.h
new file mode 100644
index 0000000..81b28bd
--- /dev/null
+++ b/components/crash/tools/crash_service.h
@@ -0,0 +1,125 @@
+// Copyright (c) 2011 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.
+
+#ifndef COMPONENTS_CRASH_TOOLS_CRASH_SERVICE_H_
+#define COMPONENTS_CRASH_TOOLS_CRASH_SERVICE_H_
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/files/file_path.h"
+#include "base/synchronization/lock.h"
+
+namespace google_breakpad {
+
+class CrashReportSender;
+class CrashGenerationServer;
+class ClientInfo;
+
+}
+
+namespace breakpad {
+
+// This class implements an out-of-process crash server. It uses breakpad's
+// CrashGenerationServer and CrashReportSender to generate and then send the
+// crash dumps. Internally, it uses OS specific pipe to allow applications to
+// register for crash dumps and later on when a registered application crashes
+// it will signal an event that causes this code to wake up and perform a
+// crash dump on the signaling process. The dump is then stored on disk and
+// possibly sent to the crash2 servers.
+class CrashService {
+ public:
+ CrashService();
+ ~CrashService();
+
+ // Starts servicing crash dumps. Returns false if it failed. Do not use
+ // other members in that case. |operating_dir| is where the CrashService
+ // should store breakpad's checkpoint file. |dumps_path| is the directory
+ // where the crash dumps should be stored.
+ bool Initialize(const base::FilePath& operating_dir,
+ const base::FilePath& dumps_path);
+
+ // Command line switches:
+ //
+ // --max-reports=<number>
+ // Allows to override the maximum number for reports per day. Normally
+ // the crash dumps are never sent so if you want to send any you must
+ // specify a positive number here.
+ static const char kMaxReports[];
+ // --no-window
+ // Does not create a visible window on the desktop. The window does not have
+ // any other functionality other than allowing the crash service to be
+ // gracefully closed.
+ static const char kNoWindow[];
+ // --reporter=<string>
+ // Allows to specify a custom string that appears on the detail crash report
+ // page in the crash server. This should be a 25 chars or less string.
+ // The default tag if not specified is 'crash svc'.
+ static const char kReporterTag[];
+ // --dumps-dir=<directory-path>
+ // Override the directory to which crash dump files will be written.
+ static const char kDumpsDir[];
+ // --pipe-name=<string>
+ // Override the name of the Windows named pipe on which we will
+ // listen for crash dump request messages.
+ static const char kPipeName[];
+
+ // Returns number of crash dumps handled.
+ int requests_handled() const {
+ return requests_handled_;
+ }
+ // Returns number of crash clients registered.
+ int clients_connected() const {
+ return clients_connected_;
+ }
+ // Returns number of crash clients terminated.
+ int clients_terminated() const {
+ return clients_terminated_;
+ }
+
+ // Starts the processing loop. This function does not return unless the
+ // user is logging off or the user closes the crash service window. The
+ // return value is a good number to pass in ExitProcess().
+ int ProcessingLoop();
+
+ private:
+ static void OnClientConnected(void* context,
+ const google_breakpad::ClientInfo* client_info);
+
+ static void OnClientDumpRequest(
+ void* context,
+ const google_breakpad::ClientInfo* client_info,
+ const std::wstring* file_path);
+
+ static void OnClientExited(void* context,
+ const google_breakpad::ClientInfo* client_info);
+
+ // This routine sends the crash dump to the server. It takes the sending_
+ // lock when it is performing the send.
+ static unsigned long __stdcall AsyncSendDump(void* context);
+
+ // Returns the security descriptor which access to low integrity processes
+ // The caller is supposed to free the security descriptor by calling
+ // LocalFree.
+ PSECURITY_DESCRIPTOR GetSecurityDescriptorForLowIntegrity();
+
+ google_breakpad::CrashGenerationServer* dumper_;
+ google_breakpad::CrashReportSender* sender_;
+
+ // the extra tag sent to the server with each dump.
+ std::wstring reporter_tag_;
+
+ // clients serviced statistics:
+ int requests_handled_;
+ int requests_sent_;
+ volatile long clients_connected_;
+ volatile long clients_terminated_;
+ base::Lock sending_;
+
+ DISALLOW_COPY_AND_ASSIGN(CrashService);
+};
+
+} // namespace breakpad
+
+#endif // COMPONENTS_CRASH_TOOLS_CRASH_SERVICE_H_