| Index: chrome/browser/chromeos/contacts/contact_manager.cc
 | 
| diff --git a/chrome/browser/chromeos/contacts/contact_manager.cc b/chrome/browser/chromeos/contacts/contact_manager.cc
 | 
| deleted file mode 100644
 | 
| index 76694e0eb753fc8b7ddd64f40b543592bf3ba069..0000000000000000000000000000000000000000
 | 
| --- a/chrome/browser/chromeos/contacts/contact_manager.cc
 | 
| +++ /dev/null
 | 
| @@ -1,216 +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/chromeos/contacts/contact_manager.h"
 | 
| -
 | 
| -#include "base/logging.h"
 | 
| -#include "chrome/browser/browser_process.h"
 | 
| -#include "chrome/browser/chrome_notification_types.h"
 | 
| -#include "chrome/browser/chromeos/contacts/contact.pb.h"
 | 
| -#include "chrome/browser/chromeos/contacts/contact_manager_observer.h"
 | 
| -#include "chrome/browser/chromeos/contacts/contact_store.h"
 | 
| -#include "chrome/browser/chromeos/contacts/google_contact_store.h"
 | 
| -#include "chrome/browser/profiles/profile.h"
 | 
| -#include "chrome/browser/profiles/profile_manager.h"
 | 
| -#include "content/public/browser/browser_thread.h"
 | 
| -#include "content/public/browser/notification_service.h"
 | 
| -
 | 
| -using content::BrowserThread;
 | 
| -
 | 
| -namespace contacts {
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -// Singleton instance.
 | 
| -ContactManager* g_instance = NULL;
 | 
| -
 | 
| -}  // namespace
 | 
| -
 | 
| -// static
 | 
| -ContactManager* ContactManager::GetInstance() {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  DCHECK(g_instance);
 | 
| -  return g_instance;
 | 
| -}
 | 
| -
 | 
| -ContactManager::ContactManager()
 | 
| -    : profile_observers_deleter_(&profile_observers_),
 | 
| -      contact_store_factory_(new GoogleContactStoreFactory),
 | 
| -      contact_stores_deleter_(&contact_stores_),
 | 
| -      weak_ptr_factory_(this) {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  DCHECK(!g_instance);
 | 
| -  g_instance = this;
 | 
| -}
 | 
| -
 | 
