| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/test/base/launchservices_utils_mac.h" |
| |
| #include <Foundation/Foundation.h> |
| |
| #include "base/apple/bridging.h" |
| #include "base/apple/foundation_util.h" |
| #include "base/base_paths.h" |
| #include "base/files/file_path.h" |
| #include "base/path_service.h" |
| #include "build/branding_buildflags.h" |
| |
| namespace test { |
| |
| bool RegisterAppWithLaunchServices() { |
| NSURL* bundleURL = base::apple::FilePathToNSURL(GuessAppBundlePath()); |
| |
| if (![bundleURL checkResourceIsReachableAndReturnError:nil]) { |
| return false; |
| } |
| |
| return LSRegisterURL(base::apple::NSToCFPtrCast(bundleURL), |
| /*inUpdate=*/false) == noErr; |
| } |
| |
| base::FilePath GuessAppBundlePath() { |
| #if BUILDFLAG(GOOGLE_CHROME_BRANDING) |
| const char kAppSuffix[] = "Google Chrome.app"; |
| #else |
| const char kAppSuffix[] = "Chromium.app"; |
| #endif |
| |
| // Try to guess the path to the real org.chromium.Chromium and/or |
| // org.google.Chrome bundle if the current main bundle's path isn't already a |
| // .app directory: |
| NSURL* bundleURL = NSBundle.mainBundle.bundleURL; |
| if ([bundleURL.lastPathComponent hasSuffix:@".app"]) { |
| return base::apple::NSURLToFilePath(bundleURL); |
| } |
| |
| base::FilePath exe_path; |
| if (!base::PathService::Get(base::DIR_EXE, &exe_path)) { |
| return base::FilePath(); |
| } |
| return exe_path.Append(kAppSuffix); |
| } |
| |
| } // namespace test |