172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Use of this source code is governed by a BSD-style license that can be
321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// found in the LICENSE file.
421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include <unistd.h>
621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/command_line.h"
821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/environment.h"
921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/file_path.h"
1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/file_util.h"
1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/logging.h"
1221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/nix/xdg_util.h"
1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/task.h"
1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/background_mode_manager.h"
1521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/shell_integration.h"
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/gtk_util.h"
17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/common/auto_start_linux.h"
1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/common/chrome_switches.h"
1921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/common/chrome_version_info.h"
20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h"
2121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "grit/generated_resources.h"
2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h"
2321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
2421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsennamespace {
2521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
2621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass DisableLaunchOnStartupTask : public Task {
2721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public:
2821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Run();
2921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen};
3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
3121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass EnableLaunchOnStartupTask : public Task {
3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public:
3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Run();
3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen};
3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
3621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}  // namespace
3721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
3821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid BackgroundModeManager::EnableLaunchOnStartup(bool should_launch) {
3921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // This functionality is only defined for default profile, currently.
4021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kUserDataDir))
4121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    return;
4221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  if (should_launch) {
4321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                            new EnableLaunchOnStartupTask());
4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  } else {
4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                            new DisableLaunchOnStartupTask());
4821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
5121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid DisableLaunchOnStartupTask::Run() {
5221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  scoped_ptr<base::Environment> environment(base::Environment::Create());
53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  if (!AutoStart::Remove(ShellIntegration::GetDesktopName(environment.get()))) {
5421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    NOTREACHED() << "Failed to deregister launch on login.";
5521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
5621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
5721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
5821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// TODO(rickcam): Bug 56280: Share implementation with ShellIntegration
5921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid EnableLaunchOnStartupTask::Run() {
60dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
6121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  scoped_ptr<base::Environment> environment(base::Environment::Create());
6221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  scoped_ptr<chrome::VersionInfo> version_info(new chrome::VersionInfo());
63dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
6421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  std::string wrapper_script;
6521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  if (!environment->GetVar("CHROME_WRAPPER", &wrapper_script)) {
6621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    LOG(WARNING)
6721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        << "Failed to register launch on login.  CHROME_WRAPPER not set.";
6821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    return;
6921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string command_line = wrapper_script +
71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      " --" + switches::kNoStartupWindow;
72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  if (!AutoStart::AddApplication(
73dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          ShellIntegration::GetDesktopName(environment.get()),
74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          version_info->Name(),
75dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          command_line,
76dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen          false)) {
77dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    NOTREACHED() << "Failed to register launch on login.";
7821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
7921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
81dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid BackgroundModeManager::DisplayAppInstalledNotification(
82dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    const Extension* extension) {
83dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // TODO(atwilson): Display a platform-appropriate notification here.
84dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // http://crbug.com/74970
85dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
86dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
8721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenstring16 BackgroundModeManager::GetPreferencesMenuLabel() {
8821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  string16 result = gtk_util::GetStockPreferencesMenuLabel();
8921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  if (!result.empty())
9021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    return result;
9121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  return l10n_util::GetStringUTF16(IDS_PREFERENCES);
9221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
93