Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(960)

Side by Side Diff: chrome/browser/notifications/notification_exceptions_table_model.cc

Issue 7810017: Revert 98938 - Migrate Obsolete NotificationsSettings and remove content_settings::NotificationsP... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/notifications/notification_exceptions_table_model.h" 5 #include "chrome/browser/notifications/notification_exceptions_table_model.h"
6 6
7 #include <algorithm>
8 #include <string>
9
10 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
11 #include "base/utf_string_conversions.h"
12 #include "chrome/browser/content_settings/content_settings_pattern.h"
13 #include "chrome/browser/content_settings/host_content_settings_map.h"
14 #include "chrome/common/chrome_notification_types.h" 8 #include "chrome/common/chrome_notification_types.h"
15 #include "chrome/common/content_settings.h" 9 #include "chrome/common/content_settings.h"
10 #include "chrome/common/content_settings_helper.h"
16 #include "chrome/common/content_settings_types.h" 11 #include "chrome/common/content_settings_types.h"
17 #include "chrome/common/url_constants.h" 12 #include "chrome/common/url_constants.h"
18 #include "content/common/notification_service.h" 13 #include "content/common/notification_service.h"
19 #include "grit/generated_resources.h" 14 #include "grit/generated_resources.h"
20 #include "ui/base/l10n/l10n_util.h" 15 #include "ui/base/l10n/l10n_util.h"
21 #include "ui/base/models/table_model_observer.h" 16 #include "ui/base/models/table_model_observer.h"
22 17
23 struct NotificationExceptionsTableModel::Entry { 18 struct NotificationExceptionsTableModel::Entry {
24 Entry(const ContentSettingsPattern& origin, ContentSetting setting); 19 Entry(const GURL& origin, ContentSetting setting);
25 bool operator<(const Entry& b) const; 20 bool operator<(const Entry& b) const;
26 21
27 ContentSettingsPattern origin; 22 GURL origin;
28 ContentSetting setting; 23 ContentSetting setting;
29 }; 24 };
30 25
31 NotificationExceptionsTableModel::NotificationExceptionsTableModel( 26 NotificationExceptionsTableModel::NotificationExceptionsTableModel(
32 DesktopNotificationService* service) 27 DesktopNotificationService* service)
33 : service_(service), 28 : service_(service),
34 updates_disabled_(false), 29 updates_disabled_(false),
35 observer_(NULL) { 30 observer_(NULL) {
36 registrar_.Add(this, 31 registrar_.Add(this,
37 chrome::NOTIFICATION_DESKTOP_NOTIFICATION_SETTINGS_CHANGED, 32 chrome::NOTIFICATION_DESKTOP_NOTIFICATION_SETTINGS_CHANGED,
38 Source<DesktopNotificationService>(service)); 33 Source<DesktopNotificationService>(service));
39 LoadEntries(); 34 LoadEntries();
40 } 35 }
41 36
42 NotificationExceptionsTableModel::~NotificationExceptionsTableModel() {} 37 NotificationExceptionsTableModel::~NotificationExceptionsTableModel() {}
43 38
44 bool NotificationExceptionsTableModel::CanRemoveRows( 39 bool NotificationExceptionsTableModel::CanRemoveRows(
45 const Rows& rows) const { 40 const Rows& rows) const {
46 return !rows.empty(); 41 return !rows.empty();
47 } 42 }
48 43
49 void NotificationExceptionsTableModel::RemoveRows(const Rows& rows) { 44 void NotificationExceptionsTableModel::RemoveRows(const Rows& rows) {
50 AutoReset<bool> tmp(&updates_disabled_, true); 45 AutoReset<bool> tmp(&updates_disabled_, true);
51 // This is O(n^2) in rows.size(). Since n is small, that's ok. 46 // This is O(n^2) in rows.size(). Since n is small, that's ok.
52 for (Rows::const_reverse_iterator i(rows.rbegin()); i != rows.rend(); ++i) { 47 for (Rows::const_reverse_iterator i(rows.rbegin()); i != rows.rend(); ++i) {
53 size_t row = *i; 48 size_t row = *i;
54 Entry* entry = &entries_[row]; 49 Entry* entry = &entries_[row];
55 DCHECK(entry->setting == CONTENT_SETTING_ALLOW || 50 if (entry->setting == CONTENT_SETTING_ALLOW) {
56 entry->setting == CONTENT_SETTING_BLOCK); 51 service_->ResetAllowedOrigin(entry->origin);
57 service_->ClearSetting(entry->origin); 52 } else {
53 DCHECK_EQ(entry->setting, CONTENT_SETTING_BLOCK);
54 service_->ResetBlockedOrigin(entry->origin);
55 }
58 entries_.erase(entries_.begin() + row); // Note: |entry| is now garbage. 56 entries_.erase(entries_.begin() + row); // Note: |entry| is now garbage.
59 if (observer_) 57 if (observer_)
60 observer_->OnItemsRemoved(row, 1); 58 observer_->OnItemsRemoved(row, 1);
61 } 59 }
62 } 60 }
63 61
64 void NotificationExceptionsTableModel::RemoveAll() { 62 void NotificationExceptionsTableModel::RemoveAll() {
65 AutoReset<bool> tmp(&updates_disabled_, true); 63 AutoReset<bool> tmp(&updates_disabled_, true);
66 entries_.clear(); 64 entries_.clear();
67 service_->ResetAllOrigins(); 65 service_->ResetAllOrigins();
68 if (observer_) 66 if (observer_)
69 observer_->OnModelChanged(); 67 observer_->OnModelChanged();
70 } 68 }
71 69
72 int NotificationExceptionsTableModel::RowCount() { 70 int NotificationExceptionsTableModel::RowCount() {
73 return static_cast<int>(entries_.size()); 71 return static_cast<int>(entries_.size());
74 } 72 }
75 73
76 string16 NotificationExceptionsTableModel::GetText(int row, 74 string16 NotificationExceptionsTableModel::GetText(int row,
77 int column_id) { 75 int column_id) {
78 const Entry& entry = entries_[row]; 76 const Entry& entry = entries_[row];
79 if (column_id == IDS_EXCEPTIONS_HOSTNAME_HEADER) { 77 if (column_id == IDS_EXCEPTIONS_HOSTNAME_HEADER) {
80 return UTF8ToUTF16(entry.origin.ToString()); 78 return content_settings_helper::OriginToString16(entry.origin);
81 } 79 }
82 80
83 if (column_id == IDS_EXCEPTIONS_ACTION_HEADER) { 81 if (column_id == IDS_EXCEPTIONS_ACTION_HEADER) {
84 switch (entry.setting) { 82 switch (entry.setting) {
85 case CONTENT_SETTING_ALLOW: 83 case CONTENT_SETTING_ALLOW:
86 return l10n_util::GetStringUTF16(IDS_EXCEPTIONS_ALLOW_BUTTON); 84 return l10n_util::GetStringUTF16(IDS_EXCEPTIONS_ALLOW_BUTTON);
87 case CONTENT_SETTING_BLOCK: 85 case CONTENT_SETTING_BLOCK:
88 return l10n_util::GetStringUTF16(IDS_EXCEPTIONS_BLOCK_BUTTON); 86 return l10n_util::GetStringUTF16(IDS_EXCEPTIONS_BLOCK_BUTTON);
89 default: 87 default:
90 break; 88 break;
(...skipping 18 matching lines...) Expand all
109 DCHECK_EQ(Source<DesktopNotificationService>(source).ptr(), service_); 107 DCHECK_EQ(Source<DesktopNotificationService>(source).ptr(), service_);
110 entries_.clear(); 108 entries_.clear();
111 LoadEntries(); 109 LoadEntries();
112 110
113 if (observer_) 111 if (observer_)
114 observer_->OnModelChanged(); 112 observer_->OnModelChanged();
115 } 113 }
116 } 114 }
117 115
118 void NotificationExceptionsTableModel::LoadEntries() { 116 void NotificationExceptionsTableModel::LoadEntries() {
119 HostContentSettingsMap::SettingsForOneType settings; 117 std::vector<GURL> allowed(service_->GetAllowedOrigins());
120 service_->GetNotificationsSettings(&settings); 118 std::vector<GURL> blocked(service_->GetBlockedOrigins());
121 119 entries_.reserve(allowed.size() + blocked.size());
122 entries_.reserve(settings.size()); 120 for (size_t i = 0; i < allowed.size(); ++i)
123 for (HostContentSettingsMap::SettingsForOneType::const_iterator i = 121 entries_.push_back(Entry(allowed[i], CONTENT_SETTING_ALLOW));
124 settings.begin(); 122 for (size_t i = 0; i < blocked.size(); ++i)
125 i != settings.end(); 123 entries_.push_back(Entry(blocked[i], CONTENT_SETTING_BLOCK));
126 ++i) {
127 const HostContentSettingsMap::PatternSettingSourceTuple& tuple(*i);
128 entries_.push_back(Entry(tuple.a, tuple.c));
129 }
130 std::sort(entries_.begin(), entries_.end()); 124 std::sort(entries_.begin(), entries_.end());
131 } 125 }
132 126
133 NotificationExceptionsTableModel::Entry::Entry( 127 NotificationExceptionsTableModel::Entry::Entry(
134 const ContentSettingsPattern& in_origin, 128 const GURL& in_origin,
135 ContentSetting in_setting) 129 ContentSetting in_setting)
136 : origin(in_origin), 130 : origin(in_origin),
137 setting(in_setting) { 131 setting(in_setting) {
138 } 132 }
139 133
140 bool NotificationExceptionsTableModel::Entry::operator<( 134 bool NotificationExceptionsTableModel::Entry::operator<(
141 const NotificationExceptionsTableModel::Entry& b) const { 135 const NotificationExceptionsTableModel::Entry& b) const {
142 DCHECK_NE(origin, b.origin); 136 DCHECK_NE(origin, b.origin);
143 return origin.ToString() < b.origin.ToString(); 137 return origin < b.origin;
144 } 138 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698