| Index: chrome/browser/ui/cocoa/notifications/balloon_controller.mm
|
| diff --git a/chrome/browser/ui/cocoa/notifications/balloon_controller.mm b/chrome/browser/ui/cocoa/notifications/balloon_controller.mm
|
| deleted file mode 100644
|
| index fb481cd56c46c6c6f368b9015d839f3b500c4ded..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/cocoa/notifications/balloon_controller.mm
|
| +++ /dev/null
|
| @@ -1,224 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/ui/cocoa/notifications/balloon_controller.h"
|
| -
|
| -#include "base/mac/bundle_locations.h"
|
| -#include "base/mac/mac_util.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/browser/notifications/balloon.h"
|
| -#include "chrome/browser/notifications/desktop_notification_service.h"
|
| -#include "chrome/browser/notifications/desktop_notification_service_factory.h"
|
| -#include "chrome/browser/notifications/notification.h"
|
| -#include "chrome/browser/notifications/notification_options_menu_model.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#import "chrome/browser/ui/cocoa/notifications/balloon_view.h"
|
| -#include "chrome/browser/ui/cocoa/notifications/balloon_view_host_mac.h"
|
| -#include "content/public/browser/render_view_host.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "grit/generated_resources.h"
|
| -#include "grit/theme_resources.h"
|
| -#import "ui/base/cocoa/hover_image_button.h"
|
| -#import "ui/base/cocoa/menu_controller.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -
|
| -namespace {
|
| -
|
| -// Margin, in pixels, between the notification frame and the contents
|
| -// of the notification.
|
| -const int kTopMargin = 1;
|
| -const int kBottomMargin = 2;
|
| -const int kLeftMargin = 2;
|
| -const int kRightMargin = 2;
|
| -
|
| -} // namespace
|
| -
|
| -@interface BalloonController (Private)
|
| -- (void)updateTrackingRect;
|
| -@end
|
| -
|
| -@implementation BalloonController
|
| -
|
| -- (id)initWithBalloon:(Balloon*)balloon {
|
| - NSString* nibpath =
|
| - [base::mac::FrameworkBundle() pathForResource:@"Notification"
|
| - ofType:@"nib"];
|
| - if ((self = [super initWithWindowNibPath:nibpath owner:self])) {
|
| - balloon_ = balloon;
|
| - [self initializeHost];
|
| - menuModel_.reset(new NotificationOptionsMenuModel(balloon));
|
| - menuController_.reset([[MenuController alloc] initWithModel:menuModel_.get()
|
| - useWithPopUpButtonCell:NO]);
|
| - }
|
| - return self;
|
| -}
|
| -
|
| -- (void)awakeFromNib {
|
| - DCHECK([self window]);
|
| - DCHECK_EQ(self, [[self window] delegate]);
|
| -
|
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - [optionsButton_ setDefaultImage:
|
| - rb.GetNativeImageNamed(IDR_BALLOON_WRENCH).ToNSImage()];
|
| - [optionsButton_ setHoverImage:
|
| - rb.GetNativeImageNamed(IDR_BALLOON_WRENCH_H).ToNSImage()];
|
| - [optionsButton_ setPressedImage:
|
| - rb.GetNativeImageNamed(IDR_BALLOON_WRENCH_P).ToNSImage()];
|
| - [[optionsButton_ cell] setHighlightsBy:NSNoCellMask];
|
| -
|
| - NSString* sourceLabelText = l10n_util::GetNSStringF(
|
| - IDS_NOTIFICATION_BALLOON_SOURCE_LABEL,
|
| - balloon_->notification().display_source());
|
| - [originLabel_ setStringValue:sourceLabelText];
|
| -
|
| - // This condition is false in unit tests which have no RVH.
|
| - if (htmlContents_.get()) {
|
| - gfx::NativeView contents = htmlContents_->native_view();
|
| - [contents setFrame:NSMakeRect(kLeftMargin, kTopMargin, 0, 0)];
|
| - [[htmlContainer_ superview] addSubview:contents
|
| - positioned:NSWindowBelow
|
| - relativeTo:nil];
|
| - }
|
| -
|
| - // Use the standard close button for a utility window.
|
| - closeButton_ = [NSWindow standardWindowButton:NSWindowCloseButton
|
| - forStyleMask:NSUtilityWindowMask];
|
| - NSRect frame = [closeButton_ frame];
|
| - [closeButton_ setFrame:NSMakeRect(6, 1, frame.size.width, frame.size.height)];
|
| - [closeButton_ setTarget:self];
|
| - [closeButton_ setAction:@selector(closeButtonPressed:)];
|
| - [shelf_ addSubview:closeButton_];
|
| - [self updateTrackingRect];
|
| -
|
| - // Set the initial position without animating (the balloon should not
|
| - // yet be visible).
|
| - DCHECK(![[self window] isVisible]);
|
| - NSRect balloon_frame = NSMakeRect(balloon_->GetPosition().x(),
|
| - balloon_->GetPosition().y(),
|
| - [self desiredTotalWidth],
|
| - [self desiredTotalHeight]);
|
| - [[self window] setFrame:balloon_frame
|
| - display:NO];
|
| -}
|
| -
|
| -- (void)updateTrackingRect {
|
| - if (closeButtonTrackingTag_)
|
| - [shelf_ removeTrackingRect:closeButtonTrackingTag_];
|
| -
|
| - closeButtonTrackingTag_ = [shelf_ addTrackingRect:[closeButton_ frame]
|
| - owner:self
|
| - userData:nil
|
| - assumeInside:NO];
|
| -}
|
| -
|
| -- (void) mouseEntered:(NSEvent*)event {
|
| - [[closeButton_ cell] setHighlighted:YES];
|
| -}
|
| -
|
| -- (void) mouseExited:(NSEvent*)event {
|
| - [[closeButton_ cell] setHighlighted:NO];
|
| -}
|
| -
|
| -- (void)closeBalloonNow:(bool)byUser {
|
| - if (!balloon_)
|
| - return;
|
| - [self close];
|
| - if (htmlContents_.get())
|
| - htmlContents_->Shutdown();
|
| - if (balloon_)
|
| - balloon_->OnClose(byUser);
|
| - balloon_ = NULL;
|
| -}
|
| -
|
| -- (IBAction)optionsButtonPressed:(id)sender {
|
| - optionMenuIsActive_ = YES;
|
| - [NSMenu popUpContextMenu:[menuController_ menu]
|
| - withEvent:[NSApp currentEvent]
|
| - forView:optionsButton_];
|
| - optionMenuIsActive_ = NO;
|
| - if (delayedClose_)
|
| - [self closeBalloonNow: false]; // always by script.
|
| -}
|
| -
|
| -- (IBAction)permissionRevoked:(id)sender {
|
| - DesktopNotificationService* service =
|
| - DesktopNotificationServiceFactory::GetForProfile(balloon_->profile());
|
| - service->DenyPermission(balloon_->notification().origin_url());
|
| -}
|
| -
|
| -- (IBAction)closeButtonPressed:(id)sender {
|
| - [self closeBalloon:YES];
|
| - [self close];
|
| -}
|
| -
|
| -- (void)close {
|
| - if (closeButtonTrackingTag_)
|
| - [shelf_ removeTrackingRect:closeButtonTrackingTag_];
|
| -
|
| - [super close];
|
| -}
|
| -
|
| -- (void)closeBalloon:(bool)byUser {
|
| - // Keep alive while user is interacting with popup menu.
|
| - // Otherwise the script can close the notification and underlying balloon
|
| - // will be destroyed while user select a menu command.
|
| - if (!byUser && optionMenuIsActive_) {
|
| - delayedClose_ = YES;
|
| - return;
|
| - }
|
| - [self closeBalloonNow: byUser];
|
| -}
|
| -
|
| -- (void)updateContents {
|
| - DCHECK(htmlContents_.get()) << "BalloonView::Update called before Show";
|
| - if (htmlContents_->web_contents()) {
|
| - htmlContents_->web_contents()->GetController().LoadURL(
|
| - balloon_->notification().content_url(), content::Referrer(),
|
| - content::PAGE_TRANSITION_LINK, std::string());
|
| - }
|
| -}
|
| -
|
| -- (void)repositionToBalloon {
|
| - DCHECK(balloon_);
|
| - int x = balloon_->GetPosition().x();
|
| - int y = balloon_->GetPosition().y();
|
| - int w = [self desiredTotalWidth];
|
| - int h = [self desiredTotalHeight];
|
| -
|
| - [[self window] setFrame:NSMakeRect(x, y, w, h)
|
| - display:YES];
|
| - if (htmlContents_.get())
|
| - htmlContents_->UpdateActualSize(balloon_->content_size());
|
| -}
|
| -
|
| -// Returns the total width the view should be to accommodate the balloon.
|
| -- (int)desiredTotalWidth {
|
| - return (balloon_ ? balloon_->content_size().width() : 0) +
|
| - kLeftMargin + kRightMargin;
|
| -}
|
| -
|
| -// Returns the total height the view should be to accommodate the balloon.
|
| -- (int)desiredTotalHeight {
|
| - return (balloon_ ? balloon_->content_size().height() : 0) +
|
| - kTopMargin + kBottomMargin + [shelf_ frame].size.height;
|
| -}
|
| -
|
| -// Returns the BalloonHost {
|
| -- (BalloonViewHost*) getHost {
|
| - return htmlContents_.get();
|
| -}
|
| -
|
| -// Initializes the renderer host showing the HTML contents.
|
| -- (void)initializeHost {
|
| - htmlContents_.reset(new BalloonViewHost(balloon_));
|
| - htmlContents_->Init();
|
| -}
|
| -
|
| -// NSWindowDelegate notification.
|
| -- (void)windowWillClose:(NSNotification*)notif {
|
| - [self autorelease];
|
| -}
|
| -
|
| -@end
|
|
|