| Index: chrome/app/chrome_crash_reporter_client_win.cc
 | 
| diff --git a/chrome/app/chrome_crash_reporter_client_win.cc b/chrome/app/chrome_crash_reporter_client_win.cc
 | 
| index 6cd77d62cb9bd13497d0ffc52ee761cc416d05ce..42e2093efa73d2506a45a87d0b89b2b4cc974dc0 100644
 | 
| --- a/chrome/app/chrome_crash_reporter_client_win.cc
 | 
| +++ b/chrome/app/chrome_crash_reporter_client_win.cc
 | 
| @@ -8,19 +8,199 @@
 | 
|  
 | 
|  #include <assert.h>
 | 
|  #include <windows.h>
 | 
| -
 | 
| +#include <shellapi.h>
 | 
|  #include <memory>
 | 
|  #include <string>
 | 
|  
 | 
| -#include "build/build_config.h"
 | 
| +#include "base/command_line.h"
 | 
| +#include "base/debug/crash_logging.h"
 | 
| +#include "base/debug/leak_annotations.h"
 | 
| +#include "base/format_macros.h"
 | 
|  #include "chrome/common/chrome_result_codes.h"
 | 
| -#include "chrome/common/crash_keys.h"
 | 
|  #include "chrome/install_static/install_util.h"
 | 
| +#include "components/crash/content/app/crashpad.h"
 | 
| +#include "components/crash/core/common/crash_keys.h"
 | 
| +
 | 
