summaryrefslogtreecommitdiffstats
path: root/chrome/browser/content_exceptions_table_model.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/content_exceptions_table_model.cc')
-rw-r--r--chrome/browser/content_exceptions_table_model.cc89
1 files changed, 89 insertions, 0 deletions
diff --git a/chrome/browser/content_exceptions_table_model.cc b/chrome/browser/content_exceptions_table_model.cc
new file mode 100644
index 0000000..530fc10
--- /dev/null
+++ b/chrome/browser/content_exceptions_table_model.cc
@@ -0,0 +1,89 @@
+// Copyright (c) 2010 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.
+
+#include "chrome/browser/content_exceptions_table_model.h"
+
+#include "app/l10n_util.h"
+#include "app/table_model_observer.h"
+#include "chrome/browser/host_content_settings_map.h"
+#include "grit/generated_resources.h"
+
+ContentExceptionsTableModel::ContentExceptionsTableModel(
+ HostContentSettingsMap* map,
+ ContentSettingsType type)
+ : map_(map),
+ content_type_(type),
+ observer_(NULL) {
+ // Load the contents.
+ map->GetSettingsForOneType(type, &entries_);
+}
+
+void ContentExceptionsTableModel::AddException(const std::string& host,
+ ContentSetting setting) {
+ entries_.push_back(HostContentSettingsMap::HostSettingPair(host, setting));
+ map_->SetContentSetting(host, content_type_, setting);
+ if (observer_)
+ observer_->OnItemsAdded(RowCount() - 1, 1);
+}
+
+void ContentExceptionsTableModel::RemoveException(int row) {
+ const HostContentSettingsMap::HostSettingPair& pair = entries_[row];
+ map_->SetContentSetting(pair.first, content_type_, CONTENT_SETTING_DEFAULT);
+ entries_.erase(entries_.begin() + row);
+ if (observer_)
+ observer_->OnItemsRemoved(row, 1);
+}
+
+void ContentExceptionsTableModel::RemoveAll() {
+ int old_row_count = RowCount();
+ entries_.clear();
+ map_->ClearSettingsForOneType(content_type_);
+ observer_->OnItemsRemoved(0, old_row_count);
+}
+
+int ContentExceptionsTableModel::IndexOfExceptionByHost(
+ const std::string& host) {
+ // 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 == host)
+ return static_cast<int>(i);
+ }
+ return -1;
+}
+
+int ContentExceptionsTableModel::RowCount() {
+ return static_cast<int>(entries_.size());
+}
+
+std::wstring ContentExceptionsTableModel::GetText(int row, int column_id) {
+ HostContentSettingsMap::HostSettingPair entry = entries_[row];
+
+ switch (column_id) {
+ case IDS_EXCEPTIONS_HOSTNAME_HEADER:
+ return UTF8ToWide(entry.first);
+
+ case IDS_EXCEPTIONS_ACTION_HEADER:
+ switch (entry.second) {
+ case CONTENT_SETTING_ALLOW:
+ return l10n_util::GetString(IDS_EXCEPTIONS_ALLOW_BUTTON);
+ case CONTENT_SETTING_BLOCK:
+ return l10n_util::GetString(IDS_EXCEPTIONS_BLOCK_BUTTON);
+ case CONTENT_SETTING_ASK:
+ return l10n_util::GetString(IDS_EXCEPTIONS_ASK_BUTTON);
+ default:
+ NOTREACHED();
+ }
+ break;
+
+ default:
+ NOTREACHED();
+ }
+
+ return std::wstring();
+}
+
+void ContentExceptionsTableModel::SetObserver(TableModelObserver* observer) {
+ observer_ = observer;
+}