1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#import <Cocoa/Cocoa.h> 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#import "base/mac/cocoa_protocols.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_nsobject.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/cookies_tree_model.h" 1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/cocoa/constrained_window_mac.h" 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#import "chrome/browser/ui/cocoa/content_settings/cookie_tree_node.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch@class CollectedCookiesWindowController; 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen@class CookieDetailsViewController; 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick@class VerticalGradientView; 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContents; 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The constrained window delegate reponsible for managing the collected 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// cookies dialog. 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CollectedCookiesMac : public ConstrainedWindowMacDelegateCustomSheet, 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public NotificationObserver { 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CollectedCookiesMac(NSWindow* parent, TabContents* tab_contents); 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnSheetDidEnd(NSWindow* sheet); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ConstrainedWindowMacDelegateCustomSheet implementation. 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DeleteDelegate(); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~CollectedCookiesMac(); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NotificationObserver implementation. 36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void Observe(NotificationType type, 37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const NotificationSource& source, 38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const NotificationDetails& details); 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConstrainedWindow* window_; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContents* tab_contents_; 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CollectedCookiesWindowController* sheet_controller_; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CollectedCookiesMac); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Controller for the collected cookies dialog. This class stores an internal 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// copy of the CookiesTreeModel but with Cocoa-converted values (NSStrings and 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// NSImages instead of std::strings and SkBitmaps). Doing this allows us to use 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// bindings for the interface. Changes are pushed to this internal model via a 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// very thin bridge (see cookies_window_controller.h). 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch@interface CollectedCookiesWindowController : NSWindowController 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch <NSOutlineViewDelegate, 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NSTabViewDelegate, 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NSWindowDelegate> { 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch @private 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Platform-independent model. 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<CookiesTreeModel> allowedTreeModel_; 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<CookiesTreeModel> blockedTreeModel_; 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Cached array of icons. 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_nsobject<NSMutableArray> icons_; 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Our Cocoa copy of the model. 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_nsobject<CocoaCookieTreeNode> cocoaAllowedTreeModel_; 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_nsobject<CocoaCookieTreeNode> cocoaBlockedTreeModel_; 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BOOL allowedCookiesButtonsEnabled_; 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BOOL blockedCookiesButtonsEnabled_; 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IBOutlet NSTreeController* allowedTreeController_; 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IBOutlet NSTreeController* blockedTreeController_; 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IBOutlet NSOutlineView* allowedOutlineView_; 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IBOutlet NSOutlineView* blockedOutlineView_; 793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IBOutlet VerticalGradientView* infoBar_; 803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IBOutlet NSImageView* infoBarIcon_; 813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IBOutlet NSTextField* infoBarText_; 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IBOutlet NSTabView* tabView_; 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IBOutlet NSScrollView* blockedScrollView_; 843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IBOutlet NSTextField* blockedCookiesText_; 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IBOutlet NSView* cookieDetailsViewPlaceholder_; 863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_nsobject<NSViewAnimation> animation_; 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_nsobject<CookieDetailsViewController> detailsViewController_; 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContents* tabContents_; // weak 923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick BOOL infoBarVisible_; 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen BOOL contentSettingsChanged_; 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen@property(readonly, nonatomic) NSTreeController* allowedTreeController; 9872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen@property(readonly, nonatomic) NSTreeController* blockedTreeController; 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen@property(assign, nonatomic) BOOL allowedCookiesButtonsEnabled; 10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen@property(assign, nonatomic) BOOL blockedCookiesButtonsEnabled; 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Designated initializer. TabContents cannot be NULL. 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (id)initWithTabContents:(TabContents*)tabContents; 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Closes the sheet and ends the modal loop. This will also cleanup the memory. 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (IBAction)closeSheet:(id)sender; 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (IBAction)allowOrigin:(id)sender; 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (IBAction)allowForSessionFromOrigin:(id)sender; 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (IBAction)blockOrigin:(id)sender; 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Returns the |cocoaAllowedTreeModel_| and |cocoaBlockedTreeModel_|. 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (CocoaCookieTreeNode*)cocoaAllowedTreeModel; 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (CocoaCookieTreeNode*)cocoaBlockedTreeModel; 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (void)setCocoaAllowedTreeModel:(CocoaCookieTreeNode*)model; 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (void)setCocoaBlockedTreeModel:(CocoaCookieTreeNode*)model; 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Returns the |allowedTreeModel_| and |blockedTreeModel_|. 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (CookiesTreeModel*)allowedTreeModel; 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (CookiesTreeModel*)blockedTreeModel; 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch- (void)loadTreeModelFromTabContents; 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch@end 125