Home | History | Annotate | Download | only in common
      1 // Copyright (c) 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.
      4 
      5 #ifndef CHROME_COMMON_CRASH_KEYS_H_
      6 #define CHROME_COMMON_CRASH_KEYS_H_
      7 
      8 #include <set>
      9 #include <string>
     10 #include <vector>
     11 
     12 #include "base/debug/crash_logging.h"
     13 
     14 namespace base {
     15 class CommandLine;
     16 }
     17 
     18 namespace crash_keys {
     19 
     20 // Registers all of the potential crash keys that can be sent to the crash
     21 // reporting server. Returns the size of the union of all keys.
     22 size_t RegisterChromeCrashKeys();
     23 
     24 // Sets the ID (based on |client_guid| which may either be a full GUID or a
     25 // GUID that was already stripped from its dashes -- in either cases this method
     26 // will strip remaining dashes before setting the crash key) by which this crash
     27 // reporting client can be identified.
     28 void SetCrashClientIdFromGUID(const std::string& client_guid);
     29 
     30 // Sets the kSwitch and kNumSwitches keys based on the given |command_line|.
     31 void SetSwitchesFromCommandLine(const base::CommandLine* command_line);
     32 
     33 // Sets the list of active experiment/variations info.
     34 void SetVariationsList(const std::vector<std::string>& variations);
     35 
     36 // Sets the list of "active" extensions in this process. We overload "active" to
     37 // mean different things depending on the process type:
     38 // - browser: all enabled extensions
     39 // - renderer: the unique set of extension ids from all content scripts
     40 // - extension: the id of each extension running in this process (there can be
     41 //   multiple because of process collapsing).
     42 void SetActiveExtensions(const std::set<std::string>& extensions);
     43 
     44 // Sets the printer info. Data should be separated by ';' up to
     45 // kPrinterInfoCount substrings. Each substring will be truncated if necessary.
     46 class ScopedPrinterInfo {
     47  public:
     48   explicit ScopedPrinterInfo(const base::StringPiece& data);
     49   ~ScopedPrinterInfo();
     50 
     51  private:
     52   DISALLOW_COPY_AND_ASSIGN(ScopedPrinterInfo);
     53 };
     54 
     55 // Crash Key Name Constants ////////////////////////////////////////////////////
     56 
     57 // The GUID used to identify this client to the crash system.
     58 extern const char kClientID[];
     59 
     60 // The product release/distribution channel.
     61 extern const char kChannel[];
     62 
     63 // The URL of the active tab.
     64 extern const char kActiveURL[];
     65 
     66 // Process command line switches. |kSwitch| should be formatted with an integer,
     67 // in the range [1, kSwitchesMaxCount].
     68 const size_t kSwitchesMaxCount = 15;
     69 extern const char kSwitch[];
     70 // The total number of switches, used to report the total in case more than
     71 // |kSwitchesMaxCount| are present.
     72 extern const char kNumSwitches[];
     73 
     74 // The total number of experiments the instance has.
     75 extern const char kNumVariations[];
     76 // The experiments chunk. Hashed experiment names separated by |,|. This is
     77 // typically set by SetExperimentList.
     78 extern const char kVariations[];
     79 
     80 // Installed extensions. |kExtensionID| should be formatted with an integer,
     81 // in the range [0, kExtensionIDMaxCount).
     82 const size_t kExtensionIDMaxCount = 10;
     83 extern const char kExtensionID[];
     84 // The total number of installed extensions, recorded in case it exceeds
     85 // kExtensionIDMaxCount. Also used in chrome/app, but defined here to avoid
     86 // a common->app dependency.
     87 extern const char kNumExtensionsCount[];
     88 
     89 // The number of render views/tabs open in a renderer process.
     90 extern const char kNumberOfViews[];
     91 
     92 // Type of shutdown. The value is one of "close" for WINDOW_CLOSE,
     93 // "exit" for BROWSER_EXIT, or "end" for END_SESSION.
     94 extern const char kShutdownType[];
     95 
     96 // GPU information.
     97 #if !defined(OS_ANDROID)
     98 extern const char kGPUVendorID[];
     99 extern const char kGPUDeviceID[];
    100 #endif
    101 extern const char kGPUDriverVersion[];
    102 extern const char kGPUPixelShaderVersion[];
    103 extern const char kGPUVertexShaderVersion[];
    104 #if defined(OS_MACOSX)
    105 extern const char kGPUGLVersion[];
    106 #elif defined(OS_POSIX)
    107 extern const char kGPUVendor[];
    108 extern const char kGPURenderer[];
    109 #endif
    110 
    111 // The user's printers, up to kPrinterInfoCount. Should be set with
    112 // ScopedPrinterInfo.
    113 const size_t kPrinterInfoCount = 4;
    114 extern const char kPrinterInfo[];
    115 
    116 #if defined(OS_CHROMEOS)
    117 // The number of simultaneous users in multi profile sessions.
    118 extern const char kNumberOfUsers[];
    119 #endif
    120 
    121 #if defined(OS_MACOSX)
    122 namespace mac {
    123 
    124 // Used to report the first Cocoa/Mac NSException and its backtrace.
    125 extern const char kFirstNSException[];
    126 extern const char kFirstNSExceptionTrace[];
    127 
    128 // Used to report the last Cocoa/Mac NSException and its backtrace.
    129 extern const char kLastNSException[];
    130 extern const char kLastNSExceptionTrace[];
    131 
    132 // Records the current NSException as it is being created, and its backtrace.
    133 extern const char kNSException[];
    134 extern const char kNSExceptionTrace[];
    135 
    136 // In the CrApplication, records information about the current event's
    137 // target-action.
    138 extern const char kSendAction[];
    139 
    140 // Records Cocoa zombie/used-after-freed objects that resulted in a
    141 // deliberate crash.
    142 extern const char kZombie[];
    143 extern const char kZombieTrace[];
    144 
    145 }  // namespace mac
    146 #endif
    147 
    148 }  // namespace crash_keys
    149 
    150 #endif  // CHROME_COMMON_CRASH_KEYS_H_
    151