Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Side by Side Diff: components/crash/content/app/crashpad_mac.mm

Issue 2204473002: mac: Don't rely on Breakpad Info.plist keys for Crashpad initialization (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove --breakpad_uploads from tweak_info_plist.py Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« build/mac/tweak_info_plist.py ('K') | « chrome/BUILD.gn ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/crash/content/app/crashpad.h" 5 #include "components/crash/content/app/crashpad.h"
6 6
7 #include <CoreFoundation/CoreFoundation.h>
7 #include <string.h> 8 #include <string.h>
8 #include <unistd.h> 9 #include <unistd.h>
9 10
10 #include <algorithm> 11 #include <algorithm>
11 #include <map> 12 #include <map>
12 #include <vector> 13 #include <vector>
13 14
14 #include "base/files/file_path.h" 15 #include "base/files/file_path.h"
15 #include "base/logging.h" 16 #include "base/logging.h"
16 #include "base/mac/bundle_locations.h" 17 #include "base/mac/bundle_locations.h"
(...skipping 22 matching lines...) Expand all
39 if (initial_client) { 40 if (initial_client) {
40 @autoreleasepool { 41 @autoreleasepool {
41 base::FilePath framework_bundle_path = base::mac::FrameworkBundlePath(); 42 base::FilePath framework_bundle_path = base::mac::FrameworkBundlePath();
42 base::FilePath handler_path = 43 base::FilePath handler_path =
43 framework_bundle_path.Append("Helpers").Append("crashpad_handler"); 44 framework_bundle_path.Append("Helpers").Append("crashpad_handler");
44 45
45 // Is there a way to recover if this fails? 46 // Is there a way to recover if this fails?
46 CrashReporterClient* crash_reporter_client = GetCrashReporterClient(); 47 CrashReporterClient* crash_reporter_client = GetCrashReporterClient();
47 crash_reporter_client->GetCrashDumpLocation(&database_path); 48 crash_reporter_client->GetCrashDumpLocation(&database_path);
48 49
49 // TODO(mark): Reading the Breakpad keys is temporary and transitional. At 50 #if defined(GOOGLE_CHROME_BUILD) && defined(OFFICIAL_BUILD)
50 // the very least, they should be renamed to Crashpad. For the time being, 51 // Only allow the possibility of report upload in official builds. This
51 // this isn't the worst thing: Crashpad is still uploading to a 52 // crash server won't have symbols for any other build types.
52 // Breakpad-type server, after all. 53 std::string url = "https://clients2.google.com/cr/report";
53 NSBundle* framework_bundle = base::mac::FrameworkBundle(); 54 #else
54 NSString* product = base::mac::ObjCCast<NSString>( 55 std::string url;
55 [framework_bundle objectForInfoDictionaryKey:@"BreakpadProduct"]); 56 #endif
56 NSString* version = base::mac::ObjCCast<NSString>( 57
57 [framework_bundle objectForInfoDictionaryKey:@"BreakpadVersion"]); 58 std::map<std::string, std::string> process_annotations;
58 NSString* url_ns = base::mac::ObjCCast<NSString>( 59
59 [framework_bundle objectForInfoDictionaryKey:@"BreakpadURL"]); 60 NSBundle* outer_bundle = base::mac::OuterBundle();
61 NSString* product = base::mac::ObjCCast<NSString>([outer_bundle
62 objectForInfoDictionaryKey:base::mac::CFToNSCast(kCFBundleNameKey)]);
63 process_annotations["prod"] =
64 base::SysNSStringToUTF8(product).append("_Mac");
65
60 #if defined(GOOGLE_CHROME_BUILD) 66 #if defined(GOOGLE_CHROME_BUILD)
61 NSString* channel = base::mac::ObjCCast<NSString>( 67 NSString* channel = base::mac::ObjCCast<NSString>(
62 [base::mac::OuterBundle() objectForInfoDictionaryKey:@"KSChannelID"]); 68 [outer_bundle objectForInfoDictionaryKey:@"KSChannelID"]);
63 #else
64 NSString* channel = nil;
65 #endif
66
67 std::string url = base::SysNSStringToUTF8(url_ns);
68
69 std::map<std::string, std::string> process_annotations;
70 process_annotations["prod"] = base::SysNSStringToUTF8(product);
71 process_annotations["ver"] = base::SysNSStringToUTF8(version);
72 if (channel) { 69 if (channel) {
73 process_annotations["channel"] = base::SysNSStringToUTF8(channel); 70 process_annotations["channel"] = base::SysNSStringToUTF8(channel);
74 } 71 }
72 #endif
73
74 NSString* version =
75 base::mac::ObjCCast<NSString>([base::mac::FrameworkBundle()
76 objectForInfoDictionaryKey:@"CFBundleShortVersionString"]);
77 process_annotations["ver"] = base::SysNSStringToUTF8(version);
78
75 process_annotations["plat"] = std::string("OS X"); 79 process_annotations["plat"] = std::string("OS X");
76 80
77 crashpad::CrashpadClient crashpad_client;
78
79 std::vector<std::string> arguments; 81 std::vector<std::string> arguments;
80 if (!browser_process) { 82 if (!browser_process) {
81 // If this is an initial client that's not the browser process, it's 83 // If this is an initial client that's not the browser process, it's
82 // important that the new Crashpad handler also not be connected to any 84 // important that the new Crashpad handler also not be connected to any
83 // existing handler. This argument tells the new Crashpad handler to 85 // existing handler. This argument tells the new Crashpad handler to
84 // sever this connection. 86 // sever this connection.
85 arguments.push_back( 87 arguments.push_back(
86 "--reset-own-crash-exception-port-to-system-default"); 88 "--reset-own-crash-exception-port-to-system-default");
87 } 89 }
88 90
91 crashpad::CrashpadClient crashpad_client;
89 bool result = crashpad_client.StartHandler(handler_path, 92 bool result = crashpad_client.StartHandler(handler_path,
90 database_path, 93 database_path,
91 url, 94 url,
92 process_annotations, 95 process_annotations,
93 arguments, 96 arguments,
94 true); 97 true);
95 if (result) { 98 if (result) {
96 result = crashpad_client.UseHandler(); 99 result = crashpad_client.UseHandler();
97 } 100 }
98 101
99 // If this is an initial client that's not the browser process, it's 102 // If this is an initial client that's not the browser process, it's
100 // important to sever the connection to any existing handler. If 103 // important to sever the connection to any existing handler. If
101 // StartHandler() or UseHandler() failed, call UseSystemDefaultHandler() 104 // StartHandler() or UseHandler() failed, call UseSystemDefaultHandler()
102 // in that case to drop the link to the existing handler. 105 // in that case to drop the link to the existing handler.
103 if (!result && !browser_process) { 106 if (!result && !browser_process) {
104 crashpad::CrashpadClient::UseSystemDefaultHandler(); 107 crashpad::CrashpadClient::UseSystemDefaultHandler();
105 } 108 }
106 } // @autoreleasepool 109 } // @autoreleasepool
107 } 110 }
108 111
109 return database_path; 112 return database_path;
110 } 113 }
111 114
112 } // namespace internal 115 } // namespace internal
113 } // namespace crash_reporter 116 } // namespace crash_reporter
OLDNEW
« build/mac/tweak_info_plist.py ('K') | « chrome/BUILD.gn ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698