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