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

Unified Diff: chrome/browser/views/blocked_popup_container.cc

Issue 115149: Implement the popup blocking whitelist pref. This makes the whitelist actual... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 7 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/views/blocked_popup_container.cc
===================================================================
--- chrome/browser/views/blocked_popup_container.cc (revision 15670)
+++ chrome/browser/views/blocked_popup_container.cc (working copy)
@@ -21,6 +21,8 @@
#include "chrome/browser/profile.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/common/notification_service.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/common/pref_service.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "views/background.h"
@@ -221,7 +223,7 @@
}
void BlockedPopupContainerView::ExecuteCommand(int id) {
- DCHECK(id > 0);
+ DCHECK_GT(id, 0);
size_t id_size_t = static_cast<size_t>(id);
if (id_size_t > kImpossibleNumberOfPopups) {
// Decrement id since all index based commands have 1 added to them. (See
@@ -234,9 +236,15 @@
}
// static
+void BlockedPopupContainer::RegisterUserPrefs(PrefService* prefs) {
+ prefs->RegisterListPref(prefs::kPopupWhitelistedHosts);
+}
+
+// static
BlockedPopupContainer* BlockedPopupContainer::Create(
TabContents* owner, Profile* profile, const gfx::Point& initial_anchor) {
- BlockedPopupContainer* container = new BlockedPopupContainer(owner, profile);
+ BlockedPopupContainer* container =
+ new BlockedPopupContainer(owner, profile->GetPrefs());
container->Init(initial_anchor);
return container;
}
@@ -245,21 +253,33 @@
}
BlockedPopupContainer::BlockedPopupContainer(TabContents* owner,
- Profile* profile)
+ PrefService* prefs)
: Animation(kFramerate, NULL),
owner_(owner),
+ prefs_(prefs),
container_view_(NULL),
has_been_dismissed_(false),
in_show_animation_(false),
visibility_percentage_(0) {
+ // Copy whitelist pref into local member that's easier to use.
+ const ListValue* whitelist_pref =
+ prefs_->GetList(prefs::kPopupWhitelistedHosts);
+ // Careful: The returned value could be NULL if the pref has never been set.
+ if (whitelist_pref != NULL) {
+ for (ListValue::const_iterator i(whitelist_pref->begin());
+ i != whitelist_pref->end(); ++i) {
+ std::string host;
+ (*i)->GetAsString(&host);
+ whitelist_.insert(host);
+ }
+ }
}
void BlockedPopupContainer::AddTabContents(TabContents* tab_contents,
const gfx::Rect& bounds,
const std::string& host) {
- bool whitelisted = false; // TODO: Check if host is on whitelist.
-
// Show whitelisted popups immediately.
+ bool whitelisted = !!whitelist_.count(host);
if (whitelisted)
owner_->AddNewContents(tab_contents, NEW_POPUP, bounds, true, GURL());
@@ -293,7 +313,7 @@
if (i == popup_hosts_.end())
popup_hosts_[host] = whitelisted;
else
- DCHECK(!i->second); // This host was already reported as whitelisted!
+ DCHECK_EQ(whitelisted, i->second);
// Update UI.
container_view_->UpdateLabel();
@@ -364,9 +384,13 @@
const std::string& host = i->first;
bool should_whitelist = !i->second;
popup_hosts_[host] = should_whitelist;
- // TODO: Update whitelist pref.
+ ListValue* whitelist_pref =
+ prefs_->GetMutableList(prefs::kPopupWhitelistedHosts);
if (should_whitelist) {
+ whitelist_.insert(host);
+ whitelist_pref->Append(new StringValue(host));
+
// Open the popups in order.
for (size_t j = 0; j < blocked_popups_.size(); ) {
if (blocked_popups_[j].host == host)
@@ -375,6 +399,11 @@
++j;
}
} else {
+ // Remove from whitelist.
+ whitelist_.erase(host);
+ StringValue host_value(host);
+ whitelist_pref->Remove(&host_value);
+
for (UnblockedPopups::iterator i(unblocked_popups_.begin());
i != unblocked_popups_.end(); ) {
TabContents* tab_contents = i->first;

Powered by Google App Engine
This is Rietveld 408576698