// Copyright (c) 2013 GitHub, Inc. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "common/crash_reporter/crash_reporter_mac.h" #include "base/memory/singleton.h" #include "base/strings/sys_string_conversions.h" #import "vendor/breakpad/src/client/apple/Framework/BreakpadDefines.h" namespace crash_reporter { CrashReporterMac::CrashReporterMac() : breakpad_(NULL) { } CrashReporterMac::~CrashReporterMac() { if (breakpad_ != NULL) BreakpadRelease(breakpad_); } void CrashReporterMac::InitBreakpad(const std::string& product_name, const std::string& version, const std::string& company_name, const std::string& submit_url, bool auto_submit, bool skip_system_crash_handler) { if (breakpad_ != NULL) BreakpadRelease(breakpad_); NSMutableDictionary* parameters = [NSMutableDictionary dictionaryWithCapacity:4]; [parameters setValue:@"Atom-Shell" forKey:@BREAKPAD_PRODUCT]; [parameters setValue:base::SysUTF8ToNSString(product_name) forKey:@BREAKPAD_PRODUCT_DISPLAY]; [parameters setValue:base::SysUTF8ToNSString(version) forKey:@BREAKPAD_VERSION]; [parameters setValue:base::SysUTF8ToNSString(company_name) forKey:@BREAKPAD_VENDOR]; [parameters setValue:base::SysUTF8ToNSString(submit_url) forKey:@BREAKPAD_URL]; [parameters setValue:(auto_submit ? @"YES" : @"NO") forKey:@BREAKPAD_SKIP_CONFIRM]; [parameters setValue:(skip_system_crash_handler ? @"YES" : @"NO") forKey:@BREAKPAD_SEND_AND_EXIT]; // Report all crashes (important for testing the crash reporter). [parameters setValue:@"0" forKey:@BREAKPAD_REPORT_INTERVAL]; // Put dump files under "/tmp/ProductName Crashes". std::string dump_dir = "/tmp/" + product_name + " Crashes"; [parameters setValue:base::SysUTF8ToNSString(dump_dir) forKey:@BREAKPAD_DUMP_DIRECTORY]; breakpad_ = BreakpadCreate(parameters); for (StringMap::const_iterator iter = upload_parameters_.begin(); iter != upload_parameters_.end(); ++iter) { BreakpadAddUploadParameter(breakpad_, base::SysUTF8ToNSString(iter->first), base::SysUTF8ToNSString(iter->second)); } } void CrashReporterMac::SetUploadParameters() { upload_parameters_["platform"] = "darwin"; } // static CrashReporterMac* CrashReporterMac::GetInstance() { return Singleton::get(); } // static CrashReporter* CrashReporter::GetInstance() { return CrashReporterMac::GetInstance(); } } // namespace crash_reporter