- add sources.
[platform/framework/web/crosswalk.git] / src / remoting / base / breakpad_mac.mm
1 // Copyright (c) 2012 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 #include "remoting/base/breakpad.h"
6
7 #include <Foundation/Foundation.h>
8
9 #include "base/logging.h"
10 #import "base/mac/scoped_nsautorelease_pool.h"
11 #import "breakpad/src/client/mac/Framework/Breakpad.h"
12
13 namespace remoting {
14
15 void InitializeCrashReporting() {
16   base::mac::ScopedNSAutoreleasePool autorelease_pool;
17
18   NSBundle* main_bundle = [NSBundle mainBundle];
19
20   // Tell Breakpad where crash_inspector and crash_report_sender are.
21   NSString* resource_path = [main_bundle resourcePath];
22   NSString* inspector_location =
23       [resource_path stringByAppendingPathComponent:@"crash_inspector"];
24   NSString* reporter_bundle_location =
25       [resource_path stringByAppendingPathComponent:@"crash_report_sender.app"];
26   NSString* reporter_location =
27       [[NSBundle bundleWithPath:reporter_bundle_location] executablePath];
28
29   NSDictionary* info_dictionary = [main_bundle infoDictionary];
30   NSMutableDictionary* breakpad_config =
31       [[info_dictionary mutableCopy] autorelease];
32   [breakpad_config setObject:inspector_location
33                       forKey:@BREAKPAD_INSPECTOR_LOCATION];
34   [breakpad_config setObject:reporter_location
35                       forKey:@BREAKPAD_REPORTER_EXE_LOCATION];
36
37   // Configure Breakpad settings here, if they are not already customized in
38   // the Info.plist. These settings should be added to the plist, but the
39   // problem is that the Breakpad URL contains a double-slash, which is broken
40   // by the INFOPLIST_PREPROCESS step.
41   // TODO(lambroslambrou): Add these to the Info.plist, similarly to what is
42   // done for Chrome Framework - see 'Tweak Info.plist' in
43   // chrome/chrome_dll_bundle.gypi.
44   if (![breakpad_config objectForKey:@BREAKPAD_SKIP_CONFIRM]) {
45     // Skip the upload confirmation dialog, since this is a remote-access
46     // service that shouldn't rely on a console user to dismiss any prompt.
47     // Also, this may be running in the LoginWindow context, where prompting
48     // might not be possible.
49     [breakpad_config setObject:@"YES"
50                         forKey:@BREAKPAD_SKIP_CONFIRM];
51   }
52   if (![breakpad_config objectForKey:@BREAKPAD_REPORT_INTERVAL]) {
53     // Set a minimum 6-hour interval between crash-reports, to match the
54     // throttling used on Windows.
55     [breakpad_config setObject:@"21600"
56                         forKey:@BREAKPAD_REPORT_INTERVAL];
57   }
58   if (![breakpad_config objectForKey:@BREAKPAD_URL]) {
59     [breakpad_config setObject:@"https://clients2.google.com/cr/report"
60                         forKey:@BREAKPAD_URL];
61   }
62
63   if (!BreakpadCreate(breakpad_config)) {
64     LOG(ERROR) << "Breakpad initialization failed";
65   }
66 }
67
68 }  // namespace remoting