| +namespace {
 | 
| +
 | 
| +// TODO(ananta)
 | 
| +// When the new crash key map implementation lands, we should remove the
 | 
| +// constants defined below, the RegisterCrashKeysHelper function, the
 | 
| +// RegisterCrashKeys function in the crash_keys::CrashReporterClient interface
 | 
| +// and the snprintf function defined here.
 | 
| +constexpr char kActiveURL[] = "url-chunk";
 | 
| +constexpr char kFontKeyName[] = "font_key_name";
 | 
| +
 | 
| +// Installed extensions. |kExtensionID| should be formatted with an integer,
 | 
| +// in the range [0, kExtensionIDMaxCount).
 | 
| +constexpr char kNumExtensionsCount[] = "num-extensions";
 | 
| +constexpr size_t kExtensionIDMaxCount = 10;
 | 
| +constexpr char kExtensionID[] = "extension-%" PRIuS;
 | 
| +
 | 
| +constexpr char kShutdownType[] = "shutdown-type";
 | 
| +
 | 
| +constexpr char kGPUVendorID[] = "gpu-venid";
 | 
| +constexpr char kGPUDeviceID[] = "gpu-devid";
 | 
| +constexpr char kGPUDriverVersion[] = "gpu-driver";
 | 
| +constexpr char kGPUPixelShaderVersion[] = "gpu-psver";
 | 
| +constexpr char kGPUVertexShaderVersion[] = "gpu-vsver";
 | 
| +
 | 
| +constexpr char kHungAudioThreadDetails[] = "hung-audio-thread-details";
 | 
| +
 | 
| +constexpr char kViewCount[] = "view-count";
 | 
| +constexpr char kZeroEncodeDetails[] = "zero-encode-details";
 | 
| +
 | 
| +// The user's printers, up to kPrinterInfoCount. Should be set with
 | 
| +// ScopedPrinterInfo.
 | 
| +constexpr size_t kPrinterInfoCount = 4;
 | 
| +constexpr char kPrinterInfo[] = "prn-info-%" PRIuS;
 | 
| +
 | 
| +using namespace crash_keys;
 | 
| +
 | 
| +int snprintf(char* buffer,
 | 
| +             size_t size,
 | 
| +             _Printf_format_string_ const char* format,
 | 
| +             ...) {
 | 
| +  va_list arguments;
 | 
| +  va_start(arguments, format);
 | 
| +  int result = vsnprintf(buffer, size, format, arguments);
 | 
| +  va_end(arguments);
 | 
| +  return result;
 | 
| +}
 | 
| +
 | 
| +size_t RegisterCrashKeysHelper() {
 | 
| +  // The following keys may be chunked by the underlying crash logging system,
 | 
| +  // but ultimately constitute a single key-value pair.
 | 
| +  //
 | 
| +  // If you're adding keys here, please also add them to the list in
 | 
| +  // //blimp/engine/app/blimp_engine_crash_keys.cc
 | 
| +  constexpr base::debug::CrashKey fixed_keys[] = {
 | 
| +      {kMetricsClientId, kSmallSize},
 | 
| +      {kChannel, kSmallSize},
 | 
| +      {kActiveURL, kLargeSize},
 | 
| +      {kNumVariations, kSmallSize},
 | 
| +      {kVariations, kLargeSize},
 | 
| +      {kNumExtensionsCount, kSmallSize},
 | 
| +      {kShutdownType, kSmallSize},
 | 
| +      {kGPUVendorID, kSmallSize},
 | 
| +      {kGPUDeviceID, kSmallSize},
 | 
| +      {kGPUDriverVersion, kSmallSize},
 | 
| +      {kGPUPixelShaderVersion, kSmallSize},
 | 
| +      {kGPUVertexShaderVersion, kSmallSize},
 | 
| +
 | 
| +      // content/:
 | 
| +      {"discardable-memory-allocated", kSmallSize},
 | 
| +      {"discardable-memory-free", kSmallSize},
 | 
| +      {kFontKeyName, kSmallSize},
 | 
| +      {"ppapi_path", kMediumSize},
 | 
| +      {"subresource_url", kLargeSize},
 | 
| +      {"total-discardable-memory-allocated", kSmallSize},
 | 
| +      {kBug464926CrashKey, kSmallSize},
 | 
| +      {kViewCount, kSmallSize},
 | 
| +
 | 
| +      // media/:
 | 
| +      {kHungAudioThreadDetails, kSmallSize},
 | 
| +      {kZeroEncodeDetails, kSmallSize},
 | 
| +
 | 
| +      // Temporary for http://crbug.com/575245.
 | 
| +      {"swapout_frame_id", kSmallSize},
 | 
| +      {"swapout_proxy_id", kSmallSize},
 | 
| +      {"swapout_view_id", kSmallSize},
 | 
| +      {"commit_frame_id", kSmallSize},
 | 
| +      {"commit_proxy_id", kSmallSize},
 | 
| +      {"commit_view_id", kSmallSize},
 | 
| +      {"commit_main_render_frame_id", kSmallSize},
 | 
| +      {"newproxy_proxy_id", kSmallSize},
 | 
| +      {"newproxy_view_id", kSmallSize},
 | 
| +      {"newproxy_opener_id", kSmallSize},
 | 
| +      {"newproxy_parent_id", kSmallSize},
 | 
| +      {"rvinit_view_id", kSmallSize},
 | 
| +      {"rvinit_proxy_id", kSmallSize},
 | 
| +      {"rvinit_main_frame_id", kSmallSize},
 | 
| +      {"initrf_frame_id", kSmallSize},
 | 
| +      {"initrf_proxy_id", kSmallSize},
 | 
| +      {"initrf_view_id", kSmallSize},
 | 
| +      {"initrf_main_frame_id", kSmallSize},
 | 
| +      {"initrf_view_is_live", kSmallSize},
 | 
| +
 | 
| +      // Temporary for https://crbug.com/591478.
 | 
| +      {"initrf_parent_proxy_exists", kSmallSize},
 | 
| +      {"initrf_render_view_is_live", kSmallSize},
 | 
| +      {"initrf_parent_is_in_same_site_instance", kSmallSize},
 | 
| +      {"initrf_parent_process_is_live", kSmallSize},
 | 
| +      {"initrf_root_is_in_same_site_instance", kSmallSize},
 | 
| +      {"initrf_root_is_in_same_site_instance_as_parent", kSmallSize},
 | 
| +      {"initrf_root_process_is_live", kSmallSize},
 | 
| +      {"initrf_root_proxy_is_live", kSmallSize},
 | 
| +
 | 
| +      // Temporary for https://crbug.com/612711.
 | 
| +      {"aci_wrong_sp_extension_id", kSmallSize},
 | 
| +
 | 
| +      // Temporary for https://crbug.com/616149.
 | 
| +      {"existing_extension_pref_value_type", crash_keys::kSmallSize},
 | 
| +  };
 | 
| +
 | 
| +  // This dynamic set of keys is used for sets of key value pairs when gathering
 | 
| +  // a collection of data, like command line switches or extension IDs.
 | 
| +  std::vector<base::debug::CrashKey> keys(fixed_keys,
 | 
| +                                          fixed_keys + arraysize(fixed_keys));
 | 
| +
 | 
| +  crash_keys::GetCrashKeysForCommandLineSwitches(&keys);
 | 
| +
 | 
| +  // Register the extension IDs.
 | 
| +  {
 | 
| +    static char formatted_keys[kExtensionIDMaxCount]
 | 
| +                              [sizeof(kExtensionID) + 1] = {{0}};
 | 
| +    const size_t formatted_key_len = sizeof(formatted_keys[0]);
 | 
| +    for (size_t i = 0; i < kExtensionIDMaxCount; ++i) {
 | 
| +      snprintf(formatted_keys[i], formatted_key_len, kExtensionID, i + 1);
 | 
| +      base::debug::CrashKey crash_key = {formatted_keys[i], kSmallSize};
 | 
| +      keys.push_back(crash_key);
 | 
| +    }
 | 
| +  }
 | 
| +
 | 
| +  // Register the printer info.
 | 
| +  {
 | 
| +    static char formatted_keys[kPrinterInfoCount]
 | 
| +                              [sizeof(kPrinterInfo) + 1] = {{0}};
 | 
| +    const size_t formatted_key_len = sizeof(formatted_keys[0]);
 | 
| +    for (size_t i = 0; i < kPrinterInfoCount; ++i) {
 | 
| +      // Key names are 1-indexed.
 | 
| +      snprintf(formatted_keys[i], formatted_key_len, kPrinterInfo, i + 1);
 | 
| +      base::debug::CrashKey crash_key = {formatted_keys[i], kSmallSize};
 | 
| +      keys.push_back(crash_key);
 | 
| +    }
 | 
| +  }
 | 
| +
 | 
| +  return base::debug::InitCrashKeys(&keys[0], keys.size(), kChunkMaxLength);
 | 
| +}
 | 
| +
 | 
| +}  // namespace
 | 
