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

Unified Diff: chrome/browser/ui/cocoa/download/download_item_controller.mm

Issue 40733005: [Mac] Update the warnings UI for malicious downloads. (Closed) Base URL: ssh://asankaworkstation.cam.corp.google.com/home/asanka/l/git/src.git@master
Patch Set: Rebase Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/cocoa/download/download_item_controller.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/cocoa/download/download_item_controller.mm
diff --git a/chrome/browser/ui/cocoa/download/download_item_controller.mm b/chrome/browser/ui/cocoa/download/download_item_controller.mm
index 8981e4084d3348a7dd8202d1942c513dd1de8998..f5e3cb5b1f704ead074dd7617c4c5ac2ac2ce0f8 100644
--- a/chrome/browser/ui/cocoa/download/download_item_controller.mm
+++ b/chrome/browser/ui/cocoa/download/download_item_controller.mm
@@ -19,6 +19,7 @@
#import "chrome/browser/ui/cocoa/download/download_item_button.h"
#import "chrome/browser/ui/cocoa/download/download_item_cell.h"
#include "chrome/browser/ui/cocoa/download/download_item_mac.h"
+#import "chrome/browser/ui/cocoa/download/download_shelf_context_menu_controller.h"
#import "chrome/browser/ui/cocoa/download/download_shelf_controller.h"
#import "chrome/browser/ui/cocoa/themed_window.h"
#import "chrome/browser/ui/cocoa/ui_localizer.h"
@@ -125,63 +126,81 @@ class DownloadShelfContextMenuMac : public DownloadShelfContextMenu {
- (void)awakeFromNib {
[progressView_ setController:self];
- [self setStateFromDownload:bridge_->download_model()];
-
GTMUILocalizerAndLayoutTweaker* localizerAndLayoutTweaker =
[[[GTMUILocalizerAndLayoutTweaker alloc] init] autorelease];
[localizerAndLayoutTweaker applyLocalizer:localizer_ tweakingUI:[self view]];
- // The strings are based on the download item's name, sizing tweaks have to be
- // manually done.
- DCHECK(buttonTweaker_ != nil);
- CGFloat widthChange = [buttonTweaker_ changedWidth];
- // If it's a dangerous download, size the two lines so the text/filename
- // is always visible.
- if ([self isDangerousMode]) {
- widthChange +=
- [GTMUILocalizerAndLayoutTweaker
- sizeToFitFixedHeightTextField:dangerousDownloadLabel_
- minWidth:kTextWidth];
- }
- // Grow the parent views
- WidenView([self view], widthChange);
- WidenView(dangerousDownloadView_, widthChange);
- // Slide the two buttons over.
- NSPoint frameOrigin = [buttonTweaker_ frame].origin;
- frameOrigin.x += widthChange;
- [buttonTweaker_ setFrameOrigin:frameOrigin];
+ [self setStateFromDownload:bridge_->download_model()];
bridge_->LoadIcon();
[self updateToolTip];
}
-- (void)setStateFromDownload:(DownloadItemModel*)downloadModel {
- DCHECK_EQ([self download], downloadModel->download());
+- (void)showDangerousWarning:(DownloadItemModel*)downloadModel {
+ // The transition from safe -> dangerous should only happen once. The code
+ // assumes that the danger type of the download doesn't change once it's set.
+ if ([self isDangerousMode])
+ return;
- // Handle dangerous downloads.
- if (downloadModel->IsDangerous()) {
- [self setState:kDangerous];
+ [self setState:kDangerous];
+
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ NSImage* alertIcon;
+
+ NSString* dangerousWarning = base::SysUTF16ToNSString(
+ downloadModel->GetWarningText(*font_list_, kTextWidth));
+ DCHECK(dangerousWarning);
+ [dangerousDownloadLabel_ setStringValue:dangerousWarning];
+ CGFloat labelWidthChange =
+ [GTMUILocalizerAndLayoutTweaker
+ sizeToFitFixedHeightTextField:dangerousDownloadLabel_
+ minWidth:kTextWidth];
+ CGFloat buttonWidthChange = 0.0;
- ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
- NSString* dangerousWarning;
- NSString* confirmButtonTitle;
- NSImage* alertIcon;
+ if (downloadModel->MightBeMalicious()) {
+ alertIcon = rb.GetNativeImageNamed(IDR_SAFEBROWSING_WARNING).ToNSImage();
+ buttonWidthChange = [maliciousButtonTweaker_ changedWidth];
- dangerousWarning =
- base::SysUTF16ToNSString(downloadModel->GetWarningText(
- *font_list_, kTextWidth));
- confirmButtonTitle =
+ // Move the buttons to account for the change in label size.
+ NSPoint frameOrigin = [maliciousButtonTweaker_ frame].origin;
+ frameOrigin.x += labelWidthChange;
+ [maliciousButtonTweaker_ setFrameOrigin:frameOrigin];
+
+ [dangerousButtonTweaker_ setHidden:YES];
+ [maliciousButtonTweaker_ setHidden:NO];
+ } else {
+ alertIcon = rb.GetNativeImageNamed(IDR_WARNING).ToNSImage();
+ buttonWidthChange = [dangerousButtonTweaker_ changedWidth];
+
+ // The text on the confirm button can change depending on the type of the
+ // download.
+ NSString* confirmButtonTitle =
base::SysUTF16ToNSString(downloadModel->GetWarningConfirmButtonText());
- if (downloadModel->MightBeMalicious())
- alertIcon = rb.GetNativeImageNamed(IDR_SAFEBROWSING_WARNING).ToNSImage();
- else
- alertIcon = rb.GetNativeImageNamed(IDR_WARNING).ToNSImage();
- DCHECK(alertIcon);
- [image_ setImage:alertIcon];
- DCHECK(dangerousWarning);
- [dangerousDownloadLabel_ setStringValue:dangerousWarning];
DCHECK(confirmButtonTitle);
[dangerousDownloadConfirmButton_ setTitle:confirmButtonTitle];
+
+ // Move the button to account for the change in label size.
+ NSPoint frameOrigin = [dangerousButtonTweaker_ frame].origin;
+ frameOrigin.x += labelWidthChange;
+ [dangerousButtonTweaker_ setFrameOrigin:frameOrigin];
+
+ [dangerousButtonTweaker_ setHidden:NO];
+ [maliciousButtonTweaker_ setHidden:YES];
+ }
+ DCHECK(alertIcon);
+ [image_ setImage:alertIcon];
+
+ // Grow the parent views
+ WidenView([self view], labelWidthChange + buttonWidthChange);
+ WidenView(dangerousDownloadView_, labelWidthChange + buttonWidthChange);
+}
+
+- (void)setStateFromDownload:(DownloadItemModel*)downloadModel {
+ DCHECK_EQ([self download], downloadModel->download());
+
+ // Handle dangerous downloads.
+ if (downloadModel->IsDangerous()) {
+ [self showDangerousWarning:downloadModel];
return;
}
@@ -307,4 +326,19 @@ class DownloadShelfContextMenuMac : public DownloadShelfContextMenu {
// WARNING: we are deleted at this point. Don't access 'this'.
}
+- (IBAction)dismissMaliciousDownload:(id)sender {
+ [self remove];
+ // WARNING: we are deleted at this point.
+}
+
+- (IBAction)showContextMenu:(id)sender {
+ base::scoped_nsobject<DownloadShelfContextMenuController> menuController(
+ [[DownloadShelfContextMenuController alloc]
+ initWithItemController:self
+ withDelegate:nil]);
+ [NSMenu popUpContextMenu:[menuController menu]
+ withEvent:[NSApp currentEvent]
+ forView:[self view]];
+}
+
@end
« no previous file with comments | « chrome/browser/ui/cocoa/download/download_item_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698