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

Unified Diff: chrome/browser/user_data_manager.h

Issue 12895: Chromium-MultiProfile-Prototype... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years 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/dom_ui/new_tab_ui.cc ('k') | chrome/browser/user_data_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « chrome/browser/dom_ui/new_tab_ui.cc ('k') | chrome/browser/user_data_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698