15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#import <Cocoa/Cocoa.h>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#import "chrome/browser/ui/cocoa/base_bubble_controller.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/media_stream_request.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingBubbleModel;
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ContentSettingBubbleWebContentsObserverBridge;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ContentSettingMediaMenuModel;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class InfoBubbleView;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace content {
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class WebContents;
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content_setting_bubble {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For every "show popup" button, remember the index of the popup tab contents
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// it should open when clicked.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::map<NSButton*, int> PopupLinks;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// For every media menu button, remember the components assosiated with the
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// menu button.
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct MediaMenuParts {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MediaMenuParts(content::MediaStreamType type, NSTextField* label);
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~MediaMenuParts();
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::MediaStreamType type;
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NSTextField* label;  // Weak.
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ContentSettingMediaMenuModel> model;
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MediaMenuParts);
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef std::map<NSPopUpButton*, MediaMenuParts*> MediaMenuPartsMap;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace content_setting_bubble
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Manages a "content blocked" bubble.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@interface ContentSettingBubbleController : BaseBubbleController {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @private
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IBOutlet NSTextField* titleLabel_;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IBOutlet NSMatrix* allowBlockRadioGroup_;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IBOutlet NSButton* manageButton_;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IBOutlet NSButton* doneButton_;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IBOutlet NSButton* loadButton_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The container for the bubble contents of the geolocation bubble.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IBOutlet NSView* contentsContainer_;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IBOutlet NSTextField* blockedResourcesField_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ContentSettingBubbleModel> contentSettingBubbleModel_;
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<ContentSettingBubbleWebContentsObserverBridge> observerBridge_;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_setting_bubble::PopupLinks popupLinks_;
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content_setting_bubble::MediaMenuPartsMap mediaMenus_;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates and shows a content blocked bubble. Takes ownership of
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |contentSettingBubbleModel| but not of the other objects.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)+ (ContentSettingBubbleController*)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    showForModel:(ContentSettingBubbleModel*)contentSettingBubbleModel
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     webContents:(content::WebContents*)webContents
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    parentWindow:(NSWindow*)parentWindow
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      anchoredAt:(NSPoint)anchoredAt;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Callback for the "don't block / continue blocking" radio group.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (IBAction)allowBlockToggled:(id)sender;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Callback for "close" button.
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (IBAction)closeBubble:(id)sender;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Callback for "manage" button.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (IBAction)manageBlocking:(id)sender;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Callback for "info" link.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (IBAction)showMoreInfo:(id)sender;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Callback for "load" (plug-ins, mixed script) button.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (IBAction)load:(id)sender;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Callback for "Learn More" link.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (IBAction)learnMoreLinkClicked:(id)sender;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Callback for "media menu" button.
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)- (IBAction)mediaMenuChanged:(id)sender;
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@end
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)@interface ContentSettingBubbleController (TestingAPI)
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Returns the weak reference to the |mediaMenus_|.
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)- (content_setting_bubble::MediaMenuPartsMap*)mediaMenus;
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch@end
101