|  
 | 
|  ChromeCrashReporterClient::ChromeCrashReporterClient() {}
 | 
|  
 | 
|  ChromeCrashReporterClient::~ChromeCrashReporterClient() {}
 | 
|  
 | 
| +#if !defined(NACL_WIN64)
 | 
| +// static
 | 
| +void ChromeCrashReporterClient::InitializeCrashReportingForProcess() {
 | 
| +  static ChromeCrashReporterClient* instance = nullptr;
 | 
| +  if (instance)
 | 
| +    return;
 | 
| +
 | 
| +  instance = new ChromeCrashReporterClient();
 | 
| +  ANNOTATE_LEAKING_OBJECT_PTR(instance);
 | 
| +
 | 
| +  std::string process_type = install_static::GetSwitchValueFromCommandLine(
 | 
| +      ::GetCommandLineA(), install_static::kProcessType);
 | 
| +  if (process_type != install_static::kCrashpadHandler) {
 | 
| +    crash_reporter::SetCrashReporterClient(instance);
 | 
| +    crash_reporter::InitializeCrashpadWithEmbeddedHandler(process_type.empty(),
 | 
| +                                                          process_type);
 | 
| +  }
 | 
| +}
 | 
| +#endif  // NACL_WIN64
 | 
| +
 | 
|  bool ChromeCrashReporterClient::GetAlternativeCrashDumpLocation(
 | 
|      base::string16* crash_dir) {
 | 
|    // By setting the BREAKPAD_DUMP_LOCATION environment variable, an alternate
 | 
| @@ -137,8 +317,11 @@ bool ChromeCrashReporterClient::GetCrashDumpLocation(
 | 
|    return install_static::GetDefaultCrashDumpLocation(crash_dir);
 | 
|  }
 | 
|  
 | 
| +// TODO(ananta)
 | 
| +// This function should be removed when the new crash key map implementation
 | 
| +// lands.
 | 
|  size_t ChromeCrashReporterClient::RegisterCrashKeys() {
 | 
| -  return crash_keys::RegisterChromeCrashKeys();
 | 
| +  return RegisterCrashKeysHelper();
 | 
|  }
 | 
|  
 | 
|  bool ChromeCrashReporterClient::IsRunningUnattended() {
 | 
| 
 |