| 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. | 
| -} | 
|  |