summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/win_util.cc2
-rw-r--r--chrome/browser/user_data_manager.cc24
-rw-r--r--chrome/browser/user_data_manager.h6
-rw-r--r--chrome/browser/views/new_profile_dialog.cc27
4 files changed, 51 insertions, 8 deletions
diff --git a/app/win_util.cc b/app/win_util.cc
index 4ad8b27..3e00b95 100644
--- a/app/win_util.cc
+++ b/app/win_util.cc
@@ -837,7 +837,7 @@ gfx::Font GetWindowTitleFont() {
void SetAppIdForWindow(const std::wstring& app_id, HWND hwnd) {
// This functionality is only available on Win7+.
- if (win_util::GetWinVersion() != win_util::WINVERSION_WIN7)
+ if (win_util::GetWinVersion() < win_util::WINVERSION_WIN7)
return;
// Load Shell32.dll into memory.
diff --git a/chrome/browser/user_data_manager.cc b/chrome/browser/user_data_manager.cc
index fc31290..7694c88 100644
--- a/chrome/browser/user_data_manager.cc
+++ b/chrome/browser/user_data_manager.cc
@@ -264,13 +264,12 @@ void UserDataManager::GetProfiles(std::vector<std::wstring>* profiles) const {
}
}
-bool UserDataManager::CreateDesktopShortcutForProfile(
+bool UserDataManager::CreateShortcutForProfileInFolder(
+ const FilePath& folder,
const std::wstring& profile_name) const {
#if defined(OS_WIN)
std::wstring exe_path;
- std::wstring shortcut_path;
- if (!PathService::Get(base::FILE_EXE, &exe_path) ||
- !ShellUtil::GetDesktopPath(false, &shortcut_path))
+ if (!PathService::Get(base::FILE_EXE, &exe_path))
return false;
// Working directory.
@@ -290,7 +289,8 @@ bool UserDataManager::CreateDesktopShortcutForProfile(
IDS_START_IN_PROFILE_SHORTCUT_NAME,
profile_name);
shortcut_name.append(L".lnk");
- file_util::AppendToPath(&shortcut_path, shortcut_name);
+
+ std::wstring shortcut_path = folder.Append(shortcut_name).ToWStringHack();
// Profile path from user_data_dir.
FilePath profile_path = FilePath(user_data_dir).Append(
@@ -306,6 +306,20 @@ bool UserDataManager::CreateDesktopShortcutForProfile(
0,
ShellIntegration::GetChromiumAppId(profile_path).c_str());
#else
+ NOTIMPLEMENTED();
+ return false;
+#endif
+}
+
+bool UserDataManager::CreateDesktopShortcutForProfile(
+ const std::wstring& profile_name) const {
+#if defined(OS_WIN)
+ std::wstring desktop_path;
+ if (!ShellUtil::GetDesktopPath(false, &desktop_path))
+ return false;
+
+ return CreateShortcutForProfileInFolder(FilePath(desktop_path), profile_name);
+#else
// TODO(port): should probably use freedesktop.org standard for desktop files.
NOTIMPLEMENTED();
return false;
diff --git a/chrome/browser/user_data_manager.h b/chrome/browser/user_data_manager.h
index f7dfe17..edd63e9 100644
--- a/chrome/browser/user_data_manager.h
+++ b/chrome/browser/user_data_manager.h
@@ -14,6 +14,7 @@
#include "base/basictypes.h"
#include "base/ref_counted.h"
+class FilePath;
class MessageLoop;
// Provides an abstraction of profiles on top of the user data directory
@@ -51,6 +52,11 @@ class UserDataManager {
// This function should be called on the file thread.
void GetProfiles(std::vector<std::wstring>* profiles) const;
+ // Creates a shortcut for the given profile name in |folder|.
+ // Returns false if the shortcut creation fails; true otherwise.
+ bool CreateShortcutForProfileInFolder(const FilePath& folder,
+ const std::wstring& profile_name) const;
+
// Creates a desktop shortcut for the given profile name.
// Returns false if the shortcut creation fails; true otherwise.
bool CreateDesktopShortcutForProfile(const std::wstring& profile_name) const;
diff --git a/chrome/browser/views/new_profile_dialog.cc b/chrome/browser/views/new_profile_dialog.cc
index f580bb0..9672a7a 100644
--- a/chrome/browser/views/new_profile_dialog.cc
+++ b/chrome/browser/views/new_profile_dialog.cc
@@ -8,8 +8,10 @@
#include "app/l10n_util.h"
#include "app/message_box_flags.h"
-#include "base/logging.h"
+#include "base/file_util.h"
#include "base/i18n/file_util_icu.h"
+#include "base/logging.h"
+#include "base/path_service.h"
#include "chrome/browser/user_data_manager.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
@@ -19,6 +21,10 @@
#include "views/view.h"
#include "views/window/window.h"
+#if defined(OS_WIN)
+#include "base/win_util.h"
+#endif // defined(OS_WIN)
+
namespace browser {
// Declared in browser_dialogs.h so others don't have to depend on our header.
@@ -99,9 +105,26 @@ bool NewProfileDialog::Accept() {
return true;
}
// Create a desktop shortcut if the corresponding checkbox is checked.
- if (message_box_view_->IsCheckBoxSelected())
+ if (message_box_view_->IsCheckBoxSelected()) {
UserDataManager::Get()->CreateDesktopShortcutForProfile(
profile_name);
+ } else {
+#if defined(OS_WIN)
+ if (win_util::GetWinVersion() >= win_util::WINVERSION_WIN7) {
+ // For Win7, we need to have a shortcut in a place that Windows would
+ // index to provide correct relaunch info.
+ // See http://crbug.com/32106
+ FilePath temp_path;
+ if (PathService::Get(base::DIR_APP_DATA, &temp_path)) {
+ temp_path = temp_path.Append(
+ L"Microsoft\\Internet Explorer\\Quick Launch\\User Pinned");
+ UserDataManager::Get()->CreateShortcutForProfileInFolder(
+ temp_path,
+ profile_name);
+ }
+ }
+#endif // defined(OS_WIN)
+ }
UserDataManager::Get()->LaunchChromeForProfile(profile_name);
UserDataManager::Get()->RefreshUserDataDirProfiles();