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 |