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

Unified Diff: chrome/browser/managed_mode.cc

Issue 11027017: Move ManagedMode classes to chrome/browser/managed_mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync Created 8 years, 2 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
« no previous file with comments | « chrome/browser/managed_mode.h ('k') | chrome/browser/managed_mode/OWNERS » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/managed_mode.cc
diff --git a/chrome/browser/managed_mode.cc b/chrome/browser/managed_mode.cc
deleted file mode 100644
index 1053872e71aa94dd65298b60b232b520baefafa5..0000000000000000000000000000000000000000
--- a/chrome/browser/managed_mode.cc
+++ /dev/null
@@ -1,342 +0,0 @@
-// Copyright (c) 2012 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/managed_mode.h"
-
-#include "base/command_line.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_system.h"
-#include "chrome/browser/managed_mode_url_filter.h"
-#include "chrome/browser/prefs/pref_service.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_list.h"
-#include "chrome/browser/ui/browser_window.h"
-#include "chrome/common/chrome_notification_types.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/common/pref_names.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/notification_service.h"
-#include "grit/generated_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-
-using content::BrowserThread;
-
-// A bridge from ManagedMode (which lives on the UI thread) to
-// ManagedModeURLFilter (which lives on the IO thread).
-class ManagedMode::URLFilterContext {
- public:
- URLFilterContext() {}
- ~URLFilterContext() {}
-
- const ManagedModeURLFilter* url_filter() const {
- return &url_filter_;
- }
-
- void SetActive(bool in_managed_mode) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- // Because ManagedMode is a singleton, we can pass the pointer to
- // |url_filter_| unretained.
- BrowserThread::PostTask(BrowserThread::IO,
- FROM_HERE,
- base::Bind(
- &ManagedModeURLFilter::SetActive,
- base::Unretained(&url_filter_),
- in_managed_mode));
- }
-
- void ShutdownOnUIThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, this);
- }
-
- private:
- ManagedModeURLFilter url_filter_;
-
- DISALLOW_COPY_AND_ASSIGN(URLFilterContext);
-};
-
-// static
-ManagedMode* ManagedMode::GetInstance() {
- return Singleton<ManagedMode, LeakySingletonTraits<ManagedMode> >::get();
-}
-
-// static
-void ManagedMode::RegisterPrefs(PrefService* prefs) {
- prefs->RegisterBooleanPref(prefs::kInManagedMode, false);
-}
-
-// static
-void ManagedMode::Init(Profile* profile) {
- GetInstance()->InitImpl(profile);
-}
-
-void ManagedMode::InitImpl(Profile* profile) {
- DCHECK(g_browser_process);
- DCHECK(g_browser_process->local_state());
-
- Profile* original_profile = profile->GetOriginalProfile();
- // Set the value directly in the PrefService instead of using
- // CommandLinePrefStore so we can change it at runtime.
- if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kNoManaged)) {
- SetInManagedMode(NULL);
- } else if (IsInManagedModeImpl() ||
- CommandLine::ForCurrentProcess()->HasSwitch(switches::kManaged)) {
- SetInManagedMode(original_profile);
- }
-}
-
-// static
-bool ManagedMode::IsInManagedMode() {
- return GetInstance()->IsInManagedModeImpl();
-}
-
-bool ManagedMode::IsInManagedModeImpl() const {
- // |g_browser_process| can be NULL during startup.
- if (!g_browser_process)
- return false;
- // Local State can be NULL during unit tests.
- if (!g_browser_process->local_state())
- return false;
- return g_browser_process->local_state()->GetBoolean(prefs::kInManagedMode);
-}
-
-// static
-void ManagedMode::EnterManagedMode(Profile* profile,
- const EnterCallback& callback) {
- GetInstance()->EnterManagedModeImpl(profile, callback);
-}
-
-void ManagedMode::EnterManagedModeImpl(Profile* profile,
- const EnterCallback& callback) {
- Profile* original_profile = profile->GetOriginalProfile();
- if (IsInManagedModeImpl()) {
- callback.Run(original_profile == managed_profile_);
- return;
- }
- if (!callbacks_.empty()) {
- // We are already in the process of entering managed mode, waiting for
- // browsers to close. Don't allow entering managed mode again for a
- // different profile, and queue the callback for the same profile.
- if (original_profile != managed_profile_)
- callback.Run(false);
- else
- callbacks_.push_back(callback);
- return;
- }
-
- if (!PlatformConfirmEnter()) {
- callback.Run(false);
- return;
- }
- // Close all other profiles.
- // At this point, we shouldn't be waiting for other browsers to close (yet).
- DCHECK_EQ(0u, browsers_to_close_.size());
- for (BrowserList::const_iterator i = BrowserList::begin();
- i != BrowserList::end(); ++i) {
- if ((*i)->profile()->GetOriginalProfile() != original_profile)
- browsers_to_close_.insert(*i);
- }
-
- if (browsers_to_close_.empty()) {
- SetInManagedMode(original_profile);
- callback.Run(true);
- return;
- }
- // Remember the profile we're trying to manage while we wait for other
- // browsers to close.
- managed_profile_ = original_profile;
- callbacks_.push_back(callback);
- registrar_.Add(this, chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST,
- content::NotificationService::AllSources());
- registrar_.Add(this, chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED,
- content::NotificationService::AllSources());
- for (std::set<Browser*>::const_iterator i = browsers_to_close_.begin();
- i != browsers_to_close_.end(); ++i) {
- (*i)->window()->Close();
- }
-}
-
-// static
-void ManagedMode::LeaveManagedMode() {
- GetInstance()->LeaveManagedModeImpl();
-}
-
-void ManagedMode::LeaveManagedModeImpl() {
- bool confirmed = PlatformConfirmLeave();
- if (confirmed)
- SetInManagedMode(NULL);
-}
-
-// static
-const ManagedModeURLFilter* ManagedMode::GetURLFilter() {
- return GetInstance()->GetURLFilterImpl();
-}
-
-const ManagedModeURLFilter* ManagedMode::GetURLFilterImpl() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- return url_filter_context_->url_filter();
-}
-
-std::string ManagedMode::GetDebugPolicyProviderName() const {
- // Save the string space in official builds.
-#ifdef NDEBUG
- NOTREACHED();
- return std::string();
-#else
- return "Managed Mode";
-#endif
-}
-
-bool ManagedMode::UserMayLoad(const extensions::Extension* extension,
- string16* error) const {
- return ExtensionManagementPolicyImpl(error);
-}
-
-bool ManagedMode::UserMayModifySettings(const extensions::Extension* extension,
- string16* error) const {
- return ExtensionManagementPolicyImpl(error);
-}
-
-bool ManagedMode::ExtensionManagementPolicyImpl(string16* error) const {
- if (!IsInManagedModeImpl())
- return true;
-
- if (error)
- *error = l10n_util::GetStringUTF16(IDS_EXTENSIONS_LOCKED_MANAGED_MODE);
- return false;
-}
-
-void ManagedMode::OnBrowserAdded(Browser* browser) {
- // Return early if we don't have any queued callbacks.
- if (callbacks_.empty())
- return;
-
- DCHECK(managed_profile_);
- if (browser->profile()->GetOriginalProfile() != managed_profile_)
- FinalizeEnter(false);
-}
-
-void ManagedMode::OnBrowserRemoved(Browser* browser) {
- // Return early if we don't have any queued callbacks.
- if (callbacks_.empty())
- return;
-
- DCHECK(managed_profile_);
- if (browser->profile()->GetOriginalProfile() == managed_profile_) {
- // Ignore closing browser windows that are in managed mode.
- return;
- }
- size_t count = browsers_to_close_.erase(browser);
- DCHECK_EQ(1u, count);
- if (browsers_to_close_.empty())
- FinalizeEnter(true);
-}
-
-ManagedMode::ManagedMode() : managed_profile_(NULL),
- url_filter_context_(new URLFilterContext) {
- BrowserList::AddObserver(this);
-}
-
-ManagedMode::~ManagedMode() {
- // This class usually is a leaky singleton, so this destructor shouldn't be
- // called. We still do some cleanup, in case we're owned by a unit test.
- BrowserList::RemoveObserver(this);
- DCHECK_EQ(0u, callbacks_.size());
- DCHECK_EQ(0u, browsers_to_close_.size());
- url_filter_context_.release()->ShutdownOnUIThread();
-}
-
-void ManagedMode::Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- // Return early if we don't have any queued callbacks.
- if (callbacks_.empty())
- return;
-
- switch (type) {
- case chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST: {
- FinalizeEnter(false);
- return;
- }
- case chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED: {
- Browser* browser = content::Source<Browser>(source).ptr();
- if (browsers_to_close_.find(browser) != browsers_to_close_.end())
- FinalizeEnter(false);
- return;
- }
- case chrome::NOTIFICATION_EXTENSION_LOADED:
- case chrome::NOTIFICATION_EXTENSION_UNLOADED: {
- if (managed_profile_)
- UpdateWhitelist();
- break;
- }
- default:
- NOTREACHED();
- }
-}
-
-void ManagedMode::FinalizeEnter(bool result) {
- if (result)
- SetInManagedMode(managed_profile_);
- for (std::vector<EnterCallback>::iterator it = callbacks_.begin();
- it != callbacks_.end(); ++it) {
- it->Run(result);
- }
- callbacks_.clear();
- browsers_to_close_.clear();
- registrar_.RemoveAll();
-}
-
-bool ManagedMode::PlatformConfirmEnter() {
- // TODO(bauerb): Show platform-specific confirmation dialog.
- return true;
-}
-
-bool ManagedMode::PlatformConfirmLeave() {
- // TODO(bauerb): Show platform-specific confirmation dialog.
- return true;
-}
-
-void ManagedMode::SetInManagedMode(Profile* newly_managed_profile) {
- // Register the ManagementPolicy::Provider before changing the pref when
- // setting it, and unregister it after changing the pref when clearing it,
- // so pref observers see the correct ManagedMode state.
- bool in_managed_mode = !!newly_managed_profile;
- if (in_managed_mode) {
- DCHECK(!managed_profile_ || managed_profile_ == newly_managed_profile);
- extensions::ExtensionSystem::Get(
- newly_managed_profile)->management_policy()->RegisterProvider(this);
- registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
- content::Source<Profile>(newly_managed_profile));
- registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
- content::Source<Profile>(newly_managed_profile));
- } else {
- extensions::ExtensionSystem::Get(
- managed_profile_)->management_policy()->UnregisterProvider(this);
- registrar_.Remove(this, chrome::NOTIFICATION_EXTENSION_LOADED,
- content::Source<Profile>(managed_profile_));
- registrar_.Remove(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
- content::Source<Profile>(managed_profile_));
- }
-
- managed_profile_ = newly_managed_profile;
- url_filter_context_->SetActive(in_managed_mode);
- g_browser_process->local_state()->SetBoolean(prefs::kInManagedMode,
- in_managed_mode);
- if (in_managed_mode)
- UpdateWhitelist();
-
- // This causes the avatar and the profile menu to get updated.
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED,
- content::NotificationService::AllBrowserContextsAndSources(),
- content::NotificationService::NoDetails());
-}
-
-void ManagedMode::UpdateWhitelist() {
- DCHECK(managed_profile_);
- // TODO(bauerb): Update URL filter with whitelist.
-}
« no previous file with comments | « chrome/browser/managed_mode.h ('k') | chrome/browser/managed_mode/OWNERS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698