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

Side by Side Diff: chrome/browser/ui/views/download/download_item_view.cc

Issue 2439533002: Download Feedback Service should upload all eligible downloads (Closed)
Patch Set: make try bots happy Created 4 years, 1 month 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/ui/views/download/download_item_view.h" 5 #include "chrome/browser/ui/views/download/download_item_view.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <vector> 10 #include <vector>
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 const ui::ThemeProvider* theme) { 250 const ui::ThemeProvider* theme) {
251 return theme ? theme->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT) 251 return theme ? theme->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT)
252 : gfx::kPlaceholderColor; 252 : gfx::kPlaceholderColor;
253 } 253 }
254 254
255 void DownloadItemView::OnExtractIconComplete(gfx::Image* icon_bitmap) { 255 void DownloadItemView::OnExtractIconComplete(gfx::Image* icon_bitmap) {
256 if (icon_bitmap) 256 if (icon_bitmap)
257 shelf_->SchedulePaint(); 257 shelf_->SchedulePaint();
258 } 258 }
259 259
260 void DownloadItemView::MaybeSubmitDownloadToFeedbackService(
261 DownloadCommands::Command download_command) {
262 PrefService* prefs = shelf_->browser()->profile()->GetPrefs();
263 if (model_.MightBeMalicious() && model_.ShouldAllowDownloadFeedback() &&
264 !shelf_->browser()->profile()->IsOffTheRecord()) {
265 if (safe_browsing::ExtendedReportingPrefExists(*prefs)) {
266 SubmitDownloadWhenFeedbackServiceEnabled(
267 download_command, safe_browsing::IsExtendedReportingEnabled(*prefs));
268 } else {
269 // Show dialog, because the dialog hasn't been shown before.
270 DownloadFeedbackDialogView::Show(
271 shelf_->get_parent()->GetNativeWindow(), shelf_->browser()->profile(),
272 shelf_->GetNavigator(),
273 base::Bind(
274 &DownloadItemView::SubmitDownloadWhenFeedbackServiceEnabled,
275 weak_ptr_factory_.GetWeakPtr(), download_command));
276 }
277 } else {
278 DownloadCommands(download()).ExecuteCommand(download_command);
279 }
280 }
281
260 // DownloadObserver interface. 282 // DownloadObserver interface.
261 283
262 // Update the progress graphic on the icon and our text status label 284 // Update the progress graphic on the icon and our text status label
263 // to reflect our current bytes downloaded, time remaining. 285 // to reflect our current bytes downloaded, time remaining.
264 void DownloadItemView::OnDownloadUpdated(DownloadItem* download_item) { 286 void DownloadItemView::OnDownloadUpdated(DownloadItem* download_item) {
265 DCHECK_EQ(download(), download_item); 287 DCHECK_EQ(download(), download_item);
266 288
267 if (!model_.ShouldShowInShelf()) { 289 if (!model_.ShouldShowInShelf()) {
268 shelf_->RemoveDownloadView(this); // This will delete us! 290 shelf_->RemoveDownloadView(this); // This will delete us!
269 return; 291 return;
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 if (sampling_event_) { 584 if (sampling_event_) {
563 sampling_event_->CreateUserDecisionEvent( 585 sampling_event_->CreateUserDecisionEvent(
564 ExperienceSamplingEvent::kProceed); 586 ExperienceSamplingEvent::kProceed);
565 sampling_event_.reset(); 587 sampling_event_.reset();
566 } 588 }
567 // This will change the state and notify us. 589 // This will change the state and notify us.
568 download()->ValidateDangerousDownload(); 590 download()->ValidateDangerousDownload();
569 return; 591 return;
570 } 592 }
571 593
572 // WARNING: all end states after this point delete |this|.
573 DCHECK_EQ(discard_button_, sender); 594 DCHECK_EQ(discard_button_, sender);
574 UMA_HISTOGRAM_LONG_TIMES("clickjacking.discard_download", warning_duration); 595 UMA_HISTOGRAM_LONG_TIMES("clickjacking.discard_download", warning_duration);
575 Profile* profile = shelf_->browser()->profile(); 596 MaybeSubmitDownloadToFeedbackService(DownloadCommands::DISCARD);
576 if (!model_.IsMalicious() && model_.ShouldAllowDownloadFeedback() && 597 // WARNING: 'this' maybe deleted at this point. Don't access 'this'.
577 !profile->IsOffTheRecord()) {
578 if (!safe_browsing::ExtendedReportingPrefExists(*profile->GetPrefs())) {
579 // Show dialog, because the dialog hasn't been shown before.
580 DownloadFeedbackDialogView::Show(
581 shelf_->get_parent()->GetNativeWindow(), profile,
582 shelf_->GetNavigator(),
583 base::Bind(&DownloadItemView::PossiblySubmitDownloadToFeedbackService,
584 weak_ptr_factory_.GetWeakPtr()));
585 } else {
586 PossiblySubmitDownloadToFeedbackService(
587 safe_browsing::IsExtendedReportingEnabled(*profile->GetPrefs()));
588 }
589 return;
590 }
591 download()->Remove();
592 } 598 }
593 599
594 SkColor DownloadItemView::GetVectorIconBaseColor() const { 600 SkColor DownloadItemView::GetVectorIconBaseColor() const {
595 return GetTextColor(); 601 return GetTextColor();
596 } 602 }
597 603
598 void DownloadItemView::AnimationProgressed(const gfx::Animation* animation) { 604 void DownloadItemView::AnimationProgressed(const gfx::Animation* animation) {
599 // We don't care if what animation (body button/drop button/complete), 605 // We don't care if what animation (body button/drop button/complete),
600 // is calling back, as they all have to go through the same paint call. 606 // is calling back, as they all have to go through the same paint call.
601 SchedulePaint(); 607 SchedulePaint();
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 UMA_HISTOGRAM_LONG_TIMES("clickjacking.open_download", 752 UMA_HISTOGRAM_LONG_TIMES("clickjacking.open_download",
747 base::Time::Now() - creation_time_); 753 base::Time::Now() - creation_time_);
748 754
749 UpdateAccessibleName(); 755 UpdateAccessibleName();
750 756
751 // Calling download()->OpenDownload may delete this, so this must be 757 // Calling download()->OpenDownload may delete this, so this must be
752 // the last thing we do. 758 // the last thing we do.
753 download()->OpenDownload(); 759 download()->OpenDownload();
754 } 760 }
755 761
756 bool DownloadItemView::SubmitDownloadToFeedbackService() { 762 bool DownloadItemView::SubmitDownloadToFeedbackService(
763 DownloadCommands::Command download_command) {
757 #if defined(FULL_SAFE_BROWSING) 764 #if defined(FULL_SAFE_BROWSING)
758 safe_browsing::SafeBrowsingService* sb_service = 765 safe_browsing::SafeBrowsingService* sb_service =
759 g_browser_process->safe_browsing_service(); 766 g_browser_process->safe_browsing_service();
760 if (!sb_service) 767 if (!sb_service)
761 return false; 768 return false;
762 safe_browsing::DownloadProtectionService* download_protection_service = 769 safe_browsing::DownloadProtectionService* download_protection_service =
763 sb_service->download_protection_service(); 770 sb_service->download_protection_service();
764 if (!download_protection_service) 771 if (!download_protection_service)
765 return false; 772 return false;
766 download_protection_service->feedback_service()->BeginFeedbackForDownload( 773 download_protection_service->feedback_service()->BeginFeedbackForDownload(
767 download()); 774 download(), download_command);
768 // WARNING: we are deleted at this point. Don't access 'this'. 775 // WARNING: we are deleted at this point. Don't access 'this'.
769 return true; 776 return true;
770 #else 777 #else
771 NOTREACHED(); 778 NOTREACHED();
772 return false; 779 return false;
773 #endif 780 #endif
774 } 781 }
775 782
776 void DownloadItemView::PossiblySubmitDownloadToFeedbackService(bool enabled) { 783 void DownloadItemView::SubmitDownloadWhenFeedbackServiceEnabled(
777 if (!enabled || !SubmitDownloadToFeedbackService()) 784 DownloadCommands::Command download_command,
778 download()->Remove(); 785 bool feedback_enabled) {
786 if (feedback_enabled && SubmitDownloadToFeedbackService(download_command))
787 return;
788
789 DownloadCommands(download()).ExecuteCommand(download_command);
779 // WARNING: 'this' is deleted at this point. Don't access 'this'. 790 // WARNING: 'this' is deleted at this point. Don't access 'this'.
780 } 791 }
781 792
782 void DownloadItemView::LoadIcon() { 793 void DownloadItemView::LoadIcon() {
783 IconManager* im = g_browser_process->icon_manager(); 794 IconManager* im = g_browser_process->icon_manager();
784 last_download_item_path_ = download()->GetTargetFilePath(); 795 last_download_item_path_ = download()->GetTargetFilePath();
785 im->LoadIcon(last_download_item_path_, IconLoader::SMALL, 796 im->LoadIcon(last_download_item_path_, IconLoader::SMALL,
786 base::Bind(&DownloadItemView::OnExtractIconComplete, 797 base::Bind(&DownloadItemView::OnExtractIconComplete,
787 base::Unretained(this)), 798 base::Unretained(this)),
788 &cancelable_task_tracker_); 799 &cancelable_task_tracker_);
(...skipping 29 matching lines...) Expand all
818 // mouse press event we block RootView in mouse dispatching. This also 829 // mouse press event we block RootView in mouse dispatching. This also
819 // appears to cause RootView to get a mouse pressed BEFORE the mouse 830 // appears to cause RootView to get a mouse pressed BEFORE the mouse
820 // release is seen, which means RootView sends us another mouse press no 831 // release is seen, which means RootView sends us another mouse press no
821 // matter where the user pressed. To force RootView to recalculate the 832 // matter where the user pressed. To force RootView to recalculate the
822 // mouse target during the mouse press we explicitly set the mouse handler 833 // mouse target during the mouse press we explicitly set the mouse handler
823 // to null. 834 // to null.
824 static_cast<views::internal::RootView*>(GetWidget()->GetRootView()) 835 static_cast<views::internal::RootView*>(GetWidget()->GetRootView())
825 ->SetMouseHandler(nullptr); 836 ->SetMouseHandler(nullptr);
826 837
827 if (!context_menu_.get()) 838 if (!context_menu_.get())
828 context_menu_.reset(new DownloadShelfContextMenuView(download())); 839 context_menu_.reset(new DownloadShelfContextMenuView(this));
829 context_menu_->Run(GetWidget()->GetTopLevelWidget(), rect, source_type, 840 context_menu_->Run(GetWidget()->GetTopLevelWidget(), rect, source_type,
830 base::Bind(&DownloadItemView::ReleaseDropdown, 841 base::Bind(&DownloadItemView::ReleaseDropdown,
831 weak_ptr_factory_.GetWeakPtr())); 842 weak_ptr_factory_.GetWeakPtr()));
832 } 843 }
833 844
834 void DownloadItemView::HandlePressEvent(const ui::LocatedEvent& event, 845 void DownloadItemView::HandlePressEvent(const ui::LocatedEvent& event,
835 bool active_event) { 846 bool active_event) {
836 // The event should not activate us in dangerous/malicious mode. 847 // The event should not activate us in dangerous/malicious mode.
837 if (IsShowingWarningDialog()) 848 if (IsShowingWarningDialog())
838 return; 849 return;
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1104 SchedulePaint(); 1115 SchedulePaint();
1105 } 1116 }
1106 1117
1107 SkColor DownloadItemView::GetTextColor() const { 1118 SkColor DownloadItemView::GetTextColor() const {
1108 return GetTextColorForThemeProvider(GetThemeProvider()); 1119 return GetTextColorForThemeProvider(GetThemeProvider());
1109 } 1120 }
1110 1121
1111 SkColor DownloadItemView::GetDimmedTextColor() const { 1122 SkColor DownloadItemView::GetDimmedTextColor() const {
1112 return SkColorSetA(GetTextColor(), 0xC7); 1123 return SkColorSetA(GetTextColor(), 0xC7);
1113 } 1124 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698