// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_CONTENT_SETTING_BUBBLE_MODEL_H_ #define CHROME_BROWSER_CONTENT_SETTING_BUBBLE_MODEL_H_ #pragma once #include <set> #include <string> #include <vector> #include "chrome/common/content_settings.h" #include "content/common/notification_observer.h" #include "content/common/notification_registrar.h" #include "googleurl/src/gurl.h" #include "third_party/skia/include/core/SkBitmap.h" class Profile; class SkBitmap; class TabContents; // This model provides data for ContentSettingBubble, and also controls // the action triggered when the allow / block radio buttons are triggered. class ContentSettingBubbleModel : public NotificationObserver { public: virtual ~ContentSettingBubbleModel(); static ContentSettingBubbleModel* CreateContentSettingBubbleModel( TabContents* tab_contents, Profile* profile, ContentSettingsType content_type); ContentSettingsType content_type() const { return content_type_; } struct PopupItem { SkBitmap bitmap; std::string title; TabContents* tab_contents; }; typedef std::vector<PopupItem> PopupItems; typedef std::vector<std::string> RadioItems; struct RadioGroup { RadioGroup(); ~RadioGroup(); GURL url; std::string title; RadioItems radio_items; int default_item; }; struct DomainList { DomainList(); ~DomainList(); std::string title; std::set<std::string> hosts; }; struct BubbleContent { BubbleContent(); ~BubbleContent(); std::string title; PopupItems popup_items; RadioGroup radio_group; std::vector<DomainList> domain_lists; std::set<std::string> resource_identifiers; std::string custom_link; bool custom_link_enabled; std::string manage_link; private: DISALLOW_COPY_AND_ASSIGN(BubbleContent); }; const BubbleContent& bubble_content() const { return bubble_content_; } // NotificationObserver: virtual void Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details); virtual void OnRadioClicked(int radio_index) {} virtual void OnPopupClicked(int index) {} virtual void OnCustomLinkClicked() {} virtual void OnManageLinkClicked() {} protected: ContentSettingBubbleModel(TabContents* tab_contents, Profile* profile, ContentSettingsType content_type); TabContents* tab_contents() const { return tab_contents_; } Profile* profile() const { return profile_; } void set_title(const std::string& title) { bubble_content_.title = title; } void add_popup(const PopupItem& popup) { bubble_content_.popup_items.push_back(popup); } void set_radio_group(const RadioGroup& radio_group) { bubble_content_.radio_group = radio_group; } void add_domain_list(const DomainList& domain_list) { bubble_content_.domain_lists.push_back(domain_list); } void set_custom_link(const std::string& link) { bubble_content_.custom_link = link; } void set_custom_link_enabled(bool enabled) { bubble_content_.custom_link_enabled = enabled; } void set_manage_link(const std::string& link) { bubble_content_.manage_link = link; } void AddBlockedResource(const std::string& resource_identifier); private: TabContents* tab_contents_; Profile* profile_; ContentSettingsType content_type_; BubbleContent bubble_content_; // A registrar for listening for TAB_CONTENTS_DESTROYED notifications. NotificationRegistrar registrar_; }; #endif // CHROME_BROWSER_CONTENT_SETTING_BUBBLE_MODEL_H_