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