// Copyright (c) 2012 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. #include "remoting/base/breakpad.h" #include #include "base/logging.h" #import "base/mac/scoped_nsautorelease_pool.h" #import "breakpad/src/client/mac/Framework/Breakpad.h" namespace remoting { void InitializeCrashReporting() { base::mac::ScopedNSAutoreleasePool autorelease_pool; NSBundle* main_bundle = [NSBundle mainBundle]; // Tell Breakpad where crash_inspector and crash_report_sender are. NSString* resource_path = [main_bundle resourcePath]; NSString* inspector_location = [resource_path stringByAppendingPathComponent:@"crash_inspector"]; NSString* reporter_bundle_location = [resource_path stringByAppendingPathComponent:@"crash_report_sender.app"]; NSString* reporter_location = [[NSBundle bundleWithPath:reporter_bundle_location] executablePath]; NSDictionary* info_dictionary = [main_bundle infoDictionary]; NSMutableDictionary* breakpad_config = [[info_dictionary mutableCopy] autorelease]; [breakpad_config setObject:inspector_location forKey:@BREAKPAD_INSPECTOR_LOCATION]; [breakpad_config setObject:reporter_location forKey:@BREAKPAD_REPORTER_EXE_LOCATION]; // Configure Breakpad settings here, if they are not already customized in // the Info.plist. These settings should be added to the plist, but the // problem is that the Breakpad URL contains a double-slash, which is broken // by the INFOPLIST_PREPROCESS step. // TODO(lambroslambrou): Add these to the Info.plist, similarly to what is // done for Chrome Framework - see 'Tweak Info.plist' in // chrome/chrome_dll_bundle.gypi. if (![breakpad_config objectForKey:@BREAKPAD_SKIP_CONFIRM]) { // Skip the upload confirmation dialog, since this is a remote-access // service that shouldn't rely on a console user to dismiss any prompt. // Also, this may be running in the LoginWindow context, where prompting // might not be possible. [breakpad_config setObject:@"YES" forKey:@BREAKPAD_SKIP_CONFIRM]; } if (![breakpad_config objectForKey:@BREAKPAD_REPORT_INTERVAL]) { // Set a minimum 6-hour interval between crash-reports, to match the // throttling used on Windows. [breakpad_config setObject:@"21600" forKey:@BREAKPAD_REPORT_INTERVAL]; } if (![breakpad_config objectForKey:@BREAKPAD_URL]) { [breakpad_config setObject:@"https://clients2.google.com/cr/report" forKey:@BREAKPAD_URL]; } if (!BreakpadCreate(breakpad_config)) { LOG(ERROR) << "Breakpad initialization failed"; } } } // namespace remoting