• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 #ifndef CHROME_BROWSER_CONTENT_SETTING_BUBBLE_MODEL_H_
6 #define CHROME_BROWSER_CONTENT_SETTING_BUBBLE_MODEL_H_
7 #pragma once
8 
9 #include <set>
10 #include <string>
11 #include <vector>
12 
13 #include "chrome/common/content_settings.h"
14 #include "content/common/notification_observer.h"
15 #include "content/common/notification_registrar.h"
16 #include "googleurl/src/gurl.h"
17 #include "third_party/skia/include/core/SkBitmap.h"
18 
19 class Profile;
20 class SkBitmap;
21 class TabContents;
22 
23 // This model provides data for ContentSettingBubble, and also controls
24 // the action triggered when the allow / block radio buttons are triggered.
25 class ContentSettingBubbleModel : public NotificationObserver {
26  public:
27   virtual ~ContentSettingBubbleModel();
28 
29   static ContentSettingBubbleModel* CreateContentSettingBubbleModel(
30       TabContents* tab_contents,
31       Profile* profile,
32       ContentSettingsType content_type);
33 
content_type()34   ContentSettingsType content_type() const { return content_type_; }
35 
36   struct PopupItem {
37     SkBitmap bitmap;
38     std::string title;
39     TabContents* tab_contents;
40   };
41   typedef std::vector<PopupItem> PopupItems;
42 
43   typedef std::vector<std::string> RadioItems;
44   struct RadioGroup {
45     RadioGroup();
46     ~RadioGroup();
47 
48     GURL url;
49     std::string title;
50     RadioItems radio_items;
51     int default_item;
52   };
53 
54   struct DomainList {
55     DomainList();
56     ~DomainList();
57 
58     std::string title;
59     std::set<std::string> hosts;
60   };
61 
62   struct BubbleContent {
63     BubbleContent();
64     ~BubbleContent();
65 
66     std::string title;
67     PopupItems popup_items;
68     RadioGroup radio_group;
69     std::vector<DomainList> domain_lists;
70     std::set<std::string> resource_identifiers;
71     std::string custom_link;
72     bool custom_link_enabled;
73     std::string manage_link;
74 
75    private:
76     DISALLOW_COPY_AND_ASSIGN(BubbleContent);
77   };
78 
bubble_content()79   const BubbleContent& bubble_content() const { return bubble_content_; }
80 
81   // NotificationObserver:
82   virtual void Observe(NotificationType type,
83                        const NotificationSource& source,
84                        const NotificationDetails& details);
85 
OnRadioClicked(int radio_index)86   virtual void OnRadioClicked(int radio_index) {}
OnPopupClicked(int index)87   virtual void OnPopupClicked(int index) {}
OnCustomLinkClicked()88   virtual void OnCustomLinkClicked() {}
OnManageLinkClicked()89   virtual void OnManageLinkClicked() {}
90 
91  protected:
92   ContentSettingBubbleModel(TabContents* tab_contents, Profile* profile,
93       ContentSettingsType content_type);
94 
tab_contents()95   TabContents* tab_contents() const { return tab_contents_; }
profile()96   Profile* profile() const { return profile_; }
97 
set_title(const std::string & title)98   void set_title(const std::string& title) { bubble_content_.title = title; }
add_popup(const PopupItem & popup)99   void add_popup(const PopupItem& popup) {
100     bubble_content_.popup_items.push_back(popup);
101   }
set_radio_group(const RadioGroup & radio_group)102   void set_radio_group(const RadioGroup& radio_group) {
103     bubble_content_.radio_group = radio_group;
104   }
add_domain_list(const DomainList & domain_list)105   void add_domain_list(const DomainList& domain_list) {
106     bubble_content_.domain_lists.push_back(domain_list);
107   }
set_custom_link(const std::string & link)108   void set_custom_link(const std::string& link) {
109     bubble_content_.custom_link = link;
110   }
set_custom_link_enabled(bool enabled)111   void set_custom_link_enabled(bool enabled) {
112     bubble_content_.custom_link_enabled = enabled;
113   }
set_manage_link(const std::string & link)114   void set_manage_link(const std::string& link) {
115     bubble_content_.manage_link = link;
116   }
117   void AddBlockedResource(const std::string& resource_identifier);
118 
119  private:
120   TabContents* tab_contents_;
121   Profile* profile_;
122   ContentSettingsType content_type_;
123   BubbleContent bubble_content_;
124   // A registrar for listening for TAB_CONTENTS_DESTROYED notifications.
125   NotificationRegistrar registrar_;
126 };
127 
128 #endif  // CHROME_BROWSER_CONTENT_SETTING_BUBBLE_MODEL_H_
129