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