| Index: base/base_paths_win.cc
|
| diff --git a/base/base_paths_win.cc b/base/base_paths_win.cc
|
| index 48238a4ffc2aff1c3554953d494568d7b1010b50..58c3ea549287b2266dac49814f5325b58fa539e9 100644
|
| --- a/base/base_paths_win.cc
|
| +++ b/base/base_paths_win.cc
|
| @@ -2,11 +2,11 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "base/base_paths_win.h"
|
|
|
| #include <windows.h>
|
| #include <shlobj.h>
|
|
|
| +#include "base/base_paths.h"
|
| #include "base/file_path.h"
|
| #include "base/file_util.h"
|
| #include "base/path_service.h"
|
| @@ -16,6 +16,38 @@
|
| // http://blogs.msdn.com/oldnewthing/archive/2004/10/25/247180.aspx
|
| extern "C" IMAGE_DOS_HEADER __ImageBase;
|
|
|
| +namespace {
|
| +
|
| +bool GetQuickLaunchPath(bool default_user, FilePath* result) {
|
| + if (default_user) {
|
| + wchar_t system_buffer[MAX_PATH];
|
| + system_buffer[0] = 0;
|
| + // As per MSDN, passing -1 for |hToken| indicates the Default user:
|
| + // http://msdn.microsoft.com/library/windows/desktop/bb762181.aspx
|
| + if (FAILED(SHGetFolderPath(NULL, CSIDL_APPDATA,
|
| + reinterpret_cast<HANDLE>(-1), SHGFP_TYPE_CURRENT,
|
| + system_buffer))) {
|
| + return false;
|
| + }
|
| + *result = FilePath(system_buffer);
|
| + } else if (!PathService::Get(base::DIR_APP_DATA, result)) {
|
| + // For the current user, grab the APPDATA directory directly from the
|
| + // PathService cache.
|
| + return false;
|
| + }
|
| + // According to various sources, appending
|
| + // "Microsoft\Internet Explorer\Quick Launch" to %appdata% is the only
|
| + // reliable way to get the quick launch folder across all versions of Windows.
|
| + // http://stackoverflow.com/questions/76080/how-do-you-reliably-get-the-quick-
|
| + // http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept05/hey0901.mspx
|
| + *result = result->AppendASCII("Microsoft");
|
| + *result = result->AppendASCII("Internet Explorer");
|
| + *result = result->AppendASCII("Quick Launch");
|
| + return true;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| namespace base {
|
|
|
| bool PathProviderWin(int key, FilePath* result) {
|
| @@ -103,9 +135,9 @@ bool PathProviderWin(int key, FilePath* result) {
|
| cur = FilePath(system_buffer);
|
| break;
|
| case base::DIR_LOCAL_APP_DATA_LOW:
|
| - if (win::GetVersion() < win::VERSION_VISTA) {
|
| + if (win::GetVersion() < win::VERSION_VISTA)
|
| return false;
|
| - }
|
| +
|
| // TODO(nsylvain): We should use SHGetKnownFolderPath instead. Bug 1281128
|
| if (FAILED(SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT,
|
| system_buffer)))
|
| @@ -138,6 +170,28 @@ bool PathProviderWin(int key, FilePath* result) {
|
| cur = FilePath(string16(path_buf));
|
| break;
|
| }
|
| + case base::DIR_USER_DESKTOP:
|
| + if (FAILED(SHGetFolderPath(NULL, CSIDL_DESKTOPDIRECTORY, NULL,
|
| + SHGFP_TYPE_CURRENT, system_buffer))) {
|
| + return false;
|
| + }
|
| + cur = FilePath(system_buffer);
|
| + break;
|
| + case base::DIR_COMMON_DESKTOP:
|
| + if (FAILED(SHGetFolderPath(NULL, CSIDL_COMMON_DESKTOPDIRECTORY, NULL,
|
| + SHGFP_TYPE_CURRENT, system_buffer))) {
|
| + return false;
|
| + }
|
| + cur = FilePath(system_buffer);
|
| + break;
|
| + case base::DIR_USER_QUICK_LAUNCH:
|
| + if (!GetQuickLaunchPath(false, &cur))
|
| + return false;
|
| + break;
|
| + case base::DIR_DEFAULT_USER_QUICK_LAUNCH:
|
| + if (!GetQuickLaunchPath(true, &cur))
|
| + return false;
|
| + break;
|
| default:
|
| return false;
|
| }
|
|
|