summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/blocked_popup_container_controller.h
blob: df3eb64e92cd40eef162e509bdca082c97a888e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// Copyright (c) 2009 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.

#ifndef CHROME_BROWSER_VIEWS_BLOCKED_POPUP_CONTAINER_CONTROLLER_H_
#define CHROME_BROWSER_VIEWS_BLOCKED_POPUP_CONTAINER_CONTROLLER_H_

#import <Cocoa/Cocoa.h>

#include "base/scoped_nsobject.h"
#include "base/scoped_ptr.h"
#include "chrome/browser/blocked_popup_container.h"
#include "chrome/browser/cocoa/hover_close_button.h"

@class BubbleView;

// Controller for the blocked popup view. Communicates with the cross-platform
// code via a C++ bridge class, below. The BlockedPopupContainer class doesn't
// really "own" the bridge, it just keeps a pointer to it and calls Destroy() on
// it when it's supposed to go away. As a result, this class needs to own itself
// (always keep an extra retain), and will autorelease itself (and the bridge
// which it owns) when the bridge gets a Destroy() message.
// TODO(pinkerton): Reverse the ownership if it makes more sense. I'm leaving
// it this way because I assume we eventually want this to be a
// NSViewController, and we usually have the Obj-C controller owning the
// bridge (rather than the other way around).
@interface BlockedPopupContainerController : NSObject {
 @private
  scoped_ptr<BlockedPopupContainerView> bridge_;
  BlockedPopupContainer* container_;  // Weak. "owns" me.
  scoped_nsobject<BubbleView> view_;
  scoped_nsobject<HoverCloseButton> closeButton_;

  IBOutlet NSPopUpButton* popupButton_;
}

// Initialize with the given popup container. Creates the C++ bridge object
// used to represet the "view".
- (id)initWithContainer:(BlockedPopupContainer*)container;

// Returns the C++ brige object.
- (BlockedPopupContainerView*)bridge;

// Called by the bridge to perform certain actions from the back-end code.
- (void)show;
- (void)hide;
- (void)update;

@end

@interface BlockedPopupContainerController(ForTesting)
- (BubbleView*)view;
- (IBAction)closePopup:(id)sender;
- (NSMenu*)buildMenu;
- (void)setContainer:(BlockedPopupContainer*)container;
@end

#endif  // CHROME_BROWSER_VIEWS_BLOCKED_POPUP_CONTAINER_CONTROLLER_H_