• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
13namespace remoting {
14
15void 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
69