Index: chrome/browser/managed_mode/managed_mode_url_filter.cc |
diff --git a/chrome/browser/managed_mode/managed_mode_url_filter.cc b/chrome/browser/managed_mode/managed_mode_url_filter.cc |
index a77e180d4b47ca9797b226bc147ddb66d0d9f0b6..321eebe65b14b863aba5ebe3c8e848dfcc705f58 100644 |
--- a/chrome/browser/managed_mode/managed_mode_url_filter.cc |
+++ b/chrome/browser/managed_mode/managed_mode_url_filter.cc |
@@ -159,7 +159,13 @@ scoped_ptr<ManagedModeURLFilter::Contents> LoadWhitelistsOnBlockingPoolThread( |
ManagedModeURLFilter::ManagedModeURLFilter() |
: ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)), |
default_behavior_(ALLOW), |
- contents_(new Contents()) { |
+ contents_(new Contents()), |
+ url_manual_list_allow_(new policy::URLBlacklist()), |
+ url_manual_list_block_(new policy::URLBlacklist()) { |
+ // Set empty manual lists in the begining. |
+ scoped_ptr<base::ListValue> whitelist(new base::ListValue()); |
+ scoped_ptr<base::ListValue> blacklist(new base::ListValue()); |
+ SetManualLists(whitelist.Pass(), blacklist.Pass()); |
// Detach from the current thread so we can be constructed on a different |
// thread than the one where we're used. |
DetachFromThread(); |
@@ -191,6 +197,14 @@ ManagedModeURLFilter::GetFilteringBehaviorForURL(const GURL& url) const { |
return ALLOW; |
#endif |
+ // TODO(sergiu): Find a less confusing way to do this. Options include |
+ // renaming the functions in policy::URLBlacklist or adding a function that |
+ // checks if the URL is allowed instead of blocked. |
+ if (!url_manual_list_allow_->IsURLBlocked(url)) |
+ return ALLOW; |
+ if (url_manual_list_block_->IsURLBlocked(url)) |
+ return BLOCK; |
+ |
// Check the list of URL patterns. |
std::set<URLMatcherConditionSet::ID> matching_ids = |
contents_->url_matcher.MatchURL(url); |
@@ -266,6 +280,46 @@ void ManagedModeURLFilter::SetFromPatterns( |
weak_ptr_factory_.GetWeakPtr(), continuation)); |
} |
+void ManagedModeURLFilter::SetManualLists(scoped_ptr<ListValue> whitelist, |
+ scoped_ptr<ListValue> blacklist){ |
+ DCHECK(CalledOnValidThread()); |
+ url_manual_list_block_.reset(new policy::URLBlacklist); |
+ url_manual_list_allow_.reset(new policy::URLBlacklist); |
+ url_manual_list_block_->Block(blacklist.get()); |
+ ListValue all_sites; |
+ all_sites.Append(new base::StringValue("*")); |
+ url_manual_list_allow_->Allow(whitelist.get()); |
+ url_manual_list_allow_->Block(&all_sites); |
+ |
+ // Debug |
+ DVLOG(1) << "Loaded whitelist: "; |
+ for (ListValue::iterator it = whitelist->begin(); |
+ it != whitelist->end(); ++it){ |
+ std::string item; |
+ (*it)->GetAsString(&item); |
+ DVLOG(1) << item; |
+ } |
+ DVLOG(1) << "Loaded blacklist: "; |
+ for (ListValue::iterator it = blacklist->begin(); |
+ it != blacklist->end(); ++it){ |
+ std::string item; |
+ (*it)->GetAsString(&item); |
+ DVLOG(1) << item; |
+ } |
+} |
+ |
+void ManagedModeURLFilter::AddURLPatternToManualList( |
+ const bool is_whitelist, |
+ const std::string& url) { |
+ DCHECK(CalledOnValidThread()); |
+ ListValue list; |
+ list.AppendString(url); |
+ if (is_whitelist) |
+ url_manual_list_allow_->Allow(&list); |
+ else |
+ url_manual_list_block_->Block(&list); |
+} |
+ |
void ManagedModeURLFilter::SetContents(const base::Closure& continuation, |
scoped_ptr<Contents> contents) { |
DCHECK(CalledOnValidThread()); |