OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/browser/file_select_helper.h" | 5 #include "chrome/browser/file_select_helper.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 Release(); | 314 Release(); |
315 } | 315 } |
316 } | 316 } |
317 | 317 |
318 scoped_ptr<ui::SelectFileDialog::FileTypeInfo> | 318 scoped_ptr<ui::SelectFileDialog::FileTypeInfo> |
319 FileSelectHelper::GetFileTypesFromAcceptType( | 319 FileSelectHelper::GetFileTypesFromAcceptType( |
320 const std::vector<base::string16>& accept_types) { | 320 const std::vector<base::string16>& accept_types) { |
321 scoped_ptr<ui::SelectFileDialog::FileTypeInfo> base_file_type( | 321 scoped_ptr<ui::SelectFileDialog::FileTypeInfo> base_file_type( |
322 new ui::SelectFileDialog::FileTypeInfo()); | 322 new ui::SelectFileDialog::FileTypeInfo()); |
323 if (accept_types.empty()) | 323 if (accept_types.empty()) |
324 return base_file_type.Pass(); | 324 return base_file_type; |
325 | 325 |
326 // Create FileTypeInfo and pre-allocate for the first extension list. | 326 // Create FileTypeInfo and pre-allocate for the first extension list. |
327 scoped_ptr<ui::SelectFileDialog::FileTypeInfo> file_type( | 327 scoped_ptr<ui::SelectFileDialog::FileTypeInfo> file_type( |
328 new ui::SelectFileDialog::FileTypeInfo(*base_file_type)); | 328 new ui::SelectFileDialog::FileTypeInfo(*base_file_type)); |
329 file_type->include_all_files = true; | 329 file_type->include_all_files = true; |
330 file_type->extensions.resize(1); | 330 file_type->extensions.resize(1); |
331 std::vector<base::FilePath::StringType>* extensions = | 331 std::vector<base::FilePath::StringType>* extensions = |
332 &file_type->extensions.back(); | 332 &file_type->extensions.back(); |
333 | 333 |
334 // Find the corresponding extensions. | 334 // Find the corresponding extensions. |
(...skipping 20 matching lines...) Expand all Loading... |
355 | 355 |
356 net::GetExtensionsForMimeType(ascii_type, extensions); | 356 net::GetExtensionsForMimeType(ascii_type, extensions); |
357 } | 357 } |
358 | 358 |
359 if (extensions->size() > old_extension_size) | 359 if (extensions->size() > old_extension_size) |
360 valid_type_count++; | 360 valid_type_count++; |
361 } | 361 } |
362 | 362 |
363 // If no valid extension is added, bail out. | 363 // If no valid extension is added, bail out. |
364 if (valid_type_count == 0) | 364 if (valid_type_count == 0) |
365 return base_file_type.Pass(); | 365 return base_file_type; |
366 | 366 |
367 // Use a generic description "Custom Files" if either of the following is | 367 // Use a generic description "Custom Files" if either of the following is |
368 // true: | 368 // true: |
369 // 1) There're multiple types specified, like "audio/*,video/*" | 369 // 1) There're multiple types specified, like "audio/*,video/*" |
370 // 2) There're multiple extensions for a MIME type without parameter, like | 370 // 2) There're multiple extensions for a MIME type without parameter, like |
371 // "ehtml,shtml,htm,html" for "text/html". On Windows, the select file | 371 // "ehtml,shtml,htm,html" for "text/html". On Windows, the select file |
372 // dialog uses the first extension in the list to form the description, | 372 // dialog uses the first extension in the list to form the description, |
373 // like "EHTML Files". This is not what we want. | 373 // like "EHTML Files". This is not what we want. |
374 if (valid_type_count > 1 || | 374 if (valid_type_count > 1 || |
375 (valid_type_count == 1 && description_id == 0 && extensions->size() > 1)) | 375 (valid_type_count == 1 && description_id == 0 && extensions->size() > 1)) |
376 description_id = IDS_CUSTOM_FILES; | 376 description_id = IDS_CUSTOM_FILES; |
377 | 377 |
378 if (description_id) { | 378 if (description_id) { |
379 file_type->extension_description_overrides.push_back( | 379 file_type->extension_description_overrides.push_back( |
380 l10n_util::GetStringUTF16(description_id)); | 380 l10n_util::GetStringUTF16(description_id)); |
381 } | 381 } |
382 | 382 |
383 return file_type.Pass(); | 383 return file_type; |
384 } | 384 } |
385 | 385 |
386 // static | 386 // static |
387 void FileSelectHelper::RunFileChooser(content::WebContents* tab, | 387 void FileSelectHelper::RunFileChooser(content::WebContents* tab, |
388 const FileChooserParams& params) { | 388 const FileChooserParams& params) { |
389 Profile* profile = Profile::FromBrowserContext(tab->GetBrowserContext()); | 389 Profile* profile = Profile::FromBrowserContext(tab->GetBrowserContext()); |
390 // FileSelectHelper will keep itself alive until it sends the result message. | 390 // FileSelectHelper will keep itself alive until it sends the result message. |
391 scoped_refptr<FileSelectHelper> file_select_helper( | 391 scoped_refptr<FileSelectHelper> file_select_helper( |
392 new FileSelectHelper(profile)); | 392 new FileSelectHelper(profile)); |
393 file_select_helper->RunFileChooser( | 393 file_select_helper->RunFileChooser( |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 !params->default_file_name.empty()) { | 463 !params->default_file_name.empty()) { |
464 GURL requestor = params->requestor; | 464 GURL requestor = params->requestor; |
465 safe_browsing::CheckUnverifiedDownloadPolicy( | 465 safe_browsing::CheckUnverifiedDownloadPolicy( |
466 requestor, default_file_path, | 466 requestor, default_file_path, |
467 base::Bind(&FileSelectHelper::ApplyUnverifiedDownloadPolicy, this, | 467 base::Bind(&FileSelectHelper::ApplyUnverifiedDownloadPolicy, this, |
468 default_file_path, base::Passed(¶ms))); | 468 default_file_path, base::Passed(¶ms))); |
469 return; | 469 return; |
470 } | 470 } |
471 #endif | 471 #endif |
472 | 472 |
473 RunFileChooserOnUIThread(default_file_path, params.Pass()); | 473 RunFileChooserOnUIThread(default_file_path, std::move(params)); |
474 } | 474 } |
475 | 475 |
476 #if defined(FULL_SAFE_BROWSING) | 476 #if defined(FULL_SAFE_BROWSING) |
477 void FileSelectHelper::ApplyUnverifiedDownloadPolicy( | 477 void FileSelectHelper::ApplyUnverifiedDownloadPolicy( |
478 const base::FilePath& default_path, | 478 const base::FilePath& default_path, |
479 scoped_ptr<FileChooserParams> params, | 479 scoped_ptr<FileChooserParams> params, |
480 safe_browsing::UnverifiedDownloadPolicy policy) { | 480 safe_browsing::UnverifiedDownloadPolicy policy) { |
481 DCHECK(params); | 481 DCHECK(params); |
482 if (policy == safe_browsing::UnverifiedDownloadPolicy::DISALLOWED) { | 482 if (policy == safe_browsing::UnverifiedDownloadPolicy::DISALLOWED) { |
483 NotifyRenderViewHostAndEnd(std::vector<ui::SelectedFileInfo>()); | 483 NotifyRenderViewHostAndEnd(std::vector<ui::SelectedFileInfo>()); |
484 return; | 484 return; |
485 } | 485 } |
486 | 486 |
487 RunFileChooserOnUIThread(default_path, params.Pass()); | 487 RunFileChooserOnUIThread(default_path, std::move(params)); |
488 } | 488 } |
489 #endif | 489 #endif |
490 | 490 |
491 void FileSelectHelper::RunFileChooserOnUIThread( | 491 void FileSelectHelper::RunFileChooserOnUIThread( |
492 const base::FilePath& default_file_path, | 492 const base::FilePath& default_file_path, |
493 scoped_ptr<FileChooserParams> params) { | 493 scoped_ptr<FileChooserParams> params) { |
494 DCHECK(params); | 494 DCHECK(params); |
495 if (!render_view_host_ || !web_contents_ || !IsValidProfile(profile_) || | 495 if (!render_view_host_ || !web_contents_ || !IsValidProfile(profile_) || |
496 !render_view_host_->GetWidget()->GetView()) { | 496 !render_view_host_->GetWidget()->GetView()) { |
497 // If the renderer was destroyed before we started, just cancel the | 497 // If the renderer was destroyed before we started, just cancel the |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
627 | 627 |
628 // static | 628 // static |
629 base::FilePath FileSelectHelper::GetSanitizedFileName( | 629 base::FilePath FileSelectHelper::GetSanitizedFileName( |
630 const base::FilePath& suggested_filename) { | 630 const base::FilePath& suggested_filename) { |
631 if (suggested_filename.empty()) | 631 if (suggested_filename.empty()) |
632 return base::FilePath(); | 632 return base::FilePath(); |
633 return net::GenerateFileName( | 633 return net::GenerateFileName( |
634 GURL(), std::string(), std::string(), suggested_filename.AsUTF8Unsafe(), | 634 GURL(), std::string(), std::string(), suggested_filename.AsUTF8Unsafe(), |
635 std::string(), l10n_util::GetStringUTF8(IDS_DEFAULT_DOWNLOAD_FILENAME)); | 635 std::string(), l10n_util::GetStringUTF8(IDS_DEFAULT_DOWNLOAD_FILENAME)); |
636 } | 636 } |
OLD | NEW |