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

Side by Side Diff: chrome/browser/managed_mode/managed_mode.cc

Issue 11826059: Add ManagedUserService for profile-specific managed user data. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: win fix Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/managed_mode/managed_mode.h" 5 #include "chrome/browser/managed_mode/managed_mode.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/prefs/public/pref_change_registrar.h" 8 #include "base/prefs/public/pref_change_registrar.h"
9 #include "base/sequenced_task_runner.h" 9 #include "base/sequenced_task_runner.h"
10 #include "chrome/browser/browser_process.h" 10 #include "chrome/browser/browser_process.h"
11 #include "chrome/browser/extensions/extension_service.h"
12 #include "chrome/browser/extensions/extension_system.h"
13 #include "chrome/browser/managed_mode/managed_mode_site_list.h" 11 #include "chrome/browser/managed_mode/managed_mode_site_list.h"
14 #include "chrome/browser/managed_mode/managed_mode_url_filter.h" 12 #include "chrome/browser/managed_mode/managed_mode_url_filter.h"
15 #include "chrome/browser/policy/url_blacklist_manager.h" 13 #include "chrome/browser/policy/url_blacklist_manager.h"
16 #include "chrome/browser/prefs/pref_service.h" 14 #include "chrome/browser/prefs/pref_service.h"
17 #include "chrome/browser/prefs/scoped_user_pref_update.h"
18 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/ui/browser.h" 16 #include "chrome/browser/ui/browser.h"
20 #include "chrome/browser/ui/browser_list.h" 17 #include "chrome/browser/ui/browser_list.h"
21 #include "chrome/browser/ui/browser_window.h" 18 #include "chrome/browser/ui/browser_window.h"
22 #include "chrome/common/chrome_notification_types.h" 19 #include "chrome/common/chrome_notification_types.h"
23 #include "chrome/common/chrome_switches.h" 20 #include "chrome/common/chrome_switches.h"
24 #include "chrome/common/extensions/extension_set.h"
25 #include "chrome/common/pref_names.h" 21 #include "chrome/common/pref_names.h"
26 #include "content/public/browser/browser_thread.h" 22 #include "content/public/browser/browser_thread.h"
27 #include "content/public/browser/notification_service.h" 23 #include "content/public/browser/notification_service.h"
28 #include "grit/generated_resources.h" 24 #include "grit/generated_resources.h"
29 #include "ui/base/l10n/l10n_util.h"
30 25
31 using content::BrowserThread; 26 using content::BrowserThread;
32 27
33 // A bridge from ManagedMode (which lives on the UI thread) to
34 // ManagedModeURLFilter (which might live on a different thread).
35 class ManagedMode::URLFilterContext {
36 public:
37 explicit URLFilterContext(
38 scoped_refptr<base::SequencedTaskRunner> task_runner)
39 : task_runner_(task_runner) {}
40 ~URLFilterContext() {}
41
42 ManagedModeURLFilter* url_filter() {
43 DCHECK(task_runner_->RunsTasksOnCurrentThread());
44 return &url_filter_;
45 }
46
47 void SetDefaultFilteringBehavior(
48 ManagedModeURLFilter::FilteringBehavior behavior) {
49 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
50 // Because ManagedMode is a singleton, we can pass the pointer to
51 // |url_filter_| unretained.
52 task_runner_->PostTask(
53 FROM_HERE,
54 base::Bind(&ManagedModeURLFilter::SetDefaultFilteringBehavior,
55 base::Unretained(&url_filter_),
56 behavior));
57 }
58
59 void LoadWhitelists(ScopedVector<ManagedModeSiteList> site_lists) {
60 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
61 task_runner_->PostTask(FROM_HERE,
62 base::Bind(&ManagedModeURLFilter::LoadWhitelists,
63 base::Unretained(&url_filter_),
64 base::Passed(&site_lists)));
65 }
66
67 void SetManualLists(scoped_ptr<ListValue> whitelist,
68 scoped_ptr<ListValue> blacklist) {
69 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
70 task_runner_->PostTask(FROM_HERE,
71 base::Bind(&ManagedModeURLFilter::SetManualLists,
72 base::Unretained(&url_filter_),
73 base::Passed(&whitelist),
74 base::Passed(&blacklist)));
75 }
76
77 void AddURLPatternToManualList(bool is_whitelist,
78 const std::string& url) {
79 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
80 task_runner_->PostTask(FROM_HERE,
81 base::Bind(&ManagedModeURLFilter::AddURLPatternToManualList,
82 base::Unretained(&url_filter_),
83 is_whitelist,
84 url));
85 }
86
87 void ShutdownOnUIThread() {
88 if (task_runner_->RunsTasksOnCurrentThread()) {
89 delete this;
90 return;
91 }
92 bool result = task_runner_->DeleteSoon(FROM_HERE, this);
93 DCHECK(result);
94 }
95
96 private:
97 ManagedModeURLFilter url_filter_;
98 scoped_refptr<base::SequencedTaskRunner> task_runner_;
99
100 DISALLOW_COPY_AND_ASSIGN(URLFilterContext);
101 };
102
103 // static 28 // static
104 ManagedMode* ManagedMode::GetInstance() { 29 ManagedMode* ManagedMode::GetInstance() {
105 return Singleton<ManagedMode, LeakySingletonTraits<ManagedMode> >::get(); 30 return Singleton<ManagedMode, LeakySingletonTraits<ManagedMode> >::get();
106 } 31 }
107 32
108 // static 33 // static
109 void ManagedMode::RegisterPrefs(PrefServiceSimple* prefs) { 34 void ManagedMode::RegisterPrefs(PrefServiceSimple* prefs) {
110 prefs->RegisterBooleanPref(prefs::kInManagedMode, false); 35 prefs->RegisterBooleanPref(prefs::kInManagedMode, false);
111 } 36 }
112 37
113 // static 38 // static
114 void ManagedMode::RegisterUserPrefs(PrefServiceSyncable* prefs) {
115 prefs->RegisterIntegerPref(prefs::kDefaultManagedModeFilteringBehavior,
116 2,
117 PrefServiceSyncable::UNSYNCABLE_PREF);
118 prefs->RegisterListPref(prefs::kManagedModeWhitelist,
119 PrefServiceSyncable::UNSYNCABLE_PREF);
120 prefs->RegisterListPref(prefs::kManagedModeBlacklist,
121 PrefServiceSyncable::UNSYNCABLE_PREF);
122 }
123
124 // static
125 void ManagedMode::Init(Profile* profile) { 39 void ManagedMode::Init(Profile* profile) {
126 GetInstance()->InitImpl(profile); 40 GetInstance()->InitImpl(profile);
127 } 41 }
128 42
129 void ManagedMode::InitImpl(Profile* profile) { 43 void ManagedMode::InitImpl(Profile* profile) {
130 DCHECK(g_browser_process); 44 DCHECK(g_browser_process);
131 DCHECK(g_browser_process->local_state()); 45 DCHECK(g_browser_process->local_state());
132 46
133 Profile* original_profile = profile->GetOriginalProfile(); 47 Profile* original_profile = profile->GetOriginalProfile();
134 // Set the value directly in the PrefService instead of using 48 // Set the value directly in the PrefService instead of using
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 void ManagedMode::LeaveManagedMode() { 130 void ManagedMode::LeaveManagedMode() {
217 GetInstance()->LeaveManagedModeImpl(); 131 GetInstance()->LeaveManagedModeImpl();
218 } 132 }
219 133
220 void ManagedMode::LeaveManagedModeImpl() { 134 void ManagedMode::LeaveManagedModeImpl() {
221 bool confirmed = PlatformConfirmLeave(); 135 bool confirmed = PlatformConfirmLeave();
222 if (confirmed) 136 if (confirmed)
223 SetInManagedMode(NULL); 137 SetInManagedMode(NULL);
224 } 138 }
225 139
226 // static
227 const ManagedModeURLFilter* ManagedMode::GetURLFilterForIOThread() {
228 return GetInstance()->GetURLFilterForIOThreadImpl();
229 }
230
231 // static
232 const ManagedModeURLFilter* ManagedMode::GetURLFilterForUIThread() {
233 return GetInstance()->GetURLFilterForUIThreadImpl();
234 }
235
236 ManagedModeURLFilter* ManagedMode::GetURLFilterForIOThreadImpl() {
237 return io_url_filter_context_->url_filter();
238 }
239
240 ManagedModeURLFilter* ManagedMode::GetURLFilterForUIThreadImpl() {
241 return ui_url_filter_context_->url_filter();
242 }
243
244 // static
245 void ManagedMode::AddToManualList(bool is_whitelist,
246 const base::ListValue& list) {
247 GetInstance()->AddToManualListImpl(is_whitelist, list);
248 }
249
250 void ManagedMode::AddToManualListImpl(bool is_whitelist,
251 const base::ListValue& list) {
252 if (!managed_profile_)
253 return;
254
255 ListPrefUpdate pref_update(managed_profile_->GetPrefs(),
256 is_whitelist ? prefs::kManagedModeWhitelist :
257 prefs::kManagedModeBlacklist);
258 ListValue* pref_list = pref_update.Get();
259
260 for (size_t i = 0; i < list.GetSize(); ++i) {
261 std::string url_pattern;
262 list.GetString(i, &url_pattern);
263
264 if (!IsInManualList(is_whitelist, url_pattern)) {
265 pref_list->AppendString(url_pattern);
266 AddURLPatternToManualList(is_whitelist, url_pattern);
267 }
268 }
269 }
270
271 // static
272 void ManagedMode::RemoveFromManualList(bool is_whitelist,
273 const base::ListValue& list) {
274 GetInstance()->RemoveFromManualListImpl(is_whitelist, list);
275 }
276
277 void ManagedMode::RemoveFromManualListImpl(bool is_whitelist,
278 const base::ListValue& list) {
279 ListPrefUpdate pref_update(managed_profile_->GetPrefs(),
280 is_whitelist ? prefs::kManagedModeWhitelist :
281 prefs::kManagedModeBlacklist);
282 ListValue* pref_list = pref_update.Get();
283
284 for (size_t i = 0; i < list.GetSize(); ++i) {
285 std::string pattern;
286 size_t out_index;
287 list.GetString(i, &pattern);
288 StringValue value_to_remove(pattern);
289
290 pref_list->Remove(value_to_remove, &out_index);
291 }
292 }
293
294 // static
295 bool ManagedMode::IsInManualList(bool is_whitelist,
296 const std::string& url_pattern) {
297 return GetInstance()->IsInManualListImpl(is_whitelist, url_pattern);
298 }
299
300 bool ManagedMode::IsInManualListImpl(bool is_whitelist,
301 const std::string& url_pattern) {
302 StringValue pattern(url_pattern);
303 const ListValue* list = managed_profile_->GetPrefs()->GetList(
304 is_whitelist ? prefs::kManagedModeWhitelist :
305 prefs::kManagedModeBlacklist);
306 return list->Find(pattern) != list->end();
307 }
308
309 // static
310 scoped_ptr<base::ListValue> ManagedMode::GetBlacklist() {
311 return scoped_ptr<base::ListValue>(
312 GetInstance()->managed_profile_->GetPrefs()->GetList(
313 prefs::kManagedModeBlacklist)->DeepCopy()).Pass();
314 }
315
316 std::string ManagedMode::GetDebugPolicyProviderName() const {
317 // Save the string space in official builds.
318 #ifdef NDEBUG
319 NOTREACHED();
320 return std::string();
321 #else
322 return "Managed Mode";
323 #endif
324 }
325
326 bool ManagedMode::UserMayLoad(const extensions::Extension* extension,
327 string16* error) const {
328 string16 tmp_error;
329 if (ExtensionManagementPolicyImpl(&tmp_error))
330 return true;
331
332 // If the extension is already loaded, we allow it, otherwise we'd unload
333 // all existing extensions.
334 ExtensionService* extension_service =
335 extensions::ExtensionSystem::Get(managed_profile_)->extension_service();
336
337 // |extension_service| can be NULL in a unit test.
338 if (extension_service &&
339 extension_service->GetInstalledExtension(extension->id()))
340 return true;
341
342 if (error)
343 *error = tmp_error;
344 return false;
345 }
346
347 bool ManagedMode::UserMayModifySettings(const extensions::Extension* extension,
348 string16* error) const {
349 return ExtensionManagementPolicyImpl(error);
350 }
351
352 bool ManagedMode::ExtensionManagementPolicyImpl(string16* error) const {
353 if (!IsInManagedModeImpl())
354 return true;
355
356 if (error)
357 *error = l10n_util::GetStringUTF16(IDS_EXTENSIONS_LOCKED_MANAGED_MODE);
358 return false;
359 }
360
361 void ManagedMode::OnBrowserAdded(Browser* browser) { 140 void ManagedMode::OnBrowserAdded(Browser* browser) {
362 // Return early if we don't have any queued callbacks. 141 // Return early if we don't have any queued callbacks.
363 if (callbacks_.empty()) 142 if (callbacks_.empty())
364 return; 143 return;
365 144
366 DCHECK(managed_profile_); 145 DCHECK(managed_profile_);
367 if (browser->profile()->GetOriginalProfile() != managed_profile_) 146 if (browser->profile()->GetOriginalProfile() != managed_profile_)
368 FinalizeEnter(false); 147 FinalizeEnter(false);
369 } 148 }
370 149
371 void ManagedMode::OnBrowserRemoved(Browser* browser) { 150 void ManagedMode::OnBrowserRemoved(Browser* browser) {
372 // Return early if we don't have any queued callbacks. 151 // Return early if we don't have any queued callbacks.
373 if (callbacks_.empty()) 152 if (callbacks_.empty())
374 return; 153 return;
375 154
376 DCHECK(managed_profile_); 155 DCHECK(managed_profile_);
377 if (browser->profile()->GetOriginalProfile() == managed_profile_) { 156 if (browser->profile()->GetOriginalProfile() == managed_profile_) {
378 // Ignore closing browser windows that are in managed mode. 157 // Ignore closing browser windows that are in managed mode.
379 return; 158 return;
380 } 159 }
381 size_t count = browsers_to_close_.erase(browser); 160 size_t count = browsers_to_close_.erase(browser);
382 DCHECK_EQ(1u, count); 161 DCHECK_EQ(1u, count);
383 if (browsers_to_close_.empty()) 162 if (browsers_to_close_.empty())
384 FinalizeEnter(true); 163 FinalizeEnter(true);
385 } 164 }
386 165
387 ManagedMode::ManagedMode() 166 ManagedMode::ManagedMode() : managed_profile_(NULL) {
388 : managed_profile_(NULL),
389 io_url_filter_context_(
390 new URLFilterContext(
391 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO))),
392 ui_url_filter_context_(
393 new URLFilterContext(
394 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI))) {
395 BrowserList::AddObserver(this); 167 BrowserList::AddObserver(this);
396 } 168 }
397 169
398 ManagedMode::~ManagedMode() { 170 ManagedMode::~ManagedMode() {
399 // This class usually is a leaky singleton, so this destructor shouldn't be 171 // This class usually is a leaky singleton, so this destructor shouldn't be
400 // called. We still do some cleanup, in case we're owned by a unit test. 172 // called. We still do some cleanup, in case we're owned by a unit test.
401 BrowserList::RemoveObserver(this); 173 BrowserList::RemoveObserver(this);
402 DCHECK_EQ(0u, callbacks_.size()); 174 DCHECK_EQ(0u, callbacks_.size());
403 DCHECK_EQ(0u, browsers_to_close_.size()); 175 DCHECK_EQ(0u, browsers_to_close_.size());
404 io_url_filter_context_.release()->ShutdownOnUIThread();
405 ui_url_filter_context_.release()->ShutdownOnUIThread();
406 } 176 }
407 177
408 void ManagedMode::Observe(int type, 178 void ManagedMode::Observe(int type,
409 const content::NotificationSource& source, 179 const content::NotificationSource& source,
410 const content::NotificationDetails& details) { 180 const content::NotificationDetails& details) {
181 // Return early if we don't have any queued callbacks.
182 if (callbacks_.empty())
183 return;
184
411 switch (type) { 185 switch (type) {
412 case chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST: { 186 case chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST: {
413 if (!callbacks_.empty()) 187 FinalizeEnter(false);
414 FinalizeEnter(false);
415 return; 188 return;
416 } 189 }
417 case chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED: { 190 case chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED: {
418 Browser* browser = content::Source<Browser>(source).ptr(); 191 Browser* browser = content::Source<Browser>(source).ptr();
419 if (!callbacks_.empty() && browsers_to_close_.find(browser) != 192 if (browsers_to_close_.find(browser) != browsers_to_close_.end())
420 browsers_to_close_.end())
421 FinalizeEnter(false); 193 FinalizeEnter(false);
422 return; 194 return;
423 } 195 }
424 case chrome::NOTIFICATION_EXTENSION_LOADED:
425 case chrome::NOTIFICATION_EXTENSION_UNLOADED: {
426 if (!managed_profile_)
427 break;
428
429 const extensions::Extension* extension =
430 content::Details<const extensions::Extension>(details).ptr();
431 if (!extension->GetContentPackSiteList().empty())
432 UpdateManualListsImpl();
433
434 break;
435 }
436 default: 196 default:
437 NOTREACHED(); 197 NOTREACHED();
438 } 198 }
439 } 199 }
440 200
441 void ManagedMode::FinalizeEnter(bool result) { 201 void ManagedMode::FinalizeEnter(bool result) {
442 if (result) 202 if (result)
443 SetInManagedMode(managed_profile_); 203 SetInManagedMode(managed_profile_);
204
444 for (std::vector<EnterCallback>::iterator it = callbacks_.begin(); 205 for (std::vector<EnterCallback>::iterator it = callbacks_.begin();
445 it != callbacks_.end(); ++it) { 206 it != callbacks_.end(); ++it) {
446 it->Run(result); 207 it->Run(result);
447 } 208 }
448 callbacks_.clear(); 209 callbacks_.clear();
449 browsers_to_close_.clear(); 210 browsers_to_close_.clear();
450 registrar_.RemoveAll(); 211 registrar_.RemoveAll();
451 } 212 }
452 213
453 bool ManagedMode::PlatformConfirmEnter() { 214 bool ManagedMode::PlatformConfirmEnter() {
454 // TODO(bauerb): Show platform-specific confirmation dialog. 215 // TODO(bauerb): Show platform-specific confirmation dialog.
455 return true; 216 return true;
456 } 217 }
457 218
458 bool ManagedMode::PlatformConfirmLeave() { 219 bool ManagedMode::PlatformConfirmLeave() {
459 // TODO(bauerb): Show platform-specific confirmation dialog. 220 // TODO(bauerb): Show platform-specific confirmation dialog.
460 return true; 221 return true;
461 } 222 }
462 223
463 void ManagedMode::SetInManagedMode(Profile* newly_managed_profile) { 224 void ManagedMode::SetInManagedMode(Profile* newly_managed_profile) {
464 // Register the ManagementPolicy::Provider before changing the pref when
465 // setting it, and unregister it after changing the pref when clearing it,
466 // so pref observers see the correct ManagedMode state.
467 bool in_managed_mode = !!newly_managed_profile;
468 if (in_managed_mode) {
469 DCHECK(!managed_profile_ || managed_profile_ == newly_managed_profile);
470 extensions::ExtensionSystem::Get(
471 newly_managed_profile)->management_policy()->RegisterProvider(this);
472 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
473 content::Source<Profile>(newly_managed_profile));
474 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
475 content::Source<Profile>(newly_managed_profile));
476 pref_change_registrar_.reset(new PrefChangeRegistrar());
477 pref_change_registrar_->Init(newly_managed_profile->GetPrefs());
478 pref_change_registrar_->Add(
479 prefs::kDefaultManagedModeFilteringBehavior,
480 base::Bind(
481 &ManagedMode::OnDefaultFilteringBehaviorChanged,
482 base::Unretained(this)));
483 } else {
484 extensions::ExtensionSystem::Get(
485 managed_profile_)->management_policy()->UnregisterProvider(this);
486 registrar_.Remove(this, chrome::NOTIFICATION_EXTENSION_LOADED,
487 content::Source<Profile>(managed_profile_));
488 registrar_.Remove(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
489 content::Source<Profile>(managed_profile_));
490 pref_change_registrar_.reset();
491 }
492
493 managed_profile_ = newly_managed_profile; 225 managed_profile_ = newly_managed_profile;
494 ManagedModeURLFilter::FilteringBehavior behavior =
495 ManagedModeURLFilter::ALLOW;
496 if (in_managed_mode) {
497 int behavior_value = managed_profile_->GetPrefs()->GetInteger(
498 prefs::kDefaultManagedModeFilteringBehavior);
499 behavior = ManagedModeURLFilter::BehaviorFromInt(behavior_value);
500 }
501 io_url_filter_context_->SetDefaultFilteringBehavior(behavior);
502 ui_url_filter_context_->SetDefaultFilteringBehavior(behavior);
503 g_browser_process->local_state()->SetBoolean(prefs::kInManagedMode, 226 g_browser_process->local_state()->SetBoolean(prefs::kInManagedMode,
504 in_managed_mode); 227 !!newly_managed_profile);
505 if (in_managed_mode)
506 UpdateManualListsImpl();
507 228
508 // This causes the avatar and the profile menu to get updated. 229 // This causes the avatar and the profile menu to get updated.
509 content::NotificationService::current()->Notify( 230 content::NotificationService::current()->Notify(
510 chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, 231 chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED,
511 content::NotificationService::AllBrowserContextsAndSources(), 232 content::NotificationService::AllBrowserContextsAndSources(),
512 content::NotificationService::NoDetails()); 233 content::NotificationService::NoDetails());
513 } 234 }
514
515 ScopedVector<ManagedModeSiteList> ManagedMode::GetActiveSiteLists() {
516 DCHECK(managed_profile_);
517 ExtensionService* extension_service =
518 extensions::ExtensionSystem::Get(managed_profile_)->extension_service();
519 const ExtensionSet* extensions = extension_service->extensions();
520 ScopedVector<ManagedModeSiteList> site_lists;
521 for (ExtensionSet::const_iterator it = extensions->begin();
522 it != extensions->end(); ++it) {
523 const extensions::Extension* extension = *it;
524 if (!extension_service->IsExtensionEnabled(extension->id()))
525 continue;
526
527 ExtensionResource site_list = extension->GetContentPackSiteList();
528 if (!site_list.empty())
529 site_lists.push_back(new ManagedModeSiteList(extension->id(), site_list));
530 }
531
532 return site_lists.Pass();
533 }
534
535 void ManagedMode::OnDefaultFilteringBehaviorChanged() {
536 DCHECK(IsInManagedModeImpl());
537
538 int behavior_value = managed_profile_->GetPrefs()->GetInteger(
539 prefs::kDefaultManagedModeFilteringBehavior);
540 ManagedModeURLFilter::FilteringBehavior behavior =
541 ManagedModeURLFilter::BehaviorFromInt(behavior_value);
542 io_url_filter_context_->SetDefaultFilteringBehavior(behavior);
543 ui_url_filter_context_->SetDefaultFilteringBehavior(behavior);
544 }
545
546 // Static
547 void ManagedMode::UpdateManualLists() {
548 GetInstance()->UpdateManualListsImpl();
549 }
550
551 void ManagedMode::UpdateManualListsImpl() {
552 io_url_filter_context_->LoadWhitelists(GetActiveSiteLists());
553 ui_url_filter_context_->LoadWhitelists(GetActiveSiteLists());
554 io_url_filter_context_->SetManualLists(GetWhitelist(), GetBlacklist());
555 ui_url_filter_context_->SetManualLists(GetWhitelist(), GetBlacklist());
556 }
557
558 scoped_ptr<base::ListValue> ManagedMode::GetWhitelist() {
559 return make_scoped_ptr(
560 managed_profile_->GetPrefs()->GetList(
561 prefs::kManagedModeWhitelist)->DeepCopy());
562 }
563
564 void ManagedMode::AddURLPatternToManualList(
565 bool is_whitelist,
566 const std::string& url_pattern) {
567 io_url_filter_context_->AddURLPatternToManualList(true, url_pattern);
568 ui_url_filter_context_->AddURLPatternToManualList(true, url_pattern);
569 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698