| -ContactManager::~ContactManager() {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  DCHECK_EQ(g_instance, this);
 | 
| -  weak_ptr_factory_.InvalidateWeakPtrs();
 | 
| -  g_instance = NULL;
 | 
| -  for (ContactStoreMap::const_iterator it = contact_stores_.begin();
 | 
| -       it != contact_stores_.end(); ++it) {
 | 
| -    it->second->RemoveObserver(this);
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -void ContactManager::SetContactStoreForTesting(
 | 
| -    scoped_ptr<ContactStoreFactory> factory) {
 | 
| -  DCHECK(contact_stores_.empty());
 | 
| -  contact_store_factory_.swap(factory);
 | 
| -}
 | 
| -
 | 
| -void ContactManager::Init() {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  registrar_.Add(
 | 
| -      this,
 | 
| -      chrome::NOTIFICATION_PROFILE_CREATED,
 | 
| -      content::NotificationService::AllSources());
 | 
| -  registrar_.Add(
 | 
| -      this,
 | 
| -      chrome::NOTIFICATION_PROFILE_DESTROYED,
 | 
| -      content::NotificationService::AllSources());
 | 
| -
 | 
| -  // Notify about any already-existing profiles.
 | 
| -  std::vector<Profile*> profiles(
 | 
| -      g_browser_process->profile_manager()->GetLoadedProfiles());
 | 
| -  for (size_t i = 0; i < profiles.size(); ++i)
 | 
| -    HandleProfileCreated(profiles[i]);
 | 
| -}
 | 
| -
 | 
| -base::WeakPtr<ContactManagerInterface> ContactManager::GetWeakPtr() {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  return weak_ptr_factory_.GetWeakPtr();
 | 
| -}
 | 
| -
 | 
| -void ContactManager::AddObserver(ContactManagerObserver* observer,
 | 
| -                                 Profile* profile) {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  DCHECK(observer);
 | 
| -  DCHECK(profile);
 | 
| -  Observers* observers = GetObserversForProfile(profile, true);
 | 
| -  observers->AddObserver(observer);
 | 
| -}
 | 
| -
 | 
| -void ContactManager::RemoveObserver(ContactManagerObserver* observer,
 | 
| -                                    Profile* profile) {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  DCHECK(observer);
 | 
| -  DCHECK(profile);
 | 
| -  Observers* observers = GetObserversForProfile(profile, false);
 | 
| -  if (observers)
 | 
| -    observers->RemoveObserver(observer);
 | 
| -}
 | 
| -
 | 
| -scoped_ptr<ContactPointers> ContactManager::GetAllContacts(Profile* profile) {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  DCHECK(profile);
 | 
| -  scoped_ptr<ContactPointers> contacts(new ContactPointers);
 | 
| -  ContactStoreMap::const_iterator it = contact_stores_.find(profile);
 | 
| -  if (it != contact_stores_.end())
 | 
| -    it->second->AppendContacts(contacts.get());
 | 
| -  return contacts.Pass();
 | 
| -}
 | 
| -
 | 
| -const Contact* ContactManager::GetContactById(Profile* profile,
 | 
| -                                              const std::string& contact_id) {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  DCHECK(profile);
 | 
| -  ContactStoreMap::const_iterator it = contact_stores_.find(profile);
 | 
| -  return it != contact_stores_.end() ?
 | 
| -         it->second->GetContactById(contact_id) :
 | 
| -         NULL;
 | 
| -}
 | 
| -
 | 
| -void ContactManager::OnContactsUpdated(ContactStore* store) {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  for (ContactStoreMap::const_iterator it = contact_stores_.begin();
 | 
| -       it != contact_stores_.end(); ++it) {
 | 
| -    if (it->second == store) {
 | 
| -      Profile* profile = it->first;
 | 
| -      Observers* observers = GetObserversForProfile(profile, false);
 | 
| -      if (observers) {
 | 
| -        FOR_EACH_OBSERVER(ContactManagerObserver,
 | 
| -                          *observers,
 | 
| -                          OnContactsUpdated(profile));
 | 
| -      }
 | 
| -      return;
 | 
| -    }
 | 
| -  }
 | 
| -  NOTREACHED() << "Got update from unknown contact store " << store;
 | 
| -}
 | 
| -
 | 
| -void ContactManager::Observe(int type,
 | 
| -                             const content::NotificationSource& source,
 | 
| -                             const content::NotificationDetails& details) {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  switch (type) {
 | 
| -    case chrome::NOTIFICATION_PROFILE_CREATED:
 | 
| -      HandleProfileCreated(content::Source<Profile>(source).ptr());
 | 
| -      break;
 | 
| -    case chrome::NOTIFICATION_PROFILE_DESTROYED: {
 | 
| -      Profile* profile = content::Details<Profile>(details).ptr();
 | 
| -      if (profile)
 | 
| -        HandleProfileDestroyed(profile);
 | 
| -      break;
 | 
| -    }
 | 
| -    default:
 | 
| -      NOTREACHED() << "Unexpected notification " << type;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -ContactManager::Observers* ContactManager::GetObserversForProfile(
 | 
| -    Profile* profile,
 | 
| -    bool create) {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  ProfileObserversMap::const_iterator it = profile_observers_.find(profile);
 | 
| -  if (it != profile_observers_.end())
 | 
| -    return it->second;
 | 
| -  if (!create)
 | 
| -    return NULL;
 | 
| -
 | 
| -  Observers* observers = new Observers;
 | 
| -  profile_observers_[profile] = observers;
 | 
| -  return observers;
 | 
| -}
 | 
| -
 | 
| -void ContactManager::HandleProfileCreated(Profile* profile) {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  DCHECK(profile);
 | 
| -
 | 
| -  ContactStoreMap::iterator it = contact_stores_.find(profile);
 | 
| -  if (it != contact_stores_.end())
 | 
| -    return;
 | 
| -
 | 
| -  if (!contact_store_factory_->CanCreateContactStoreForProfile(profile))
 | 
| -    return;
 | 
| -
 | 
| -  VLOG(1) << "Adding profile " << profile->GetProfileName();
 | 
| -  ContactStore* store = contact_store_factory_->CreateContactStore(profile);
 | 
| -  DCHECK(store);
 | 
| -  store->AddObserver(this);
 | 
| -  store->Init();
 | 
| -  DCHECK_EQ(contact_stores_.count(profile), static_cast<size_t>(0));
 | 
| -  contact_stores_[profile] = store;
 | 
| -}
 | 
| -
 | 
| -void ContactManager::HandleProfileDestroyed(Profile* profile) {
 | 
| -  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| -  DCHECK(profile);
 | 
| -
 | 
| -  ContactStoreMap::iterator store_it = contact_stores_.find(profile);
 | 
| -  if (store_it != contact_stores_.end()) {
 | 
| -    store_it->second->RemoveObserver(this);
 | 
| -    delete store_it->second;
 | 
| -    contact_stores_.erase(store_it);
 | 
| -  }
 | 
| -
 | 
| -  ProfileObserversMap::iterator observer_it = profile_observers_.find(profile);
 | 
| -  if (observer_it != profile_observers_.end()) {
 | 
| -    delete observer_it->second;
 | 
| -    profile_observers_.erase(observer_it);
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -}  // namespace contacts
 | 
| 
 |