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

Unified Diff: chrome/browser/ui/cocoa/collected_cookies_mac.mm

Issue 6294008: [Mac] Organize some files into chrome/browser/ui/cocoa/content_settings/.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 11 months 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
Index: chrome/browser/ui/cocoa/collected_cookies_mac.mm
===================================================================
--- chrome/browser/ui/cocoa/collected_cookies_mac.mm (revision 71852)
+++ chrome/browser/ui/cocoa/collected_cookies_mac.mm (working copy)
@@ -1,500 +0,0 @@
-// Copyright (c) 2010 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.
-
-#import "chrome/browser/ui/cocoa/collected_cookies_mac.h"
-
-#include <vector>
-
-#include "app/l10n_util_mac.h"
-#include "app/resource_bundle.h"
-#import "base/mac/mac_util.h"
-#include "base/sys_string_conversions.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/tab_contents/tab_contents.h"
-#import "chrome/browser/ui/cocoa/vertical_gradient_view.h"
-#include "chrome/common/notification_details.h"
-#include "chrome/common/notification_source.h"
-#include "grit/generated_resources.h"
-#include "grit/theme_resources.h"
-#include "skia/ext/skia_utils_mac.h"
-#include "third_party/apple/ImageAndTextCell.h"
-#include "third_party/skia/include/core/SkBitmap.h"
-#import "third_party/GTM/AppKit/GTMNSAnimation+Duration.h"
-#import "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h"
-
-namespace {
-// Colors for the infobar.
-const double kBannerGradientColorTop[3] =
- {255.0 / 255.0, 242.0 / 255.0, 183.0 / 255.0};
-const double kBannerGradientColorBottom[3] =
- {250.0 / 255.0, 230.0 / 255.0, 145.0 / 255.0};
-const double kBannerStrokeColor = 135.0 / 255.0;
-
-// Minimal height for the collected cookies dialog.
-const CGFloat kMinCollectedCookiesViewHeight = 116;
-} // namespace
-
-#pragma mark Bridge between the constrained window delegate and the sheet
-
-// The delegate used to forward the events from the sheet to the constrained
-// window delegate.
-@interface CollectedCookiesSheetBridge : NSObject {
- CollectedCookiesMac* collectedCookies_; // weak
-}
-- (id)initWithCollectedCookiesMac:(CollectedCookiesMac*)collectedCookies;
-- (void)sheetDidEnd:(NSWindow*)sheet
- returnCode:(int)returnCode
- contextInfo:(void*)contextInfo;
-@end
-
-@implementation CollectedCookiesSheetBridge
-- (id)initWithCollectedCookiesMac:(CollectedCookiesMac*)collectedCookies {
- if ((self = [super init])) {
- collectedCookies_ = collectedCookies;
- }
- return self;
-}
-
-- (void)sheetDidEnd:(NSWindow*)sheet
- returnCode:(int)returnCode
- contextInfo:(void*)contextInfo {
- collectedCookies_->OnSheetDidEnd(sheet);
-}
-@end
-
-#pragma mark Constrained window delegate
-
-CollectedCookiesMac::CollectedCookiesMac(NSWindow* parent,
- TabContents* tab_contents)
- : ConstrainedWindowMacDelegateCustomSheet(
- [[[CollectedCookiesSheetBridge alloc]
- initWithCollectedCookiesMac:this] autorelease],
- @selector(sheetDidEnd:returnCode:contextInfo:)),
- tab_contents_(tab_contents) {
- TabSpecificContentSettings* content_settings =
- tab_contents->GetTabSpecificContentSettings();
- registrar_.Add(this, NotificationType::COLLECTED_COOKIES_SHOWN,
- Source<TabSpecificContentSettings>(content_settings));
-
- sheet_controller_ = [[CollectedCookiesWindowController alloc]
- initWithTabContents:tab_contents];
-
- set_sheet([sheet_controller_ window]);
-
- window_ = tab_contents->CreateConstrainedDialog(this);
-}
-
-CollectedCookiesMac::~CollectedCookiesMac() {
- NSWindow* window = [sheet_controller_ window];
- if (window_ && window && is_sheet_open()) {
- window_ = NULL;
- [NSApp endSheet:window];
- }
-}
-
-void CollectedCookiesMac::DeleteDelegate() {
- delete this;
-}
-
-void CollectedCookiesMac::Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- DCHECK(type == NotificationType::COLLECTED_COOKIES_SHOWN);
- DCHECK_EQ(Source<TabSpecificContentSettings>(source).ptr(),
- tab_contents_->GetTabSpecificContentSettings());
- window_->CloseConstrainedWindow();
-}
-
-void CollectedCookiesMac::OnSheetDidEnd(NSWindow* sheet) {
- [sheet orderOut:sheet_controller_];
- if (window_)
- window_->CloseConstrainedWindow();
-}
-
-#pragma mark Window Controller
-
-@interface CollectedCookiesWindowController(Private)
--(void)showInfoBarForDomain:(const string16&)domain
- setting:(ContentSetting)setting;
--(void)showInfoBarForMultipleDomainsAndSetting:(ContentSetting)setting;
--(void)animateInfoBar;
-@end
-
-@implementation CollectedCookiesWindowController
-
-@synthesize allowedCookiesButtonsEnabled =
- allowedCookiesButtonsEnabled_;
-@synthesize blockedCookiesButtonsEnabled =
- blockedCookiesButtonsEnabled_;
-
-@synthesize allowedTreeController = allowedTreeController_;
-@synthesize blockedTreeController = blockedTreeController_;
-
-- (id)initWithTabContents:(TabContents*)tabContents {
- DCHECK(tabContents);
- infoBarVisible_ = NO;
- tabContents_ = tabContents;
-
- NSString* nibpath =
- [base::mac::MainAppBundle() pathForResource:@"CollectedCookies"
- ofType:@"nib"];
- if ((self = [super initWithWindowNibPath:nibpath owner:self])) {
- [self loadTreeModelFromTabContents];
-
- animation_.reset([[NSViewAnimation alloc] init]);
- [animation_ setAnimationBlockingMode:NSAnimationNonblocking];
- }
- return self;
-}
-
-- (void)awakeFromNib {
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- NSImage* infoIcon = rb.GetNativeImageNamed(IDR_INFO);
- DCHECK(infoIcon);
- [infoBarIcon_ setImage:infoIcon];
-
- // Initialize the banner gradient and stroke color.
- NSColor* bannerStartingColor =
- [NSColor colorWithCalibratedRed:kBannerGradientColorTop[0]
- green:kBannerGradientColorTop[1]
- blue:kBannerGradientColorTop[2]
- alpha:1.0];
- NSColor* bannerEndingColor =
- [NSColor colorWithCalibratedRed:kBannerGradientColorBottom[0]
- green:kBannerGradientColorBottom[1]
- blue:kBannerGradientColorBottom[2]
- alpha:1.0];
- scoped_nsobject<NSGradient> bannerGradient(
- [[NSGradient alloc] initWithStartingColor:bannerStartingColor
- endingColor:bannerEndingColor]);
- [infoBar_ setGradient:bannerGradient];
-
- NSColor* bannerStrokeColor =
- [NSColor colorWithCalibratedWhite:kBannerStrokeColor
- alpha:1.0];
- [infoBar_ setStrokeColor:bannerStrokeColor];
-
- // Change the label of the blocked cookies part if necessary.
- if (tabContents_->profile()->GetHostContentSettingsMap()->
- BlockThirdPartyCookies()) {
- [blockedCookiesText_ setStringValue:l10n_util::GetNSString(
- IDS_COLLECTED_COOKIES_BLOCKED_THIRD_PARTY_BLOCKING_ENABLED)];
- CGFloat textDeltaY = [GTMUILocalizerAndLayoutTweaker
- sizeToFitFixedWidthTextField:blockedCookiesText_];
-
- // Shrink the upper custom view.
- NSView* upperContentView = [[splitView_ subviews] objectAtIndex:0];
- NSRect frame = [upperContentView frame];
- [splitView_ setPosition:(frame.size.height - textDeltaY/2.0)
- ofDividerAtIndex:0];
-
- // Shrink the lower outline view.
- frame = [lowerScrollView_ frame];
- frame.size.height -= textDeltaY;
- [lowerScrollView_ setFrame:frame];
-
- // Move the label down so it actually fits.
- frame = [blockedCookiesText_ frame];
- frame.origin.y -= textDeltaY;
- [blockedCookiesText_ setFrame:frame];
- }
-}
-
-- (void)windowWillClose:(NSNotification*)notif {
- [allowedOutlineView_ setDelegate:nil];
- [blockedOutlineView_ setDelegate:nil];
- [animation_ stopAnimation];
- [self autorelease];
-}
-
-- (IBAction)closeSheet:(id)sender {
- [NSApp endSheet:[self window]];
-}
-
-- (void)addException:(ContentSetting)setting
- forTreeController:(NSTreeController*)controller {
- NSArray* nodes = [controller selectedNodes];
- BOOL multipleDomainsChanged = NO;
- string16 lastDomain;
- for (NSTreeNode* treeNode in nodes) {
- CocoaCookieTreeNode* node = [treeNode representedObject];
- CookieTreeNode* cookie = static_cast<CookieTreeNode*>([node treeNode]);
- if (cookie->GetDetailedInfo().node_type !=
- CookieTreeNode::DetailedInfo::TYPE_ORIGIN) {
- continue;
- }
- CookieTreeOriginNode* origin_node =
- static_cast<CookieTreeOriginNode*>(cookie);
- origin_node->CreateContentException(
- tabContents_->profile()->GetHostContentSettingsMap(),
- setting);
- if (!lastDomain.empty())
- multipleDomainsChanged = YES;
- lastDomain = origin_node->GetTitle();
- }
- if (multipleDomainsChanged)
- [self showInfoBarForMultipleDomainsAndSetting:setting];
- else
- [self showInfoBarForDomain:lastDomain setting:setting];
-}
-
-- (IBAction)allowOrigin:(id)sender {
- [self addException:CONTENT_SETTING_ALLOW
- forTreeController:blockedTreeController_];
-}
-
-- (IBAction)allowForSessionFromOrigin:(id)sender {
- [self addException:CONTENT_SETTING_SESSION_ONLY
- forTreeController:blockedTreeController_];
-}
-
-- (IBAction)blockOrigin:(id)sender {
- [self addException:CONTENT_SETTING_BLOCK
- forTreeController:allowedTreeController_];
-}
-
-- (CGFloat) splitView:(NSSplitView *)sender
- constrainMinCoordinate:(CGFloat)proposedMin
- ofSubviewAt:(NSInteger)offset {
- return proposedMin + kMinCollectedCookiesViewHeight;
-}
-- (CGFloat) splitView:(NSSplitView *)sender
- constrainMaxCoordinate:(CGFloat)proposedMax
- ofSubviewAt:(NSInteger)offset {
- return proposedMax - kMinCollectedCookiesViewHeight;
-}
-- (BOOL)splitView:(NSSplitView *)sender canCollapseSubview:(NSView *)subview {
- return YES;
-}
-
-- (CocoaCookieTreeNode*)cocoaAllowedTreeModel {
- return cocoaAllowedTreeModel_.get();
-}
-- (void)setCocoaAllowedTreeModel:(CocoaCookieTreeNode*)model {
- cocoaAllowedTreeModel_.reset([model retain]);
-}
-
-- (CookiesTreeModel*)allowedTreeModel {
- return allowedTreeModel_.get();
-}
-
-- (CocoaCookieTreeNode*)cocoaBlockedTreeModel {
- return cocoaBlockedTreeModel_.get();
-}
-- (void)setCocoaBlockedTreeModel:(CocoaCookieTreeNode*)model {
- cocoaBlockedTreeModel_.reset([model retain]);
-}
-
-- (CookiesTreeModel*)blockedTreeModel {
- return blockedTreeModel_.get();
-}
-
-- (void)outlineView:(NSOutlineView*)outlineView
- willDisplayCell:(id)cell
- forTableColumn:(NSTableColumn*)tableColumn
- item:(id)item {
- CocoaCookieTreeNode* node = [item representedObject];
- int index;
- if (outlineView == allowedOutlineView_)
- index = allowedTreeModel_->GetIconIndex([node treeNode]);
- else
- index = blockedTreeModel_->GetIconIndex([node treeNode]);
- NSImage* icon = nil;
- if (index >= 0)
- icon = [icons_ objectAtIndex:index];
- else
- icon = [icons_ lastObject];
- DCHECK([cell isKindOfClass:[ImageAndTextCell class]]);
- [static_cast<ImageAndTextCell*>(cell) setImage:icon];
-}
-
-- (void)outlineViewSelectionDidChange:(NSNotification*)notif {
- BOOL isAllowedOutlineView;
- if ([notif object] == allowedOutlineView_) {
- isAllowedOutlineView = YES;
- } else if ([notif object] == blockedOutlineView_) {
- isAllowedOutlineView = NO;
- } else {
- NOTREACHED();
- return;
- }
- NSTreeController* controller =
- isAllowedOutlineView ? allowedTreeController_ : blockedTreeController_;
-
- NSArray* nodes = [controller selectedNodes];
- for (NSTreeNode* treeNode in nodes) {
- CocoaCookieTreeNode* node = [treeNode representedObject];
- CookieTreeNode* cookie = static_cast<CookieTreeNode*>([node treeNode]);
- if (cookie->GetDetailedInfo().node_type !=
- CookieTreeNode::DetailedInfo::TYPE_ORIGIN) {
- continue;
- }
- CookieTreeOriginNode* origin_node =
- static_cast<CookieTreeOriginNode*>(cookie);
- if (origin_node->CanCreateContentException()) {
- if (isAllowedOutlineView) {
- [self setAllowedCookiesButtonsEnabled:YES];
- } else {
- [self setBlockedCookiesButtonsEnabled:YES];
- }
- return;
- }
- }
- if (isAllowedOutlineView) {
- [self setAllowedCookiesButtonsEnabled:NO];
- } else {
- [self setBlockedCookiesButtonsEnabled:NO];
- }
-}
-
-// Initializes the |allowedTreeModel_| and |blockedTreeModel_|, and builds
-// the |cocoaAllowedTreeModel_| and |cocoaBlockedTreeModel_|.
-- (void)loadTreeModelFromTabContents {
- TabSpecificContentSettings* content_settings =
- tabContents_->GetTabSpecificContentSettings();
- allowedTreeModel_.reset(content_settings->GetAllowedCookiesTreeModel());
- blockedTreeModel_.reset(content_settings->GetBlockedCookiesTreeModel());
-
- // Convert the model's icons from Skia to Cocoa.
- std::vector<SkBitmap> skiaIcons;
- allowedTreeModel_->GetIcons(&skiaIcons);
- icons_.reset([[NSMutableArray alloc] init]);
- for (std::vector<SkBitmap>::iterator it = skiaIcons.begin();
- it != skiaIcons.end(); ++it) {
- [icons_ addObject:gfx::SkBitmapToNSImage(*it)];
- }
-
- // Default icon will be the last item in the array.
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- // TODO(rsesek): Rename this resource now that it's in multiple places.
- [icons_ addObject:rb.GetNativeImageNamed(IDR_BOOKMARK_BAR_FOLDER)];
-
- // Create the Cocoa model.
- CookieTreeNode* root =
- static_cast<CookieTreeNode*>(allowedTreeModel_->GetRoot());
- scoped_nsobject<CocoaCookieTreeNode> model(
- [[CocoaCookieTreeNode alloc] initWithNode:root]);
- [self setCocoaAllowedTreeModel:model.get()]; // Takes ownership.
- root = static_cast<CookieTreeNode*>(blockedTreeModel_->GetRoot());
- model.reset(
- [[CocoaCookieTreeNode alloc] initWithNode:root]);
- [self setCocoaBlockedTreeModel:model.get()]; // Takes ownership.
-}
-
--(void)showInfoBarForMultipleDomainsAndSetting:(ContentSetting)setting {
- NSString* label;
- switch (setting) {
- case CONTENT_SETTING_BLOCK:
- label = l10n_util::GetNSString(
- IDS_COLLECTED_COOKIES_MULTIPLE_BLOCK_RULES_CREATED);
- break;
-
- case CONTENT_SETTING_ALLOW:
- label = l10n_util::GetNSString(
- IDS_COLLECTED_COOKIES_MULTIPLE_ALLOW_RULES_CREATED);
- break;
-
- case CONTENT_SETTING_SESSION_ONLY:
- label = l10n_util::GetNSString(
- IDS_COLLECTED_COOKIES_MULTIPLE_SESSION_RULES_CREATED);
- break;
-
- default:
- NOTREACHED();
- label = [[[NSString alloc] init] autorelease];
- }
- [infoBarText_ setStringValue:label];
- [self animateInfoBar];
-}
-
--(void)showInfoBarForDomain:(const string16&)domain
- setting:(ContentSetting)setting {
- NSString* label;
- switch (setting) {
- case CONTENT_SETTING_BLOCK:
- label = l10n_util::GetNSStringF(
- IDS_COLLECTED_COOKIES_BLOCK_RULE_CREATED,
- domain);
- break;
-
- case CONTENT_SETTING_ALLOW:
- label = l10n_util::GetNSStringF(
- IDS_COLLECTED_COOKIES_ALLOW_RULE_CREATED,
- domain);
- break;
-
- case CONTENT_SETTING_SESSION_ONLY:
- label = l10n_util::GetNSStringF(
- IDS_COLLECTED_COOKIES_SESSION_RULE_CREATED,
- domain);
- break;
-
- default:
- NOTREACHED();
- label = [[[NSString alloc] init] autorelease];
- }
- [infoBarText_ setStringValue:label];
- [self animateInfoBar];
-}
-
--(void)animateInfoBar {
- if (infoBarVisible_)
- return;
-
- infoBarVisible_ = YES;
-
- NSMutableArray* animations = [NSMutableArray arrayWithCapacity:3];
-
- NSWindow* sheet = [self window];
- NSRect sheetFrame = [sheet frame];
- NSRect infoBarFrame = [infoBar_ frame];
- NSRect splitViewFrame = [splitView_ frame];
-
- // Calculate the end position of the info bar and set it to its start
- // position.
- infoBarFrame.origin.y = NSHeight(sheetFrame);
- infoBarFrame.size.width = NSWidth(sheetFrame);
- NSRect infoBarStartFrame = infoBarFrame;
- infoBarStartFrame.origin.y += NSHeight(infoBarFrame);
- infoBarStartFrame.size.height = 0.0;
- [infoBar_ setFrame:infoBarStartFrame];
- [[[self window] contentView] addSubview:infoBar_];
-
- // Calculate the new position of the sheet.
- sheetFrame.origin.y -= NSHeight(infoBarFrame);
- sheetFrame.size.height += NSHeight(infoBarFrame);
-
- // Slide the infobar in.
- [animations addObject:
- [NSDictionary dictionaryWithObjectsAndKeys:
- infoBar_, NSViewAnimationTargetKey,
- [NSValue valueWithRect:infoBarFrame],
- NSViewAnimationEndFrameKey,
- [NSValue valueWithRect:infoBarStartFrame],
- NSViewAnimationStartFrameKey,
- nil]];
- // Make sure the split view ends up in the right position.
- [animations addObject:
- [NSDictionary dictionaryWithObjectsAndKeys:
- splitView_, NSViewAnimationTargetKey,
- [NSValue valueWithRect:splitViewFrame],
- NSViewAnimationEndFrameKey,
- nil]];
-
- // Grow the sheet.
- [animations addObject:
- [NSDictionary dictionaryWithObjectsAndKeys:
- sheet, NSViewAnimationTargetKey,
- [NSValue valueWithRect:sheetFrame],
- NSViewAnimationEndFrameKey,
- nil]];
- [animation_ setViewAnimations:animations];
- // The default duration is 0.5s, which actually feels slow in here, so speed
- // it up a bit.
- [animation_ gtm_setDuration:0.2
- eventMask:NSLeftMouseUpMask];
- [animation_ startAnimation];
-}
-
-@end

Powered by Google App Engine
This is Rietveld 408576698