Home | History | Annotate | Download | only in browser
      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 
     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 
     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 
     86   virtual void OnRadioClicked(int radio_index) {}
     87   virtual void OnPopupClicked(int index) {}
     88   virtual void OnCustomLinkClicked() {}
     89   virtual void OnManageLinkClicked() {}
     90 
     91  protected:
     92   ContentSettingBubbleModel(TabContents* tab_contents, Profile* profile,
     93       ContentSettingsType content_type);
     94 
     95   TabContents* tab_contents() const { return tab_contents_; }
     96   Profile* profile() const { return profile_; }
     97 
     98   void set_title(const std::string& title) { bubble_content_.title = title; }
     99   void add_popup(const PopupItem& popup) {
    100     bubble_content_.popup_items.push_back(popup);
    101   }
    102   void set_radio_group(const RadioGroup& radio_group) {
    103     bubble_content_.radio_group = radio_group;
    104   }
    105   void add_domain_list(const DomainList& domain_list) {
    106     bubble_content_.domain_lists.push_back(domain_list);
    107   }
    108   void set_custom_link(const std::string& link) {
    109     bubble_content_.custom_link = link;
    110   }
    111   void set_custom_link_enabled(bool enabled) {
    112     bubble_content_.custom_link_enabled = enabled;
    113   }
    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