Index: chrome/browser/content_exceptions_table_model.cc |
diff --git a/chrome/browser/content_exceptions_table_model.cc b/chrome/browser/content_exceptions_table_model.cc |
index 93efed591b5c5780c5bfaba23a49f8db4539a9ed..e32bc8198022ef3a70c7074e58978b030ee6b571 100644 |
--- a/chrome/browser/content_exceptions_table_model.cc |
+++ b/chrome/browser/content_exceptions_table_model.cc |
@@ -12,28 +12,44 @@ |
ContentExceptionsTableModel::ContentExceptionsTableModel( |
HostContentSettingsMap* map, |
+ HostContentSettingsMap* off_the_record_map, |
ContentSettingsType type) |
: map_(map), |
+ off_the_record_map_(off_the_record_map), |
content_type_(type), |
observer_(NULL) { |
// Load the contents. |
map->GetSettingsForOneType(type, &entries_); |
+ if (off_the_record_map) |
+ off_the_record_map->GetSettingsForOneType(type, &off_the_record_entries_); |
} |
void ContentExceptionsTableModel::AddException( |
const HostContentSettingsMap::Pattern& pattern, |
- ContentSetting setting) { |
- entries_.push_back( |
+ ContentSetting setting, |
+ bool is_off_the_record) { |
+ DCHECK(!is_off_the_record || off_the_record_map_); |
+ |
+ int insert_position = |
+ is_off_the_record ? RowCount() : static_cast<int>(entries_.size()); |
+ |
+ entries(is_off_the_record).push_back( |
HostContentSettingsMap::PatternSettingPair(pattern, setting)); |
- map_->SetContentSetting(pattern, content_type_, setting); |
+ map(is_off_the_record)->SetContentSetting(pattern, content_type_, setting); |
if (observer_) |
- observer_->OnItemsAdded(RowCount() - 1, 1); |
+ observer_->OnItemsAdded(insert_position, 1); |
} |
void ContentExceptionsTableModel::RemoveException(int row) { |
- const HostContentSettingsMap::PatternSettingPair& pair = entries_[row]; |
- map_->SetContentSetting(pair.first, content_type_, CONTENT_SETTING_DEFAULT); |
- entries_.erase(entries_.begin() + row); |
+ bool is_off_the_record = entry_is_off_the_record(row); |
+ int position_to_delete = |
+ is_off_the_record ? row - static_cast<int>(entries_.size()) : row; |
+ const HostContentSettingsMap::PatternSettingPair& pair = entry_at(row); |
+ |
+ map(is_off_the_record)->SetContentSetting( |
+ pair.first, content_type_, CONTENT_SETTING_DEFAULT); |
+ entries(is_off_the_record).erase( |
+ entries(is_off_the_record).begin() + position_to_delete); |
if (observer_) |
observer_->OnItemsRemoved(row, 1); |
} |
@@ -41,28 +57,37 @@ void ContentExceptionsTableModel::RemoveException(int row) { |
void ContentExceptionsTableModel::RemoveAll() { |
int old_row_count = RowCount(); |
entries_.clear(); |
+ off_the_record_entries_.clear(); |
map_->ClearSettingsForOneType(content_type_); |
+ if (off_the_record_map_) |
+ off_the_record_map_->ClearSettingsForOneType(content_type_); |
if (observer_) |
observer_->OnItemsRemoved(0, old_row_count); |
} |
int ContentExceptionsTableModel::IndexOfExceptionByPattern( |
- const HostContentSettingsMap::Pattern& pattern) { |
+ const HostContentSettingsMap::Pattern& pattern, |
+ bool is_off_the_record) { |
+ DCHECK(!is_off_the_record || off_the_record_map_); |
+ |
+ int offset = |
+ is_off_the_record ? static_cast<int>(entries_.size()) : 0; |
+ |
// This is called on every key type in the editor. Move to a map if we end up |
// with lots of exceptions. |
- for (size_t i = 0; i < entries_.size(); ++i) { |
- if (entries_[i].first == pattern) |
- return static_cast<int>(i); |
+ for (size_t i = 0; i < entries(is_off_the_record).size(); ++i) { |
+ if (entries(is_off_the_record)[i].first == pattern) |
+ return offset + static_cast<int>(i); |
} |
return -1; |
} |
int ContentExceptionsTableModel::RowCount() { |
- return static_cast<int>(entries_.size()); |
+ return static_cast<int>(entries_.size() + off_the_record_entries_.size()); |
} |
std::wstring ContentExceptionsTableModel::GetText(int row, int column_id) { |
- HostContentSettingsMap::PatternSettingPair entry = entries_[row]; |
+ HostContentSettingsMap::PatternSettingPair entry = entry_at(row); |
switch (column_id) { |
case IDS_EXCEPTIONS_PATTERN_HEADER: |