// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/command_line.h" #include "base/mac/mac_util.h" #include "chrome/browser/background_mode_manager.h" #include "chrome/browser/browser_thread.h" #include "chrome/common/app_mode_common_mac.h" #include "chrome/common/chrome_switches.h" #include "grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" namespace { class DisableLaunchOnStartupTask : public Task { public: virtual void Run(); }; class EnableLaunchOnStartupTask : public Task { public: virtual void Run(); }; const CFStringRef kLaunchOnStartupResetAllowedPrefsKey = CFSTR("LaunchOnStartupResetAllowed"); void DisableLaunchOnStartupTask::Run() { Boolean key_exists_and_has_valid_format; // ignored if (!CFPreferencesGetAppBooleanValue(kLaunchOnStartupResetAllowedPrefsKey, app_mode::kAppPrefsID, &key_exists_and_has_valid_format)) return; CFPreferencesSetAppValue(kLaunchOnStartupResetAllowedPrefsKey, kCFBooleanFalse, app_mode::kAppPrefsID); // Check if Chrome is not a login Item, or is a Login Item but w/o 'hidden' // flag - most likely user has modified the setting, don't override it. bool is_hidden = false; if (!base::mac::CheckLoginItemStatus(&is_hidden) || !is_hidden) return; base::mac::RemoveFromLoginItems(); } void EnableLaunchOnStartupTask::Run() { // Return if Chrome is already a Login Item (avoid overriding user choice). if (base::mac::CheckLoginItemStatus(NULL)) return; base::mac::AddToLoginItems(true); // Hide on startup. CFPreferencesSetAppValue(kLaunchOnStartupResetAllowedPrefsKey, kCFBooleanTrue, app_mode::kAppPrefsID); } } // namespace void BackgroundModeManager::EnableLaunchOnStartup(bool should_launch) { // This functionality is only defined for default profile, currently. if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kUserDataDir)) return; if (should_launch) { BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, new EnableLaunchOnStartupTask()); } else { BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, new DisableLaunchOnStartupTask()); } } string16 BackgroundModeManager::GetPreferencesMenuLabel() { return l10n_util::GetStringUTF16(IDS_OPTIONS); }