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

Unified Diff: base/mac/foundation_util.mm

Issue 45703003: Fix AmIBundled for command-line executions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ok Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/mac/foundation_util.mm
diff --git a/base/mac/foundation_util.mm b/base/mac/foundation_util.mm
index 1d33391f1e2341da72732c14b2a20e99520fb9d9..7080cdf38e8ef0a5534b4c88673c7d26f0ea7f36 100644
--- a/base/mac/foundation_util.mm
+++ b/base/mac/foundation_util.mm
@@ -23,11 +23,26 @@ CFTypeID SecTrustedApplicationGetTypeID();
namespace base {
namespace mac {
-static bool g_override_am_i_bundled = false;
-static bool g_override_am_i_bundled_value = false;
+namespace {
+
+bool g_override_am_i_bundled = false;
+bool g_override_am_i_bundled_value = false;
+
+int CheapPathNormalizedCount(NSArray* path_array) {
Mark Mentovai 2013/10/28 16:07:47 You can make this accept an NSString*, and perform
Avi (use Gerrit) 2013/10/28 16:19:13 Done.
+ int count = 0;
+ for (NSString* component in path_array) {
+ if ([component isEqualToString:@"."])
+ continue;
+ else if ([component isEqualToString:@".."])
+ --count;
+ else
+ ++count;
+ }
+
+ return count;
+}
-// Adapted from http://developer.apple.com/carbon/tipsandtricks.html#AmIBundled
-static bool UncachedAmIBundled() {
+bool UncachedAmIBundled() {
#if defined(OS_IOS)
// All apps are bundled on iOS.
return true;
@@ -36,18 +51,22 @@ static bool UncachedAmIBundled() {
return g_override_am_i_bundled_value;
NSBundle* bundle = base::mac::OuterBundle();
- NSArray* bundle_parts = [[bundle bundlePath] pathComponents];
- NSArray* executable_parts = [[bundle executablePath] pathComponents];
+ int bundle_count =
+ CheapPathNormalizedCount([[bundle bundlePath] pathComponents]);
+ int executable_count =
+ CheapPathNormalizedCount([[bundle executablePath] pathComponents]);
// Bundled executables are exactly three levels deeper than their bundle.
// Non-bundled executables have a fake bundle with a bundle path of their
// parent directory.
- NSUInteger depth_difference = [executable_parts count] - [bundle_parts count];
+ NSUInteger depth_difference = executable_count - bundle_count;
Mark Mentovai 2013/10/28 16:07:47 Also make this an int.
Avi (use Gerrit) 2013/10/28 16:19:13 Done.
CHECK(depth_difference == 1 || depth_difference == 3);
return depth_difference == 3;
#endif
}
+} // namespace
+
bool AmIBundled() {
// If the return value is not cached, this function will return different
// values depending on when it's called. This confuses some client code, see
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698