summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/cocoa/website_settings_bubble_controller.h
blob: a793a19393c57e40830fd5aeaff6b78432abc9e2 (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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// Copyright (c) 2012 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.

#import <Cocoa/Cocoa.h>

#include "base/memory/scoped_nsobject.h"
#include "base/memory/scoped_ptr.h"
#import "chrome/browser/ui/cocoa/base_bubble_controller.h"
#include "chrome/browser/ui/website_settings/website_settings_ui.h"

class TabContents;
class WebsiteSettingsUIBridge;

// This NSWindowController subclass manages the InfoBubbleWindow and view that
// are displayed when the user clicks the favicon or security lock icon.
@interface WebsiteSettingsBubbleController : BaseBubbleController {
 @private
  scoped_nsobject<NSView> contentView_;
  scoped_nsobject<NSSegmentedControl> segmentedControl_;
  scoped_nsobject<NSTabView> tabView_;

  // Displays the web site identity.
  NSTextField* identityField_;

  // Display the identity status (e.g. verified, not verified).
  NSTextField* identityStatusField_;

  // The main content view for the Permissions tab.
  NSView* permissionsTabContentView_;

  // Container for cookies info on the Permissions tab.
  NSView* cookiesView_;

  // Container for permission info on the Permissions tab.
  NSView* permissionsView_;

  NSImageView* identityStatusIcon_;
  NSTextField* identityStatusDescriptionField_;
  NSView* separatorAfterIdentity_;

  NSImageView* connectionStatusIcon_;
  NSTextField* connectionStatusDescriptionField_;
  NSView* separatorAfterConnection_;

  NSImageView* firstVisitIcon_;
  NSTextField* firstVisitHeaderField_;
  NSTextField* firstVisitDescriptionField_;

  // The UI translates user actions to specific events and forwards them to the
  // |presenter_|. The |presenter_| handles these events and updates the UI.
  scoped_ptr<WebsiteSettings> presenter_;

  // Bridge which implements the WebsiteSettingsUI interface and forwards
  // methods on to this class.
  scoped_ptr<WebsiteSettingsUIBridge> bridge_;
}

// Designated initializer. The controller will release itself when the bubble
// is closed. |parentWindow| cannot be nil.
- (id)initWithParentWindow:(NSWindow*)parentWindow
   websiteSettingsUIBridge:(WebsiteSettingsUIBridge*)bridge;

- (void)permissionValueChanged:(id)sender;

@end

// Provides a bridge between the WebSettingsUI C++ interface and the Cocoa
// implementation in WebsiteSettingsBubbleController.
class WebsiteSettingsUIBridge : public WebsiteSettingsUI {
 public:
  WebsiteSettingsUIBridge();
  virtual ~WebsiteSettingsUIBridge();

  // Creates a |WebsiteSettingsBubbleController| and displays the UI. |parent|
  // contains the currently active window, |profile| contains the currently
  // active profile and |ssl| contains the |SSLStatus| of the connection to the
  // website in the currently active tab that is wrapped by the
  // |tab_contents|.
  static void Show(gfx::NativeWindow parent,
                   Profile* profile,
                   TabContents* tab_contents,
                   const GURL& url,
                   const content::SSLStatus& ssl);

  void set_bubble_controller(
      WebsiteSettingsBubbleController* bubble_controller);

  // WebsiteSettingsUI implementations.
  virtual void SetCookieInfo(const CookieInfoList& cookie_info_list) OVERRIDE;
  virtual void SetPermissionInfo(
      const PermissionInfoList& permission_info_list) OVERRIDE;
  virtual void SetIdentityInfo(const IdentityInfo& identity_info) OVERRIDE;
  virtual void SetFirstVisit(const string16& first_visit) OVERRIDE;

 private:
  // The Cocoa controller for the bubble UI.
  WebsiteSettingsBubbleController* bubble_controller_;

  DISALLOW_COPY_AND_ASSIGN(WebsiteSettingsUIBridge);
};