OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/common/chrome_paths_internal.h" | 5 #include "chrome/common/chrome_paths_internal.h" |
6 | 6 |
7 #include <windows.h> | 7 #include <windows.h> |
8 #include <knownfolders.h> | 8 #include <knownfolders.h> |
9 #include <shellapi.h> | 9 #include <shellapi.h> |
10 #include <shlobj.h> | 10 #include <shlobj.h> |
11 #include <shobjidl.h> | 11 #include <shobjidl.h> |
12 | 12 |
13 #include "app/win/scoped_co_mem.h" | |
14 #include "base/file_path.h" | 13 #include "base/file_path.h" |
15 #include "base/path_service.h" | 14 #include "base/path_service.h" |
16 #include "chrome/common/chrome_constants.h" | 15 #include "chrome/common/chrome_constants.h" |
| 16 #include "chrome/common/scoped_co_mem.h" |
17 #include "chrome/installer/util/browser_distribution.h" | 17 #include "chrome/installer/util/browser_distribution.h" |
18 | 18 |
19 namespace chrome { | 19 namespace chrome { |
20 | 20 |
21 bool GetDefaultUserDataDirectory(FilePath* result) { | 21 bool GetDefaultUserDataDirectory(FilePath* result) { |
22 if (!PathService::Get(base::DIR_LOCAL_APP_DATA, result)) | 22 if (!PathService::Get(base::DIR_LOCAL_APP_DATA, result)) |
23 return false; | 23 return false; |
24 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); | 24 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); |
25 *result = result->Append(dist->GetInstallSubDir()); | 25 *result = result->Append(dist->GetInstallSubDir()); |
26 *result = result->Append(chrome::kUserDataDirname); | 26 *result = result->Append(chrome::kUserDataDirname); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 } | 64 } |
65 | 65 |
66 // On Vista and higher, use the downloads known folder. Since it can be | 66 // On Vista and higher, use the downloads known folder. Since it can be |
67 // relocated to point to a "dangerous" folder, callers should validate that the | 67 // relocated to point to a "dangerous" folder, callers should validate that the |
68 // returned path is not dangerous before using it. | 68 // returned path is not dangerous before using it. |
69 bool GetUserDownloadsDirectory(FilePath* result) { | 69 bool GetUserDownloadsDirectory(FilePath* result) { |
70 typedef HRESULT (WINAPI *GetKnownFolderPath)( | 70 typedef HRESULT (WINAPI *GetKnownFolderPath)( |
71 REFKNOWNFOLDERID, DWORD, HANDLE, PWSTR*); | 71 REFKNOWNFOLDERID, DWORD, HANDLE, PWSTR*); |
72 GetKnownFolderPath f = reinterpret_cast<GetKnownFolderPath>( | 72 GetKnownFolderPath f = reinterpret_cast<GetKnownFolderPath>( |
73 GetProcAddress(GetModuleHandle(L"shell32.dll"), "SHGetKnownFolderPath")); | 73 GetProcAddress(GetModuleHandle(L"shell32.dll"), "SHGetKnownFolderPath")); |
74 app::win::ScopedCoMem<wchar_t> path_buf; | 74 chrome::common::ScopedCoMem<wchar_t> path_buf; |
75 if (f && SUCCEEDED(f(FOLDERID_Downloads, 0, NULL, &path_buf))) { | 75 if (f && SUCCEEDED(f(FOLDERID_Downloads, 0, NULL, &path_buf))) { |
76 *result = FilePath(std::wstring(path_buf)); | 76 *result = FilePath(std::wstring(path_buf)); |
77 return true; | 77 return true; |
78 } | 78 } |
79 return GetUserDownloadsDirectorySafe(result); | 79 return GetUserDownloadsDirectorySafe(result); |
80 } | 80 } |
81 | 81 |
82 bool GetUserDesktop(FilePath* result) { | 82 bool GetUserDesktop(FilePath* result) { |
83 // We need to go compute the value. It would be nice to support paths | 83 // We need to go compute the value. It would be nice to support paths |
84 // with names longer than MAX_PATH, but the system functions don't seem | 84 // with names longer than MAX_PATH, but the system functions don't seem |
85 // to be designed for it either, with the exception of GetTempPath | 85 // to be designed for it either, with the exception of GetTempPath |
86 // (but other things will surely break if the temp path is too long, | 86 // (but other things will surely break if the temp path is too long, |
87 // so we don't bother handling it. | 87 // so we don't bother handling it. |
88 wchar_t system_buffer[MAX_PATH]; | 88 wchar_t system_buffer[MAX_PATH]; |
89 system_buffer[0] = 0; | 89 system_buffer[0] = 0; |
90 if (FAILED(SHGetFolderPath(NULL, CSIDL_DESKTOPDIRECTORY, NULL, | 90 if (FAILED(SHGetFolderPath(NULL, CSIDL_DESKTOPDIRECTORY, NULL, |
91 SHGFP_TYPE_CURRENT, system_buffer))) | 91 SHGFP_TYPE_CURRENT, system_buffer))) |
92 return false; | 92 return false; |
93 *result = FilePath(system_buffer); | 93 *result = FilePath(system_buffer); |
94 return true; | 94 return true; |
95 } | 95 } |
96 | 96 |
97 } // namespace chrome | 97 } // namespace chrome |
OLD | NEW |