1// Copyright (c) 2011 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 "chrome/browser/mac/master_prefs.h" 6 7#include "base/file_util.h" 8#include "base/mac/foundation_util.h" 9#include "chrome/common/chrome_paths_internal.h" 10#include "chrome/common/chrome_version_info.h" 11 12namespace { 13 14#if defined(GOOGLE_CHROME_BUILD) 15// This should be NSApplicationSupportDirectory, but it has already been 16// released using NSLibraryDirectory. 17const NSSearchPathDirectory kSearchPath = NSLibraryDirectory; 18const char kMasterPreferencesDirectory[] = "Google"; 19const char kMasterPreferencesFileName[] = "Google Chrome Master Preferences"; 20#else 21const NSSearchPathDirectory kSearchPath = NSApplicationSupportDirectory; 22const char kMasterPreferencesDirectory[] = "Chromium"; 23const char kMasterPreferencesFileName[] = "Chromium Master Preferences"; 24#endif // GOOGLE_CHROME_BUILD 25 26} // namespace 27 28 29namespace master_prefs { 30 31base::FilePath MasterPrefsPath() { 32#if defined(GOOGLE_CHROME_BUILD) 33 // Don't load master preferences for the canary. 34 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 35 if (channel == chrome::VersionInfo::CHANNEL_CANARY) 36 return base::FilePath(); 37#endif // GOOGLE_CHROME_BUILD 38 39 // On official builds, try 40 //~/Library/Application Support/Google/Chrome/Google Chrome Master Preferences 41 // On chromium builds, try 42 //~/Library/Application Support/Chromium/Chromium Master Preferences 43 // This intentionally doesn't use eventual --user-data-dir overrides. 44 base::FilePath user_application_support_path; 45 if (chrome::GetDefaultUserDataDirectory(&user_application_support_path)) { 46 user_application_support_path = 47 user_application_support_path.Append(kMasterPreferencesFileName); 48 if (base::PathExists(user_application_support_path)) 49 return user_application_support_path; 50 } 51 52 // On official builds, try /Library/Google/Google Chrome Master Preferences 53 // On chromium builds, try 54 // /Library/Application Support/Chromium/Chromium Master Preferences 55 base::FilePath search_path; 56 if (!base::mac::GetLocalDirectory(kSearchPath, &search_path)) 57 return base::FilePath(); 58 59 return search_path.Append(kMasterPreferencesDirectory) 60 .Append(kMasterPreferencesFileName); 61} 62 63} // namespace master_prefs 64