| Index: chrome/browser/background_mode_manager_mac.mm
|
| diff --git a/chrome/browser/background_mode_manager_mac.mm b/chrome/browser/background_mode_manager_mac.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cc6ab4bec4b9a10e116208a54ed6903c35f793fb
|
| --- /dev/null
|
| +++ b/chrome/browser/background_mode_manager_mac.mm
|
| @@ -0,0 +1,78 @@
|
| +// 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 "app/l10n_util.h"
|
| +#include "base/command_line.h"
|
| +#include "base/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"
|
| +
|
| +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 (!mac_util::CheckLoginItemStatus(&is_hidden) || !is_hidden)
|
| + return;
|
| +
|
| + mac_util::RemoveFromLoginItems();
|
| +}
|
| +
|
| +void EnableLaunchOnStartupTask::Run() {
|
| + // Return if Chrome is already a Login Item (avoid overriding user choice).
|
| + if (mac_util::CheckLoginItemStatus(NULL))
|
| + return;
|
| +
|
| + mac_util::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);
|
| +}
|
|
|