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

Unified Diff: chrome/browser/plugin_exceptions_table_model.cc

Issue 7977042: Get rid of synchronous calls to getting plugins to help with http://codereview.chromium.org/79800... (Closed) Base URL: svn://chrome-svn/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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/plugin_exceptions_table_model.cc
===================================================================
--- chrome/browser/plugin_exceptions_table_model.cc (revision 102144)
+++ chrome/browser/plugin_exceptions_table_model.cc (working copy)
@@ -1,200 +0,0 @@
-// 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.
-
-#include "chrome/browser/plugin_exceptions_table_model.h"
-
-#include "base/auto_reset.h"
-#include "base/sys_string_conversions.h"
-#include "base/utf_string_conversions.h"
-#include "chrome/common/chrome_notification_types.h"
-#include "content/common/notification_service.h"
-#include "grit/generated_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/models/table_model_observer.h"
-
-PluginExceptionsTableModel::PluginExceptionsTableModel(
- HostContentSettingsMap* content_settings_map,
- HostContentSettingsMap* otr_content_settings_map)
- : map_(content_settings_map),
- otr_map_(otr_content_settings_map),
- updates_disabled_(false),
- observer_(NULL) {
- registrar_.Add(this, chrome::NOTIFICATION_CONTENT_SETTINGS_CHANGED,
- Source<HostContentSettingsMap>(map_));
- if (otr_map_) {
- registrar_.Add(this, chrome::NOTIFICATION_CONTENT_SETTINGS_CHANGED,
- Source<HostContentSettingsMap>(otr_map_));
- }
-}
-
-PluginExceptionsTableModel::~PluginExceptionsTableModel() {
-}
-
-bool PluginExceptionsTableModel::CanRemoveRows(const Rows& rows) const {
- return !rows.empty();
-}
-
-void PluginExceptionsTableModel::RemoveRows(const Rows& rows) {
- AutoReset<bool> tmp(&updates_disabled_, true);
- bool reload_all = false;
- // Iterate over the rows starting with the highest ones so we can delete
- // entries from |settings_| without the other indices shifting.
- for (Rows::const_reverse_iterator it = rows.rbegin();
- it != rows.rend(); ++it) {
- DCHECK_LT(*it, settings_.size());
- SettingsEntry entry = settings_[*it];
- HostContentSettingsMap* map = entry.is_otr ? otr_map_ : map_;
- map->SetContentSetting(entry.pattern,
- ContentSettingsPattern::Wildcard(),
- CONTENT_SETTINGS_TYPE_PLUGINS,
- resources_[entry.plugin_id],
- CONTENT_SETTING_DEFAULT);
- settings_.erase(settings_.begin() + *it);
- row_counts_[entry.plugin_id]--;
- if (!reload_all) {
- // If we remove the last exception for a plugin, recreate all groups
- // to get correct IDs.
- if (row_counts_[entry.plugin_id] == 0) {
- reload_all = true;
- } else {
- if (observer_)
- observer_->OnItemsRemoved(*it, 1);
- }
- }
- }
- if (reload_all) {
- // This also notifies the observer.
- ReloadSettings();
- }
-}
-
-void PluginExceptionsTableModel::RemoveAll() {
- AutoReset<bool> tmp(&updates_disabled_, true);
- map_->ClearSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS);
- if (otr_map_)
- otr_map_->ClearSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS);
-
- ClearSettings();
- if (observer_)
- observer_->OnModelChanged();
-}
-
-int PluginExceptionsTableModel::RowCount() {
- return settings_.size();
-}
-
-string16 PluginExceptionsTableModel::GetText(int row, int column_id) {
- DCHECK_GE(row, 0);
- DCHECK_LT(row, static_cast<int>(settings_.size()));
- SettingsEntry& entry = settings_[row];
- if (column_id == IDS_EXCEPTIONS_PATTERN_HEADER ||
- column_id == IDS_EXCEPTIONS_HOSTNAME_HEADER) {
- return UTF8ToUTF16(entry.pattern.ToString());
- } else if (column_id == IDS_EXCEPTIONS_ACTION_HEADER) {
- switch (entry.setting) {
- case CONTENT_SETTING_ALLOW:
- return l10n_util::GetStringUTF16(IDS_EXCEPTIONS_ALLOW_BUTTON);
- case CONTENT_SETTING_BLOCK:
- return l10n_util::GetStringUTF16(IDS_EXCEPTIONS_BLOCK_BUTTON);
- default:
- NOTREACHED();
- }
- } else {
- NOTREACHED();
- }
- return string16();
-}
-
-bool PluginExceptionsTableModel::HasGroups() {
- return true;
-}
-
-void PluginExceptionsTableModel::SetObserver(ui::TableModelObserver* observer) {
- observer_ = observer;
-}
-
-ui::TableModel::Groups PluginExceptionsTableModel::GetGroups() {
- return groups_;
-}
-
-int PluginExceptionsTableModel::GetGroupID(int row) {
- DCHECK_LT(row, static_cast<int>(settings_.size()));
- return settings_[row].plugin_id;
-}
-
-void PluginExceptionsTableModel::Observe(int type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- if (!updates_disabled_)
- ReloadSettings();
-}
-
-void PluginExceptionsTableModel::ClearSettings() {
- settings_.clear();
- groups_.clear();
- row_counts_.clear();
- resources_.clear();
-}
-
-void PluginExceptionsTableModel::GetPlugins(
- std::vector<webkit::npapi::PluginGroup>* plugin_groups) {
- webkit::npapi::PluginList::Singleton()->GetPluginGroups(false, plugin_groups);
-}
-
-void PluginExceptionsTableModel::LoadSettings() {
- int group_id = 0;
- std::vector<webkit::npapi::PluginGroup> plugins;
- GetPlugins(&plugins);
- for (size_t i = 0; i < plugins.size(); ++i) {
- std::string plugin = plugins[i].identifier();
- HostContentSettingsMap::SettingsForOneType settings;
- map_->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS,
- plugin,
- &settings);
- HostContentSettingsMap::SettingsForOneType otr_settings;
- if (otr_map_) {
- otr_map_->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS,
- plugin,
- &otr_settings);
- }
- string16 title = plugins[i].GetGroupName();
- for (HostContentSettingsMap::SettingsForOneType::iterator setting_it =
- settings.begin();
- setting_it != settings.end(); ++setting_it) {
- SettingsEntry entry = {
- setting_it->a,
- group_id,
- setting_it->c,
- false
- };
- settings_.push_back(entry);
- }
- for (HostContentSettingsMap::SettingsForOneType::iterator setting_it =
- otr_settings.begin();
- setting_it != otr_settings.end(); ++setting_it) {
- SettingsEntry entry = {
- setting_it->a,
- group_id,
- setting_it->c,
- true
- };
- settings_.push_back(entry);
- }
- int num_plugins = settings.size() + otr_settings.size();
- if (num_plugins > 0) {
- Group group = { title, group_id++ };
- groups_.push_back(group);
- resources_.push_back(plugin);
- row_counts_.push_back(num_plugins);
- }
- }
-}
-
-void PluginExceptionsTableModel::ReloadSettings() {
- ClearSettings();
- LoadSettings();
-
- if (observer_)
- observer_->OnModelChanged();
-}
« no previous file with comments | « chrome/browser/plugin_exceptions_table_model.h ('k') | chrome/browser/plugin_exceptions_table_model_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698