| Index: chrome/browser/user_data_manager.h
|
| ===================================================================
|
| --- chrome/browser/user_data_manager.h (revision 0)
|
| +++ chrome/browser/user_data_manager.h (revision 0)
|
| @@ -0,0 +1,149 @@
|
| +// Copyright (c) 2006-2008 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.
|
| +
|
| +// This class encapsulates the implementation of multiple profiles by using
|
| +// the user-data-dir functionality.
|
| +
|
| +#ifndef CHROME_BROWSER_USER_DATA_MANAGER_H_
|
| +#define CHROME_BROWSER_USER_DATA_MANAGER_H_
|
| +
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/ref_counted.h"
|
| +
|
| +class MessageLoop;
|
| +
|
| +// Provides an abstraction of profiles on top of the user data directory
|
| +// feature. Given the root of the user data directories, it provides
|
| +// functionality to enumerate the existing profiles and start Chrome in a
|
| +// given profile.
|
| +// Also holds a shared instance of its own for convenience though it's not a
|
| +// singleton class. The shared instance should be created by the main thread,
|
| +// then other threads can access and use the shared instance.
|
| +class UserDataManager {
|
| + public:
|
| + // Creates the shared instance of this class. This method is not thread-safe,
|
| + // so the shared instance should be created on the main thread.
|
| + static void Create();
|
| +
|
| + // Returns the shared instance. CreateInstance must be called before callling
|
| + // this method.
|
| + static UserDataManager* Get();
|
| +
|
| + // Creates a new instance with the given root folder for storing user data
|
| + // folders.
|
| + explicit UserDataManager(const std::wstring& user_data_root);
|
| +
|
| + ~UserDataManager();
|
| +
|
| + // Returns the name of the current profile.
|
| + std::wstring current_profile_name() const { return current_profile_name_; }
|
| +
|
| + // Returns whether the current profile is the default profile or not.
|
| + bool is_current_profile_default() const {
|
| + return is_current_profile_default_;
|
| + }
|
| +
|
| + // Populates the given vector with a list of all the profiles.
|
| + // This function should be called on the file thread.
|
| + void GetProfiles(std::vector<std::wstring>* profiles) const;
|
| +
|
| + // Creates a desktop shortcut for the given profile name.
|
| + // Returns false if the shortcut creation fails; true otherwise.
|
| + bool CreateDesktopShortcutForProfile(const std::wstring& profile_name) const;
|
| +
|
| + // Starts a new Chrome instance in the given profile name.
|
| + void LaunchChromeForProfile(const std::wstring& profile_name) const;
|
| +
|
| + // Starts a new Chrome instance in the profile with the given index. The
|
| + // index is zero based, and refers to the position of the profile in the
|
| + // list of profile names in alphabetical order.
|
| + // This method launches Chrome asynchornously since it enumerates profiles
|
| + // on a separate thread.
|
| + void LaunchChromeForProfile(int index) const;
|
| +
|
| + private:
|
| + // Gets the name of the profile from the name of the folder.
|
| + // Returns false if the folder does not correspond to a profile folder, true
|
| + // otherwise.
|
| + static bool GetProfileNameFromFolderName(const std::wstring& folder_name,
|
| + std::wstring* profile_name);
|
| +
|
| + // Returns the name of the folder from the name of the profile.
|
| + static std::wstring GetFolderNameFromProfileName(
|
| + const std::wstring& profile_name);
|
| +
|
| + // Returns the path of the user data folder for the given profile.
|
| + std::wstring GetUserDataFolderForProfile(
|
| + const std::wstring& profile_name) const;
|
| +
|
| + // Returns the command to start the app in the given profile.
|
| + std::wstring GetCommandForProfile(const std::wstring& profile_name) const;
|
| +
|
| + // Shared instance.
|
| + static UserDataManager* instance_;
|
| +
|
| + // Root folder.
|
| + std::wstring user_data_root_;
|
| +
|
| + // Current user data folder.
|
| + std::wstring current_folder_name_;
|
| +
|
| + // Whether the current profile is the default profile.
|
| + bool is_current_profile_default_;
|
| +
|
| + // Current profile name.
|
| + std::wstring current_profile_name_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(UserDataManager);
|
| +};
|
| +
|
| +// Helper class to enumerate the profiles asynchronously on the file thread.
|
| +// It calls the given delegate instance when the enumeration is complete.
|
| +// USAGE: Create an instance of the helper with a delegate instance, call the
|
| +// asynchronous method GetProfiles. The delegate instance will be called when
|
| +// enumerating profiles is done.
|
| +// IMPORTANT: It's the responsibility of the caller to call OnDelegateDeleted
|
| +// method when the delegate instance is deleted. Typically OnDelegateDeleted
|
| +// should be called in the destructor of the delegate. This is the way to
|
| +// tell the helper to not call the delegate when enumerating profiles is done.
|
| +class GetProfilesHelper
|
| + : public base::RefCountedThreadSafe<GetProfilesHelper> {
|
| + public:
|
| + // Interface the delegate classes should implement.
|
| + class Delegate {
|
| + public:
|
| + virtual void OnGetProfilesDone(
|
| + const std::vector<std::wstring>& profiles) = 0;
|
| + virtual ~Delegate() { }
|
| + };
|
| +
|
| + explicit GetProfilesHelper(Delegate* delegate);
|
| +
|
| + // Asynchronous call to get the list of profiles. Calls the delegate when done
|
| + // on either the given target loop or the message loop on which this function
|
| + // is called if target loop is NULL.
|
| + void GetProfiles(MessageLoop* target_loop);
|
| +
|
| + // Records that the delegate is deleted.
|
| + void OnDelegateDeleted();
|
| +
|
| + private:
|
| + // Helper to get the profiles from user data manager.
|
| + void GetProfilesFromManager();
|
| +
|
| + // Helper to invoke the delegate.
|
| + void InvokeDelegate(std::vector<std::wstring>* profiles);
|
| +
|
| + // Delegate to call.
|
| + Delegate* delegate_;
|
| + // Message loop to post tasks on completion of loading profiles.
|
| + MessageLoop* message_loop_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(GetProfilesHelper);
|
| +};
|
| +
|
| +#endif // CHROME_BROWSER_USER_DATA_MANAGER_H_
|
|
|
| Property changes on: chrome\browser\user_data_manager.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|