Index: chrome/browser/managed_mode/managed_mode.cc |
diff --git a/chrome/browser/managed_mode/managed_mode.cc b/chrome/browser/managed_mode/managed_mode.cc |
index f1acb3bb8d0ffcd1605fd03699af7a25c2bd6c2c..df06143d263ce97945dbab6da4b6d54c3586283b 100644 |
--- a/chrome/browser/managed_mode/managed_mode.cc |
+++ b/chrome/browser/managed_mode/managed_mode.cc |
@@ -12,7 +12,9 @@ |
#include "chrome/browser/extensions/extension_system.h" |
#include "chrome/browser/managed_mode/managed_mode_site_list.h" |
#include "chrome/browser/managed_mode/managed_mode_url_filter.h" |
+#include "chrome/browser/policy/url_blacklist_manager.h" |
#include "chrome/browser/prefs/pref_service.h" |
+#include "chrome/browser/prefs/scoped_user_pref_update.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/browser_list.h" |
@@ -63,6 +65,26 @@ class ManagedMode::URLFilterContext { |
base::Bind(&base::DoNothing))); |
} |
+ void SetManualLists(scoped_ptr<ListValue> whitelist, |
+ scoped_ptr<ListValue> blacklist) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ task_runner_->PostTask(FROM_HERE, |
+ base::Bind(&ManagedModeURLFilter::SetManualLists, |
+ base::Unretained(&url_filter_), |
+ base::Passed(&whitelist), |
+ base::Passed(&blacklist))); |
+ } |
+ |
+ void AddURLPatternToManualList(bool is_whitelist, |
+ const std::string& url) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ task_runner_->PostTask(FROM_HERE, |
+ base::Bind(&ManagedModeURLFilter::AddURLPatternToManualList, |
+ base::Unretained(&url_filter_), |
+ is_whitelist, |
+ url)); |
+ } |
+ |
void ShutdownOnUIThread() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
bool result = task_runner_->DeleteSoon(FROM_HERE, this); |
@@ -91,6 +113,10 @@ void ManagedMode::RegisterUserPrefs(PrefServiceSyncable* prefs) { |
prefs->RegisterIntegerPref(prefs::kDefaultManagedModeFilteringBehavior, |
2, |
PrefServiceSyncable::UNSYNCABLE_PREF); |
+ prefs->RegisterListPref(prefs::kManagedModeWhitelist, |
+ PrefServiceSyncable::UNSYNCABLE_PREF); |
+ prefs->RegisterListPref(prefs::kManagedModeBlacklist, |
+ PrefServiceSyncable::UNSYNCABLE_PREF); |
} |
// static |
@@ -213,6 +239,78 @@ const ManagedModeURLFilter* ManagedMode::GetURLFilterForUIThreadImpl() { |
return ui_url_filter_context_->url_filter(); |
} |
+// static |
+void ManagedMode::AddToManualList(bool is_whitelist, |
+ const base::ListValue& list) { |
+ GetInstance()->AddToManualListImpl(is_whitelist, list); |
+} |
+ |
+void ManagedMode::AddToManualListImpl(bool is_whitelist, |
+ const base::ListValue& list) { |
+ if (!managed_profile_) |
+ return; |
+ |
+ ListPrefUpdate pref_update(managed_profile_->GetPrefs(), |
+ is_whitelist ? prefs::kManagedModeWhitelist : |
+ prefs::kManagedModeBlacklist); |
+ ListValue* pref_list = pref_update.Get(); |
+ |
+ for (size_t i = 0; i < list.GetSize(); ++i) { |
+ std::string url_pattern; |
+ list.GetString(i, &url_pattern); |
+ |
+ if (!IsInManualList(is_whitelist, url_pattern)) { |
+ pref_list->AppendString(url_pattern); |
+ AddURLPatternToManualList(is_whitelist, url_pattern); |
+ } |
+ } |
+} |
+ |
+// static |
+void ManagedMode::RemoveFromManualList(bool is_whitelist, |
+ const base::ListValue& list) { |
+ GetInstance()->RemoveFromManualListImpl(is_whitelist, list); |
+} |
+ |
+void ManagedMode::RemoveFromManualListImpl(bool is_whitelist, |
+ const base::ListValue& list) { |
+ ListPrefUpdate pref_update(managed_profile_->GetPrefs(), |
+ is_whitelist ? prefs::kManagedModeWhitelist : |
+ prefs::kManagedModeBlacklist); |
+ ListValue* pref_list = pref_update.Get(); |
+ |
+ for (size_t i = 0; i < list.GetSize(); ++i) { |
+ std::string pattern; |
+ size_t out_index; |
+ list.GetString(i, &pattern); |
+ StringValue value_to_remove(pattern); |
+ |
+ pref_list->Remove(value_to_remove, &out_index); |
+ } |
+} |
+ |
+// static |
+bool ManagedMode::IsInManualList(bool is_whitelist, |
+ const std::string& url_pattern) { |
+ return GetInstance()->IsInManualListImpl(is_whitelist, url_pattern); |
+} |
+ |
+bool ManagedMode::IsInManualListImpl(bool is_whitelist, |
+ const std::string& url_pattern) { |
+ StringValue pattern(url_pattern); |
+ const ListValue* list = managed_profile_->GetPrefs()->GetList( |
+ is_whitelist ? prefs::kManagedModeWhitelist : |
+ prefs::kManagedModeBlacklist); |
+ return list->Find(pattern) != list->end(); |
+} |
+ |
+// static |
+scoped_ptr<base::ListValue> ManagedMode::GetBlacklist() { |
+ return scoped_ptr<base::ListValue>( |
+ GetInstance()->managed_profile_->GetPrefs()->GetList( |
+ prefs::kManagedModeBlacklist)->DeepCopy()).Pass(); |
+} |
+ |
std::string ManagedMode::GetDebugPolicyProviderName() const { |
// Save the string space in official builds. |
#ifdef NDEBUG |
@@ -385,7 +483,7 @@ void ManagedMode::SetInManagedMode(Profile* newly_managed_profile) { |
g_browser_process->local_state()->SetBoolean(prefs::kInManagedMode, |
in_managed_mode); |
if (in_managed_mode) |
- UpdateWhitelist(); |
+ UpdateManualListsImpl(); |
// This causes the avatar and the profile menu to get updated. |
content::NotificationService::current()->Notify( |
@@ -412,7 +510,27 @@ void ManagedMode::OnDefaultFilteringBehaviorChanged() { |
ui_url_filter_context_->SetDefaultFilteringBehavior(behavior); |
} |
-void ManagedMode::UpdateWhitelist() { |
+// Static |
+void ManagedMode::UpdateManualLists() { |
+ GetInstance()->UpdateManualListsImpl(); |
+} |
+ |
+void ManagedMode::UpdateManualListsImpl() { |
io_url_filter_context_->LoadWhitelists(GetActiveSiteLists()); |
ui_url_filter_context_->LoadWhitelists(GetActiveSiteLists()); |
+ io_url_filter_context_->SetManualLists(GetWhitelist(), GetBlacklist()); |
+ ui_url_filter_context_->SetManualLists(GetWhitelist(), GetBlacklist()); |
+} |
+ |
+scoped_ptr<base::ListValue> ManagedMode::GetWhitelist() { |
+ return make_scoped_ptr( |
+ managed_profile_->GetPrefs()->GetList( |
+ prefs::kManagedModeWhitelist)->DeepCopy()); |
+} |
+ |
+void ManagedMode::AddURLPatternToManualList( |
+ bool is_whitelist, |
+ const std::string& url_pattern) { |
+ io_url_filter_context_->AddURLPatternToManualList(true, url_pattern); |
+ ui_url_filter_context_->AddURLPatternToManualList(true, url_pattern); |
} |