| Index: components/crash/content/app/run_as_crashpad_handler_win.cc
 | 
| diff --git a/components/crash/content/app/run_as_crashpad_handler_win.cc b/components/crash/content/app/run_as_crashpad_handler_win.cc
 | 
| index 6ea93489f1f89d2f7080e8bf0dfcdfb77e6a73f2..9e5b05b4a6d6558ca94d1ebbf54a881248ef26c8 100644
 | 
| --- a/components/crash/content/app/run_as_crashpad_handler_win.cc
 | 
| +++ b/components/crash/content/app/run_as_crashpad_handler_win.cc
 | 
| @@ -10,18 +10,23 @@
 | 
|  #include <vector>
 | 
|  
 | 
|  #include "base/command_line.h"
 | 
| +#include "base/files/file_path.h"
 | 
| +#include "base/memory/ptr_util.h"
 | 
|  #include "base/process/memory.h"
 | 
| -#include "base/strings/string16.h"
 | 
|  #include "base/strings/string_util.h"
 | 
|  #include "base/strings/utf_string_conversions.h"
 | 
| +#include "components/browser_watcher/stability_report_user_stream_data_source.h"
 | 
|  #include "third_party/crashpad/crashpad/client/crashpad_info.h"
 | 
|  #include "third_party/crashpad/crashpad/client/simple_string_dictionary.h"
 | 
|  #include "third_party/crashpad/crashpad/handler/handler_main.h"
 | 
| +#include "third_party/crashpad/crashpad/handler/user_stream_data_source.h"
 | 
|  
 | 
|  namespace crash_reporter {
 | 
|  
 | 
|  int RunAsCrashpadHandler(const base::CommandLine& command_line,
 | 
| -                         const char* process_type_switch) {
 | 
| +                         const base::FilePath& user_data_dir,
 | 
| +                         const char* process_type_switch,
 | 
| +                         const char* user_data_dir_switch) {
 | 
|    // Make sure this process terminates on OOM in the same mode as other Chrome
 | 
|    // processes.
 | 
|    base::EnableTerminationOnOutOfMemory();
 | 
| @@ -46,11 +51,16 @@ int RunAsCrashpadHandler(const base::CommandLine& command_line,
 | 
|    std::vector<base::string16> argv = command_line.argv();
 | 
|    const base::string16 process_type_arg_prefix =
 | 
|        base::string16(L"--") + base::UTF8ToUTF16(process_type_switch) + L"=";
 | 
| +  const base::string16 user_data_dir_arg_prefix =
 | 
| +      base::string16(L"--") + base::UTF8ToUTF16(user_data_dir_switch) + L"=";
 | 
|    argv.erase(
 | 
|        std::remove_if(argv.begin(), argv.end(),
 | 
| -                     [&process_type_arg_prefix](const base::string16& str) {
 | 
| +                     [&process_type_arg_prefix,
 | 
| +                      &user_data_dir_arg_prefix](const base::string16& str) {
 | 
|                         return base::StartsWith(str, process_type_arg_prefix,
 | 
|                                                 base::CompareCase::SENSITIVE) ||
 | 
| +                              base::StartsWith(str, user_data_dir_arg_prefix,
 | 
| +                                               base::CompareCase::SENSITIVE) ||
 | 
|                                (!str.empty() && str[0] == L'/');
 | 
|                       }),
 | 
|        argv.end());
 | 
| @@ -64,8 +74,20 @@ int RunAsCrashpadHandler(const base::CommandLine& command_line,
 | 
|    }
 | 
|    argv_as_utf8[argv.size()] = nullptr;
 | 
|    argv.clear();
 | 
| +
 | 
| +  crashpad::UserStreamDataSources user_stream_data_sources;
 | 
| +  // Interpret an empty user data directory as a missing value.
 | 
| +  if (!user_data_dir.empty()) {
 | 
| +    // Register an extension to collect stability information. The extension
 | 
| +    // will be invoked for any registered process' crashes, but information only
 | 
| +    // exists for instrumented browser processes.
 | 
| +    user_stream_data_sources.push_back(
 | 
| +        base::MakeUnique<browser_watcher::StabilityReportUserStreamDataSource>(
 | 
| +            user_data_dir));
 | 
| +  }
 | 
| +
 | 
|    return crashpad::HandlerMain(static_cast<int>(storage.size()),
 | 
| -                               argv_as_utf8.get(), nullptr);
 | 
| +                               argv_as_utf8.get(), &user_stream_data_sources);
 | 
|  }
 | 
|  
 | 
|  }  // namespace crash_reporter
 | 
| 
 |