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.
7 #import <Cocoa/Cocoa.h>
9 #include "base/memory/scoped_ptr.h"
10 #import "chrome/browser/ui/cocoa/base_bubble_controller.h"
11 #include "content/public/common/media_stream_request.h"
13 class ContentSettingBubbleModel
;
14 class ContentSettingBubbleWebContentsObserverBridge
;
15 class ContentSettingMediaMenuModel
;
16 @
class InfoBubbleView
;
22 namespace content_setting_bubble
{
23 // For every "show popup" button, remember the index of the popup tab contents
24 // it should open when clicked.
25 typedef std::map
<NSButton
*, int> PopupLinks
;
27 // For every media menu button, remember the components assosiated with the
29 struct MediaMenuParts
{
30 MediaMenuParts(content::MediaStreamType type
, NSTextField
* label
);
33 content::MediaStreamType type
;
34 NSTextField
* label
; // Weak.
35 scoped_ptr
<ContentSettingMediaMenuModel
> model
;
38 DISALLOW_COPY_AND_ASSIGN(MediaMenuParts
);
41 // Comparator used by MediaMenuPartsMap to order its keys.
42 struct compare_button
{
43 bool operator()(NSPopUpButton
*const a
, NSPopUpButton
*const b
) const {
44 return [a tag
] < [b tag
];
47 typedef std::map
<NSPopUpButton
*, MediaMenuParts
*, compare_button
>
49 } // namespace content_setting_bubble
51 // Manages a "content blocked" bubble.
52 @interface ContentSettingBubbleController
: BaseBubbleController
{
54 IBOutlet NSTextField
* titleLabel_
;
55 IBOutlet NSMatrix
* allowBlockRadioGroup_
;
57 IBOutlet NSButton
* manageButton_
;
58 IBOutlet NSButton
* doneButton_
;
59 IBOutlet NSButton
* loadButton_
;
61 // The container for the bubble contents of the geolocation bubble.
62 IBOutlet NSView
* contentsContainer_
;
64 IBOutlet NSTextField
* blockedResourcesField_
;
66 scoped_ptr
<ContentSettingBubbleModel
> contentSettingBubbleModel_
;
67 scoped_ptr
<ContentSettingBubbleWebContentsObserverBridge
> observerBridge_
;
68 content_setting_bubble::PopupLinks popupLinks_
;
69 content_setting_bubble::MediaMenuPartsMap mediaMenus_
;
72 // Creates and shows a content blocked bubble. Takes ownership of
73 // |contentSettingBubbleModel| but not of the other objects.
74 + (ContentSettingBubbleController
*)
75 showForModel
:(ContentSettingBubbleModel
*)contentSettingBubbleModel
76 webContents
:(content::WebContents
*)webContents
77 parentWindow
:(NSWindow
*)parentWindow
78 anchoredAt
:(NSPoint
)anchoredAt
;
80 // Callback for the "don't block / continue blocking" radio group.
81 - (IBAction
)allowBlockToggled
:(id
)sender
;
83 // Callback for "close" button.
84 - (IBAction
)closeBubble
:(id
)sender
;
86 // Callback for "manage" button.
87 - (IBAction
)manageBlocking
:(id
)sender
;
89 // Callback for "info" link.
90 - (IBAction
)showMoreInfo
:(id
)sender
;
92 // Callback for "load" (plugins, mixed script) button.
93 - (IBAction
)load
:(id
)sender
;
95 // Callback for "Learn More" link.
96 - (IBAction
)learnMoreLinkClicked
:(id
)sender
;
98 // Callback for "media menu" button.
99 - (IBAction
)mediaMenuChanged
:(id
)sender
;
103 @interface
ContentSettingBubbleController (TestingAPI
)
105 // Returns the weak reference to the |mediaMenus_|.
106 - (content_setting_bubble::MediaMenuPartsMap
*)mediaMenus
;