Ensure low-memory renderers retry failed loads correctly.
[chromium-blink-merge.git] / components / crash / app / crash_reporter_client.h
bloba3a003c40d7b112df62dbb82975bc766dd311be1
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef COMPONENTS_CRASH_APP_CRASH_REPORTER_CLIENT_H_
6 #define COMPONENTS_CRASH_APP_CRASH_REPORTER_CLIENT_H_
8 #include <string>
10 #include "base/strings/string16.h"
11 #include "build/build_config.h"
13 namespace base {
14 class FilePath;
17 #if defined(OS_MACOSX)
18 // We don't want to directly include
19 // breakpad/src/client/mac/Framework/Breakpad.h here, so we repeat the
20 // definition of BreakpadRef.
22 // On Mac, when compiling without breakpad support, a stub implementation is
23 // compiled in. Not having any includes of the breakpad library allows for
24 // reusing this header for the stub.
25 typedef void* BreakpadRef;
26 #endif
28 namespace crash_reporter {
30 class CrashReporterClient;
32 // Setter and getter for the client. The client should be set early, before any
33 // crash reporter code is called, and should stay alive throughout the entire
34 // runtime.
35 void SetCrashReporterClient(CrashReporterClient* client);
37 #if defined(CRASH_IMPLEMENTATION)
38 // The components's embedder API should only be used by the component.
39 CrashReporterClient* GetCrashReporterClient();
40 #endif
42 // Interface that the embedder implements.
43 class CrashReporterClient {
44 public:
45 CrashReporterClient();
46 virtual ~CrashReporterClient();
48 #if !defined(OS_MACOSX)
49 // Sets the crash reporting client ID, a unique identifier for the client
50 // that is sending crash reports. After it is set, it should not be changed.
51 // |client_guid| may either be a full GUID or a GUID that was already stripped
52 // from its dashes.
54 // On Mac OS X, this is the responsibility of Crashpad, and can not be set
55 // directly by the client.
56 virtual void SetCrashReporterClientIdFromGUID(const std::string& client_guid);
57 #endif
59 #if defined(OS_WIN)
60 // Returns true if an alternative location to store the minidump files was
61 // specified. Returns true if |crash_dir| was set.
62 virtual bool GetAlternativeCrashDumpLocation(base::FilePath* crash_dir);
64 // Returns a textual description of the product type and version to include
65 // in the crash report.
66 virtual void GetProductNameAndVersion(const base::FilePath& exe_path,
67 base::string16* product_name,
68 base::string16* version,
69 base::string16* special_build,
70 base::string16* channel_name);
72 // Returns true if a restart dialog should be displayed. In that case,
73 // |message| and |title| are set to a message to display in a dialog box with
74 // the given title before restarting, and |is_rtl_locale| indicates whether
75 // to display the text as RTL.
76 virtual bool ShouldShowRestartDialog(base::string16* title,
77 base::string16* message,
78 bool* is_rtl_locale);
80 // Returns true if it is ok to restart the application. Invoked right before
81 // restarting after a crash.
82 virtual bool AboutToRestart();
84 // Returns true if the crash report uploader supports deferred uploads.
85 virtual bool GetDeferredUploadsSupported(bool is_per_user_install);
87 // Returns true if the running binary is a per-user installation.
88 virtual bool GetIsPerUserInstall(const base::FilePath& exe_path);
90 // Returns true if larger crash dumps should be dumped.
91 virtual bool GetShouldDumpLargerDumps(bool is_per_user_install);
93 // Returns the result code to return when breakpad failed to respawn a
94 // crashed process.
95 virtual int GetResultCodeRespawnFailed();
97 // Invoked when initializing the crash reporter in the browser process.
98 virtual void InitBrowserCrashDumpsRegKey();
100 // Invoked before attempting to write a minidump.
101 virtual void RecordCrashDumpAttempt(bool is_real_crash);
103 // Invoked with the results of a minidump attempt.
104 virtual void RecordCrashDumpAttemptResult(bool is_real_crash, bool succeeded);
105 #endif
107 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_IOS)
108 // Returns a textual description of the product type and version to include
109 // in the crash report. Neither out parameter should be set to NULL.
110 virtual void GetProductNameAndVersion(const char** product_name,
111 const char** version);
113 virtual base::FilePath GetReporterLogFilename();
115 // Custom crash minidump handler after the minidump is generated.
116 // Returns true if the minidump is handled (client); otherwise, return false
117 // to fallback to default handler.
118 // WARNING: this handler runs in a compromised context. It may not call into
119 // libc nor allocate memory normally.
120 virtual bool HandleCrashDump(const char* crashdump_filename);
121 #endif
123 // The location where minidump files should be written. Returns true if
124 // |crash_dir| was set.
125 virtual bool GetCrashDumpLocation(base::FilePath* crash_dir);
127 // Register all of the potential crash keys that can be sent to the crash
128 // reporting server. Returns the size of the union of all keys.
129 virtual size_t RegisterCrashKeys();
131 // Returns true if running in unattended mode (for automated testing).
132 virtual bool IsRunningUnattended();
134 // Returns true if the user has given consent to collect stats.
135 virtual bool GetCollectStatsConsent();
137 #if defined(OS_WIN) || defined(OS_MACOSX)
138 // Returns true if crash reporting is enforced via management policies. In
139 // that case, |breakpad_enabled| is set to the value enforced by policies.
140 virtual bool ReportingIsEnforcedByPolicy(bool* breakpad_enabled);
141 #endif
143 #if defined(OS_ANDROID)
144 // Returns the descriptor key of the android minidump global descriptor.
145 virtual int GetAndroidMinidumpDescriptor();
147 // Returns true if breakpad microdumps should be enabled. This orthogonal to
148 // the standard minidump uploader (which depends on the user consent).
149 virtual bool ShouldEnableBreakpadMicrodumps();
150 #endif
152 // Returns true if breakpad should run in the given process type.
153 virtual bool EnableBreakpadForProcess(const std::string& process_type);
156 } // namespace crash_reporter
158 #endif // COMPONENTS_CRASH_APP_CRASH_REPORTER_CLIENT_H_