Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Side by Side Diff: chrome/browser/file_select_helper.cc

Issue 1132163004: Remove NOTIFICATION_RENDER_VIEW_HOST_CHANGED. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: sync @tott Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 RunFileChooserEnd(); 285 RunFileChooserEnd();
286 } 286 }
287 287
288 void FileSelectHelper::DeleteTemporaryFiles() { 288 void FileSelectHelper::DeleteTemporaryFiles() {
289 BrowserThread::PostTask(BrowserThread::FILE, 289 BrowserThread::PostTask(BrowserThread::FILE,
290 FROM_HERE, 290 FROM_HERE,
291 base::Bind(&DeleteFiles, temporary_files_)); 291 base::Bind(&DeleteFiles, temporary_files_));
292 temporary_files_.clear(); 292 temporary_files_.clear();
293 } 293 }
294 294
295 void FileSelectHelper::CleanUpOnRenderViewHostChange() {
296 if (!temporary_files_.empty()) {
297 DeleteTemporaryFiles();
298
299 // Now that the temporary files have been scheduled for deletion, there
300 // is no longer any reason to keep this instance around.
301 Release();
302 }
303 }
304
295 scoped_ptr<ui::SelectFileDialog::FileTypeInfo> 305 scoped_ptr<ui::SelectFileDialog::FileTypeInfo>
296 FileSelectHelper::GetFileTypesFromAcceptType( 306 FileSelectHelper::GetFileTypesFromAcceptType(
297 const std::vector<base::string16>& accept_types) { 307 const std::vector<base::string16>& accept_types) {
298 scoped_ptr<ui::SelectFileDialog::FileTypeInfo> base_file_type( 308 scoped_ptr<ui::SelectFileDialog::FileTypeInfo> base_file_type(
299 new ui::SelectFileDialog::FileTypeInfo()); 309 new ui::SelectFileDialog::FileTypeInfo());
300 if (accept_types.empty()) 310 if (accept_types.empty())
301 return base_file_type.Pass(); 311 return base_file_type.Pass();
302 312
303 // Create FileTypeInfo and pre-allocate for the first extension list. 313 // Create FileTypeInfo and pre-allocate for the first extension list.
304 scoped_ptr<ui::SelectFileDialog::FileTypeInfo> file_type( 314 scoped_ptr<ui::SelectFileDialog::FileTypeInfo> file_type(
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 } 393 }
384 394
385 void FileSelectHelper::RunFileChooser(RenderViewHost* render_view_host, 395 void FileSelectHelper::RunFileChooser(RenderViewHost* render_view_host,
386 content::WebContents* web_contents, 396 content::WebContents* web_contents,
387 const FileChooserParams& params) { 397 const FileChooserParams& params) {
388 DCHECK(!render_view_host_); 398 DCHECK(!render_view_host_);
389 DCHECK(!web_contents_); 399 DCHECK(!web_contents_);
390 render_view_host_ = render_view_host; 400 render_view_host_ = render_view_host;
391 web_contents_ = web_contents; 401 web_contents_ = web_contents;
392 notification_registrar_.RemoveAll(); 402 notification_registrar_.RemoveAll();
393 notification_registrar_.Add(this, 403 content::WebContentsObserver::Observe(web_contents_);
394 content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED,
395 content::Source<WebContents>(web_contents_));
396 notification_registrar_.Add( 404 notification_registrar_.Add(
397 this, 405 this,
398 content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED, 406 content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED,
399 content::Source<RenderWidgetHost>(render_view_host_)); 407 content::Source<RenderWidgetHost>(render_view_host_));
400 notification_registrar_.Add(
401 this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
402 content::Source<WebContents>(web_contents_));
403 408
404 BrowserThread::PostTask( 409 BrowserThread::PostTask(
405 BrowserThread::FILE, FROM_HERE, 410 BrowserThread::FILE, FROM_HERE,
406 base::Bind(&FileSelectHelper::RunFileChooserOnFileThread, this, params)); 411 base::Bind(&FileSelectHelper::RunFileChooserOnFileThread, this, params));
407 412
408 // Because this class returns notifications to the RenderViewHost, it is 413 // Because this class returns notifications to the RenderViewHost, it is
409 // difficult for callers to know how long to keep a reference to this 414 // difficult for callers to know how long to keep a reference to this
410 // instance. We AddRef() here to keep the instance alive after we return 415 // instance. We AddRef() here to keep the instance alive after we return
411 // to the caller, until the last callback is received from the file dialog. 416 // to the caller, until the last callback is received from the file dialog.
412 // At that point, we must call RunFileChooserEnd(). 417 // At that point, we must call RunFileChooserEnd().
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 void FileSelectHelper::Observe(int type, 532 void FileSelectHelper::Observe(int type,
528 const content::NotificationSource& source, 533 const content::NotificationSource& source,
529 const content::NotificationDetails& details) { 534 const content::NotificationDetails& details) {
530 switch (type) { 535 switch (type) {
531 case content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED: { 536 case content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED: {
532 DCHECK(content::Source<RenderWidgetHost>(source).ptr() == 537 DCHECK(content::Source<RenderWidgetHost>(source).ptr() ==
533 render_view_host_); 538 render_view_host_);
534 render_view_host_ = NULL; 539 render_view_host_ = NULL;
535 break; 540 break;
536 } 541 }
537
538 case content::NOTIFICATION_WEB_CONTENTS_DESTROYED: {
539 DCHECK(content::Source<WebContents>(source).ptr() == web_contents_);
540 web_contents_ = NULL;
541 }
542
543 // Intentional fall through.
544 case content::NOTIFICATION_RENDER_VIEW_HOST_CHANGED:
545 if (!temporary_files_.empty()) {
546 DeleteTemporaryFiles();
547
548 // Now that the temporary files have been scheduled for deletion, there
549 // is no longer any reason to keep this instance around.
550 Release();
551 }
552
553 break;
554
555 default: 542 default:
556 NOTREACHED(); 543 NOTREACHED();
557 } 544 }
558 } 545 }
559 546
547 void FileSelectHelper::RenderViewHostChanged(RenderViewHost* old_host,
548 RenderViewHost* new_host) {
549 CleanUpOnRenderViewHostChange();
550 }
551
552 void FileSelectHelper::WebContentsDestroyed() {
553 web_contents_ = nullptr;
554 CleanUpOnRenderViewHostChange();
555 }
556
560 // static 557 // static
561 bool FileSelectHelper::IsAcceptTypeValid(const std::string& accept_type) { 558 bool FileSelectHelper::IsAcceptTypeValid(const std::string& accept_type) {
562 // TODO(raymes): This only does some basic checks, extend to test more cases. 559 // TODO(raymes): This only does some basic checks, extend to test more cases.
563 // A 1 character accept type will always be invalid (either a "." in the case 560 // A 1 character accept type will always be invalid (either a "." in the case
564 // of an extension or a "/" in the case of a MIME type). 561 // of an extension or a "/" in the case of a MIME type).
565 std::string unused; 562 std::string unused;
566 if (accept_type.length() <= 1 || 563 if (accept_type.length() <= 1 ||
567 base::StringToLowerASCII(accept_type) != accept_type || 564 base::StringToLowerASCII(accept_type) != accept_type ||
568 base::TrimWhitespaceASCII(accept_type, base::TRIM_ALL, &unused) != 565 base::TrimWhitespaceASCII(accept_type, base::TRIM_ALL, &unused) !=
569 base::TRIM_NONE) { 566 base::TRIM_NONE) {
570 return false; 567 return false;
571 } 568 }
572 return true; 569 return true;
573 } 570 }
OLDNEW
« no previous file with comments | « chrome/browser/file_select_helper.h ('k') | chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698