| // Copyright 2015 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_CONTENT_APP_CRASHPAD_H_ |
| #define COMPONENTS_CRASH_CONTENT_APP_CRASHPAD_H_ |
| |
| #include <time.h> |
| |
| #include <map> |
| #include <string> |
| #include <vector> |
| |
| #include "base/files/file_path.h" |
| |
| namespace crash_reporter { |
| |
| // Initializes Crashpad in a way that is appropriate for initial_client and |
| // process_type. |
| // |
| // If initial_client is true, this starts crashpad_handler and sets it as the |
| // exception handler. Child processes will inherit this exception handler, and |
| // should specify false for this parameter. Although they inherit the exception |
| // handler, child processes still need to call this function to perform |
| // additional initialization. |
| // |
| // If process_type is empty, initialization will be done for the browser |
| // process. The browser process performs additional initialization of the crash |
| // report database. The browser process is also the only process type that is |
| // eligible to have its crashes forwarded to the system crash report handler (in |
| // release mode only). Note that when process_type is empty, initial_client must |
| // be true. |
| // |
| // On Mac, process_type may be non-empty with initial_client set to true. This |
| // indicates that an exception handler has been inherited but should be |
| // discarded in favor of a new Crashpad handler. This configuration should be |
| // used infrequently. It is provided to allow an install-from-.dmg relauncher |
| // process to disassociate from an old Crashpad handler so that after performing |
| // an installation from a disk image, the relauncher process may unmount the |
| // disk image that contains its inherited crashpad_handler. This is only |
| // supported when initial_client is true and process_type is "relauncher". |
| // |
| // On Windows, use InitializeCrashpadWithEmbeddedHandler() when crashpad_handler |
| // is embedded into this binary and can be started by launching the current |
| // process with --type=crashpad-handler. Otherwise, this function should be used |
| // and will launch an external crashpad_handler.exe which is generally used for |
| // test situations. |
| void InitializeCrashpad(bool initial_client, const std::string& process_type); |
| |
| #if defined(OS_WIN) |
| // This is the same as InitializeCrashpad(), but rather than launching a |
| // crashpad_handler executable, relaunches the current executable with a command |
| // line argument of --type=crashpad-handler. |
| void InitializeCrashpadWithEmbeddedHandler(bool initial_client, |
| const std::string& process_type); |
| |
| // Waits until the handler has successfully completed startup or failed, and |
| // logs an error in that case. |
| void BlockUntilHandlerStarted(); |
| #endif // OS_WIN |
| |
| // Enables or disables crash report upload, taking the given consent to upload |
| // into account. Consent may be ignored, uploads may not be enabled even with |
| // consent, but will only be enabled without consent when policy enforces crash |
| // reporting. Whether reports upload is a property of the Crashpad database. In |
| // a newly-created database, uploads will be disabled. This function only has an |
| // effect when called in the browser process. Its effect is immediate and |
| // applies to all other process types, including processes that are already |
| // running. |
| void SetUploadConsent(bool consent); |
| |
| // Determines whether uploads are enabled or disabled. This information is only |
| // available in the browser process. |
| bool GetUploadsEnabled(); |
| |
| enum class ReportUploadState { |
| NotUploaded, |
| Pending, |
| Pending_UserRequested, |
| Uploaded |
| }; |
| |
| struct Report { |
| std::string local_id; |
| time_t capture_time; |
| std::string remote_id; |
| time_t upload_time; |
| ReportUploadState state; |
| }; |
| |
| // Obtains a list of reports uploaded to the collection server. This function |
| // only operates when called in the browser process. All reports in the Crashpad |
| // database that have been successfully uploaded will be included in this list. |
| // The list will be sorted in descending order by report creation time (newest |
| // reports first). |
| void GetReports(std::vector<Report>* reports); |
| |
| // Requests a user triggered upload for a crash report with a given id. |
| void RequestSingleCrashUpload(const std::string& local_id); |
| |
| namespace internal { |
| |
| #if defined(OS_WIN) |
| // Returns platform specific annotations. This is broken out on Windows only so |
| // that it may be reused by GetCrashKeysForKasko. |
| void GetPlatformCrashpadAnnotations( |
| std::map<std::string, std::string>* annotations); |
| #endif // defined(OS_WIN) |
| |
| // The platform-specific portion of InitializeCrashpad(). |
| // Returns the database path, if initializing in the browser process. |
| base::FilePath PlatformCrashpadInitialization(bool initial_client, |
| bool browser_process, |
| bool embedded_handler); |
| |
| } // namespace internal |
| |
| } // namespace crash_reporter |
| |
| #endif // COMPONENTS_CRASH_CONTENT_APP_CRASHPAD_H_ |