- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / cocoa / content_settings / collected_cookies_mac.h
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import <Cocoa/Cocoa.h>
6
7 #include "base/mac/scoped_nsobject.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "chrome/browser/browsing_data/cookies_tree_model.h"
10 #include "chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h"
11 #import "chrome/browser/ui/cocoa/content_settings/cookie_tree_node.h"
12 #include "content/public/browser/notification_observer.h"
13 #include "content/public/browser/notification_registrar.h"
14
15 @class CollectedCookiesWindowController;
16 @class CookieDetailsViewController;
17 @class VerticalGradientView;
18
19 namespace content {
20 class WebContents;
21 }
22
23 // The constrained window delegate reponsible for managing the collected
24 // cookies dialog.
25 class CollectedCookiesMac : public ConstrainedWindowMacDelegate,
26                             public content::NotificationObserver {
27  public:
28   CollectedCookiesMac(content::WebContents* web_contents);
29   virtual ~CollectedCookiesMac();
30
31   void PerformClose();
32
33   // ConstrainedWindowMacDelegate implementation.
34   virtual void OnConstrainedWindowClosed(
35       ConstrainedWindowMac* window) OVERRIDE;
36
37   CollectedCookiesWindowController* sheet_controller() const {
38     return sheet_controller_.get();
39   }
40
41  private:
42   // NotificationObserver implementation.
43   virtual void Observe(int type,
44                        const content::NotificationSource& source,
45                        const content::NotificationDetails& details) OVERRIDE;
46
47   content::NotificationRegistrar registrar_;
48
49   scoped_ptr<ConstrainedWindowMac> window_;
50
51   base::scoped_nsobject<CollectedCookiesWindowController> sheet_controller_;
52
53   DISALLOW_COPY_AND_ASSIGN(CollectedCookiesMac);
54 };
55
56 // Controller for the collected cookies dialog. This class stores an internal
57 // copy of the CookiesTreeModel but with Cocoa-converted values (NSStrings and
58 // NSImages instead of std::strings and ImageSkias). Doing this allows us to use
59 // bindings for the interface. Changes are pushed to this internal model via a
60 // very thin bridge (see cookies_window_controller.h).
61 @interface CollectedCookiesWindowController : NSWindowController
62                                               <NSOutlineViewDelegate,
63                                                NSTabViewDelegate,
64                                                NSWindowDelegate> {
65  @private
66   // Platform-independent model.
67   scoped_ptr<CookiesTreeModel> allowedTreeModel_;
68   scoped_ptr<CookiesTreeModel> blockedTreeModel_;
69
70   // Cached array of icons.
71   base::scoped_nsobject<NSMutableArray> icons_;
72
73   // Our Cocoa copy of the model.
74   base::scoped_nsobject<CocoaCookieTreeNode> cocoaAllowedTreeModel_;
75   base::scoped_nsobject<CocoaCookieTreeNode> cocoaBlockedTreeModel_;
76
77   BOOL allowedCookiesButtonsEnabled_;
78   BOOL blockedCookiesButtonsEnabled_;
79
80   IBOutlet NSTreeController* allowedTreeController_;
81   IBOutlet NSTreeController* blockedTreeController_;
82   IBOutlet NSOutlineView* allowedOutlineView_;
83   IBOutlet NSOutlineView* blockedOutlineView_;
84   IBOutlet VerticalGradientView* infoBar_;
85   IBOutlet NSImageView* infoBarIcon_;
86   IBOutlet NSTextField* infoBarText_;
87   IBOutlet NSTabView* tabView_;
88   IBOutlet NSScrollView* blockedScrollView_;
89   IBOutlet NSTextField* blockedCookiesText_;
90   IBOutlet NSView* cookieDetailsViewPlaceholder_;
91
92   base::scoped_nsobject<NSViewAnimation> animation_;
93
94   base::scoped_nsobject<CookieDetailsViewController> detailsViewController_;
95
96   content::WebContents* webContents_;  // weak
97
98   CollectedCookiesMac* collectedCookiesMac_;  // weak
99
100   BOOL infoBarVisible_;
101
102   BOOL contentSettingsChanged_;
103 }
104
105 @property(readonly, nonatomic) IBOutlet NSTreeController* allowedTreeController;
106 @property(readonly, nonatomic) IBOutlet NSTreeController* blockedTreeController;
107 @property(readonly, nonatomic) IBOutlet NSOutlineView* allowedOutlineView;
108 @property(readonly, nonatomic) IBOutlet NSOutlineView* blockedOutlineView;
109 @property(readonly, nonatomic) IBOutlet VerticalGradientView* infoBar;
110 @property(readonly, nonatomic) IBOutlet NSImageView* infoBarIcon;
111 @property(readonly, nonatomic) IBOutlet NSTextField* infoBarText;
112 @property(readonly, nonatomic) IBOutlet NSTabView* tabView;
113 @property(readonly, nonatomic) IBOutlet NSScrollView* blockedScrollView;
114 @property(readonly, nonatomic) IBOutlet NSTextField* blockedCookiesText;
115 @property(readonly, nonatomic) IBOutlet NSView* cookieDetailsViewPlaceholder;
116
117 @property(assign, nonatomic) BOOL allowedCookiesButtonsEnabled;
118 @property(assign, nonatomic) BOOL blockedCookiesButtonsEnabled;
119
120 // Designated initializer. The WebContents cannot be NULL.
121 - (id)initWithWebContents:(content::WebContents*)webContents
122       collectedCookiesMac:(CollectedCookiesMac*)collectedCookiesMac;
123
124 // Closes the sheet and ends the modal loop. This will also clean up the memory.
125 - (IBAction)closeSheet:(id)sender;
126
127 - (IBAction)allowOrigin:(id)sender;
128 - (IBAction)allowForSessionFromOrigin:(id)sender;
129 - (IBAction)blockOrigin:(id)sender;
130
131 // Returns the |cocoaAllowedTreeModel_| and |cocoaBlockedTreeModel_|.
132 - (CocoaCookieTreeNode*)cocoaAllowedTreeModel;
133 - (CocoaCookieTreeNode*)cocoaBlockedTreeModel;
134 - (void)setCocoaAllowedTreeModel:(CocoaCookieTreeNode*)model;
135 - (void)setCocoaBlockedTreeModel:(CocoaCookieTreeNode*)model;
136
137 // Returns the |allowedTreeModel_| and |blockedTreeModel_|.
138 - (CookiesTreeModel*)allowedTreeModel;
139 - (CookiesTreeModel*)blockedTreeModel;
140
141 - (void)loadTreeModelFromWebContents;
142 @end