1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_CONTENT_SETTING_BUBBLE_MODEL_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CONTENT_SETTING_BUBBLE_MODEL_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <set>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector>
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/content_settings.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h"
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "googleurl/src/gurl.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "third_party/skia/include/core/SkBitmap.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile;
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SkBitmap;
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContents;
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This model provides data for ContentSettingBubble, and also controls
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the action triggered when the allow / block radio buttons are triggered.
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ContentSettingBubbleModel : public NotificationObserver {
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ~ContentSettingBubbleModel();
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static ContentSettingBubbleModel* CreateContentSettingBubbleModel(
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      TabContents* tab_contents,
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      Profile* profile,
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ContentSettingsType content_type);
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ContentSettingsType content_type() const { return content_type_; }
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  struct PopupItem {
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SkBitmap bitmap;
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::string title;
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    TabContents* tab_contents;
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  typedef std::vector<PopupItem> PopupItems;
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  typedef std::vector<std::string> RadioItems;
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  struct RadioGroup {
45513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    RadioGroup();
46513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    ~RadioGroup();
47513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    GURL url;
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::string title;
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    RadioItems radio_items;
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int default_item;
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  struct DomainList {
55513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    DomainList();
56513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    ~DomainList();
57513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::string title;
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::set<std::string> hosts;
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  struct BubbleContent {
63513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    BubbleContent();
64513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    ~BubbleContent();
65513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::string title;
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    PopupItems popup_items;
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    RadioGroup radio_group;
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::vector<DomainList> domain_lists;
703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    std::set<std::string> resource_identifiers;
7121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    std::string custom_link;
7221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    bool custom_link_enabled;
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::string manage_link;
74513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
75513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch   private:
76513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    DISALLOW_COPY_AND_ASSIGN(BubbleContent);
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const BubbleContent& bubble_content() const { return bubble_content_; }
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // NotificationObserver:
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Observe(NotificationType type,
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       const NotificationSource& source,
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       const NotificationDetails& details);
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnRadioClicked(int radio_index) {}
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnPopupClicked(int index) {}
8821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void OnCustomLinkClicked() {}
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnManageLinkClicked() {}
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ContentSettingBubbleModel(TabContents* tab_contents, Profile* profile,
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ContentSettingsType content_type);
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabContents* tab_contents() const { return tab_contents_; }
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Profile* profile() const { return profile_; }
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_title(const std::string& title) { bubble_content_.title = title; }
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void add_popup(const PopupItem& popup) {
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bubble_content_.popup_items.push_back(popup);
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_radio_group(const RadioGroup& radio_group) {
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bubble_content_.radio_group = radio_group;
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void add_domain_list(const DomainList& domain_list) {
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bubble_content_.domain_lists.push_back(domain_list);
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
10821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void set_custom_link(const std::string& link) {
10921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    bubble_content_.custom_link = link;
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
11121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void set_custom_link_enabled(bool enabled) {
11221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    bubble_content_.custom_link_enabled = enabled;
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
11421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void set_manage_link(const std::string& link) {
11521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    bubble_content_.manage_link = link;
1163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void AddBlockedResource(const std::string& resource_identifier);
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabContents* tab_contents_;
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Profile* profile_;
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ContentSettingsType content_type_;
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BubbleContent bubble_content_;
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // A registrar for listening for TAB_CONTENTS_DESTROYED notifications.
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  NotificationRegistrar registrar_;
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_CONTENT_SETTING_BUBBLE_MODEL_H_
129