| 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
|
|
|