OLD | NEW |
---|---|
1 // Copyright (c) 2011 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 // Download utility implementation | 5 // Download utility implementation |
6 | 6 |
7 #include "chrome/browser/download/download_util.h" | 7 #include "chrome/browser/download/download_util.h" |
8 | 8 |
9 #if defined(OS_WIN) | 9 #if defined(OS_WIN) |
10 #include <shobjidl.h> | 10 #include <shobjidl.h> |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
160 | 160 |
161 for (int i = 0; i < arraysize(magic_names); ++i) { | 161 for (int i = 0; i < arraysize(magic_names); ++i) { |
162 if (filename_lower == magic_names[i]) | 162 if (filename_lower == magic_names[i]) |
163 return true; | 163 return true; |
164 } | 164 } |
165 | 165 |
166 return false; | 166 return false; |
167 } | 167 } |
168 #endif // OS_WIN | 168 #endif // OS_WIN |
169 | 169 |
170 void GenerateFileNameInternal(const GURL& url, | |
asanka
2011/05/13 13:32:24
Can you also change GenerateFileNameFromInfo() to
jianli
2011/05/17 00:10:44
Done.
| |
171 const std::string& content_disposition, | |
172 const std::string& referrer_charset, | |
173 const std::string& suggested_name, | |
174 const std::string& mime_type, | |
175 FilePath* generated_name) { | |
176 | |
177 string16 default_file_name( | |
178 l10n_util::GetStringUTF16(IDS_DEFAULT_DOWNLOAD_FILENAME)); | |
179 | |
180 string16 new_name = net::GetSuggestedFilename(GURL(url), | |
181 content_disposition, | |
182 referrer_charset, | |
183 suggested_name, | |
184 default_file_name); | |
185 | |
186 // TODO(evan): this code is totally wrong -- we should just generate | |
187 // Unicode filenames and do all this encoding switching at the end. | |
188 // However, I'm just shuffling wrong code around, at least not adding | |
189 // to it. | |
190 #if defined(OS_WIN) | |
191 *generated_name = FilePath(new_name); | |
192 #else | |
193 *generated_name = FilePath( | |
194 base::SysWideToNativeMB(UTF16ToWide(new_name))); | |
195 #endif | |
196 | |
197 DCHECK(!generated_name->empty()); | |
198 | |
199 GenerateSafeFileName(mime_type, generated_name); | |
200 } | |
201 | |
170 } // namespace | 202 } // namespace |
171 | 203 |
172 // Download temporary file creation -------------------------------------------- | 204 // Download temporary file creation -------------------------------------------- |
173 | 205 |
174 class DefaultDownloadDirectory { | 206 class DefaultDownloadDirectory { |
175 public: | 207 public: |
176 const FilePath& path() const { return path_; } | 208 const FilePath& path() const { return path_; } |
177 private: | 209 private: |
178 DefaultDownloadDirectory() { | 210 DefaultDownloadDirectory() { |
179 if (!PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS, &path_)) { | 211 if (!PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS, &path_)) { |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
251 | 283 |
252 void GenerateFileNameFromInfo(DownloadCreateInfo* info, | 284 void GenerateFileNameFromInfo(DownloadCreateInfo* info, |
253 FilePath* generated_name) { | 285 FilePath* generated_name) { |
254 GenerateFileName(GURL(info->url()), | 286 GenerateFileName(GURL(info->url()), |
255 info->content_disposition, | 287 info->content_disposition, |
256 info->referrer_charset, | 288 info->referrer_charset, |
257 info->mime_type, | 289 info->mime_type, |
258 generated_name); | 290 generated_name); |
259 } | 291 } |
260 | 292 |
293 void GenerateFileNameFromSuggestedName(const GURL& url, | |
294 const std::string& suggested_name, | |
295 const std::string& mime_type, | |
296 FilePath* generated_name) { | |
297 GenerateFileNameInternal(url, std::string(), std::string(), | |
298 suggested_name, mime_type, generated_name); | |
299 } | |
300 | |
261 void GenerateFileName(const GURL& url, | 301 void GenerateFileName(const GURL& url, |
262 const std::string& content_disposition, | 302 const std::string& content_disposition, |
263 const std::string& referrer_charset, | 303 const std::string& referrer_charset, |
264 const std::string& mime_type, | 304 const std::string& mime_type, |
265 FilePath* generated_name) { | 305 FilePath* generated_name) { |
266 string16 default_file_name( | 306 GenerateFileNameInternal(url, content_disposition, referrer_charset, |
267 l10n_util::GetStringUTF16(IDS_DEFAULT_DOWNLOAD_FILENAME)); | 307 std::string(), mime_type, generated_name); |
268 | |
269 string16 new_name = net::GetSuggestedFilename(GURL(url), | |
270 content_disposition, | |
271 referrer_charset, | |
272 default_file_name); | |
273 | |
274 // TODO(evan): this code is totally wrong -- we should just generate | |
275 // Unicode filenames and do all this encoding switching at the end. | |
276 // However, I'm just shuffling wrong code around, at least not adding | |
277 // to it. | |
278 #if defined(OS_WIN) | |
279 *generated_name = FilePath(new_name); | |
280 #else | |
281 *generated_name = FilePath( | |
282 base::SysWideToNativeMB(UTF16ToWide(new_name))); | |
283 #endif | |
284 | |
285 DCHECK(!generated_name->empty()); | |
286 | |
287 GenerateSafeFileName(mime_type, generated_name); | |
288 } | 308 } |
289 | 309 |
290 void GenerateSafeFileName(const std::string& mime_type, FilePath* file_name) { | 310 void GenerateSafeFileName(const std::string& mime_type, FilePath* file_name) { |
291 // Make sure we get the right file extension | 311 // Make sure we get the right file extension |
292 FilePath::StringType extension; | 312 FilePath::StringType extension; |
293 GenerateExtension(*file_name, mime_type, &extension); | 313 GenerateExtension(*file_name, mime_type, &extension); |
294 *file_name = file_name->ReplaceExtension(extension); | 314 *file_name = file_name->ReplaceExtension(extension); |
295 | 315 |
296 #if defined(OS_WIN) | 316 #if defined(OS_WIN) |
297 // Prepend "_" to the file name if it's a reserved name | 317 // Prepend "_" to the file name if it's a reserved name |
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
901 // Extensions that are not from the gallery are considered dangerous. | 921 // Extensions that are not from the gallery are considered dangerous. |
902 ExtensionService* service = profile->GetExtensionService(); | 922 ExtensionService* service = profile->GetExtensionService(); |
903 if (!service || | 923 if (!service || |
904 !service->IsDownloadFromGallery(info->url(), info->referrer_url)) | 924 !service->IsDownloadFromGallery(info->url(), info->referrer_url)) |
905 return true; | 925 return true; |
906 } | 926 } |
907 return false; | 927 return false; |
908 } | 928 } |
909 | 929 |
910 } // namespace download_util | 930 } // namespace download_util |
OLD | NEW |