Home | History | Annotate | Download | only in content_settings
      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.
      4 
      5 #include <map>
      6 
      7 #import <Cocoa/Cocoa.h>
      8 
      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"
     12 
     13 class ContentSettingBubbleModel;
     14 class ContentSettingBubbleWebContentsObserverBridge;
     15 class ContentSettingMediaMenuModel;
     16 @class InfoBubbleView;
     17 
     18 namespace content {
     19 class WebContents;
     20 }
     21 
     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;
     26 
     27 // For every media menu button, remember the components assosiated with the
     28 // menu button.
     29 struct MediaMenuParts {
     30   MediaMenuParts(content::MediaStreamType type, NSTextField* label);
     31   ~MediaMenuParts();
     32 
     33   content::MediaStreamType type;
     34   NSTextField* label;  // Weak.
     35   scoped_ptr<ContentSettingMediaMenuModel> model;
     36 
     37  private:
     38   DISALLOW_COPY_AND_ASSIGN(MediaMenuParts);
     39 };
     40 typedef std::map<NSPopUpButton*, MediaMenuParts*> MediaMenuPartsMap;
     41 }  // namespace content_setting_bubble
     42 
     43 // Manages a "content blocked" bubble.
     44 @interface ContentSettingBubbleController : BaseBubbleController {
     45  @private
     46   IBOutlet NSTextField* titleLabel_;
     47   IBOutlet NSMatrix* allowBlockRadioGroup_;
     48 
     49   IBOutlet NSButton* manageButton_;
     50   IBOutlet NSButton* doneButton_;
     51   IBOutlet NSButton* loadButton_;
     52 
     53   // The container for the bubble contents of the geolocation bubble.
     54   IBOutlet NSView* contentsContainer_;
     55 
     56   IBOutlet NSTextField* blockedResourcesField_;
     57 
     58   scoped_ptr<ContentSettingBubbleModel> contentSettingBubbleModel_;
     59   scoped_ptr<ContentSettingBubbleWebContentsObserverBridge> observerBridge_;
     60   content_setting_bubble::PopupLinks popupLinks_;
     61   content_setting_bubble::MediaMenuPartsMap mediaMenus_;
     62 }
     63 
     64 // Creates and shows a content blocked bubble. Takes ownership of
     65 // |contentSettingBubbleModel| but not of the other objects.
     66 + (ContentSettingBubbleController*)
     67     showForModel:(ContentSettingBubbleModel*)contentSettingBubbleModel
     68      webContents:(content::WebContents*)webContents
     69     parentWindow:(NSWindow*)parentWindow
     70       anchoredAt:(NSPoint)anchoredAt;
     71 
     72 // Callback for the "don't block / continue blocking" radio group.
     73 - (IBAction)allowBlockToggled:(id)sender;
     74 
     75 // Callback for "close" button.
     76 - (IBAction)closeBubble:(id)sender;
     77 
     78 // Callback for "manage" button.
     79 - (IBAction)manageBlocking:(id)sender;
     80 
     81 // Callback for "info" link.
     82 - (IBAction)showMoreInfo:(id)sender;
     83 
     84 // Callback for "load" (plug-ins, mixed script) button.
     85 - (IBAction)load:(id)sender;
     86 
     87 // Callback for "Learn More" link.
     88 - (IBAction)learnMoreLinkClicked:(id)sender;
     89 
     90 // Callback for "media menu" button.
     91 - (IBAction)mediaMenuChanged:(id)sender;
     92 
     93 @end
     94 
     95 @interface ContentSettingBubbleController (TestingAPI)
     96 
     97 // Returns the weak reference to the |mediaMenus_|.
     98 - (content_setting_bubble::MediaMenuPartsMap*)mediaMenus;
     99 
    100 @end
    101