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