1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
|
/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsISupports.idl"
interface nsISimpleEnumerator;
interface nsIFile;
interface nsIToolkitProfile;
interface nsIProfileLock;
[scriptable, builtinclass, uuid(1947899b-f369-48fa-89da-f7c37bb1e6bc)]
interface nsIToolkitProfileService : nsISupports
{
/**
* Tests whether the profile lists on disk have changed since they were
* loaded. When this is true attempts to flush changes to disk will fail.
*/
[infallible] readonly attribute boolean isListOutdated;
/**
* When a downgrade is detected UI is presented to the user to ask how to
* proceed. These flags are used to pass some information to the UI.
*/
cenum downgradeUIFlags: 8 {
hasSync = 1,
};
/**
* When a downgrade is detected UI is presented to the user to ask how to
* proceed. These are the possible options the user can choose.
*/
cenum downgradeUIChoice: 8 {
quit = 0,
createNewProfile = 1,
};
cenum profileManagerResult: 8 {
exit = 0,
launchWithProfile = 1,
restart = 2,
};
[infallible] attribute boolean startWithLastProfile;
[infallible] readonly attribute nsISimpleEnumerator /*nsIToolkitProfile*/ profiles;
/**
* The current named nsIToolkitProfile selected at startup. This may be null
* if an unnamed profile was selected.
*
* The current root directory of this profile may not match the actual
* profile directory being used by this application and should not be used
* for determining where to store data. Use the `ProfD` directory service
* key instead.
*/
[infallible] readonly attribute nsIToolkitProfile currentProfile;
/**
* The default profile for this build.
* On startup this is the profile selected unless overridden by command line
* arguments or environment variables. Setting this will change the profile
* used by default the next time the application is started.
* Attempting to change the default may throw an exception on builds that do
* not support changing the default profile, such as developer edition.
*/
attribute nsIToolkitProfile defaultProfile;
/**
* Selects or creates a profile to use based on the profiles database, any
* environment variables and any command line arguments. Will not create
* a profile if aIsResetting is true. The profile is selected based on this
* order of preference:
* * Environment variables (set when restarting the application).
* * --profile command line argument.
* * --createprofile command line argument (this also causes the app to exit).
* * -p command line argument.
* * A new profile created if this is the first run of the application.
* * The default profile.
* aRootDir and aLocalDir are set to the data and local directories for the
* profile data. If a profile from the database was selected it will be
* returned in aProfile.
* This returns true if a new profile was created.
* This method is primarily for testing. It can be called only once.
*/
boolean selectStartupProfile(in Array<ACString> aArgv,
in boolean aIsResetting, in AUTF8String aUpdateChannel,
in AUTF8String aLegacyInstallHash,
out nsIFile aRootDir, out nsIFile aLocalDir,
out nsIToolkitProfile aProfile);
/**
* Get a profile by name. This is mainly for use by the -P
* commandline flag.
*
* @param aName The profile name to find.
*/
nsIToolkitProfile getProfileByName(in AUTF8String aName);
/**
* Get a profile by directory. Finds a profile with the matching root directory
*
* @param aRootDir The root directory to match against.
* @param aLocalDir And optional local directory to also match against.
*/
nsIToolkitProfile getProfileByDir(in nsIFile aRootDir, [optional] in nsIFile aLocalDir);
/**
* Create a new profile.
*
* The profile temporary directory will be chosen based on where the
* profile directory is located.
*
* If a profile with the given name already exists it will be returned
* instead of creating a new profile.
*
* @param aRootDir
* The profile directory. May be null, in which case a suitable
* default will be chosen based on the profile name.
* @param aName
* The profile name.
*/
nsIToolkitProfile createProfile(in nsIFile aRootDir,
in AUTF8String aName);
/**
* Create a new profile with a unique name.
*
* As above however the name given will be altered to make it a unique
* profile name.
*
* @param aRootDir
* The profile directory. May be null, in which case a suitable
* default will be chosen based on the profile name.
* @param aNamePrefix
* The prefix to use for the profile name. If unused this will be
* used as the profile name otherwise additional characters will be
* added to make the name unique.
*/
nsIToolkitProfile createUniqueProfile(in nsIFile aRootDir,
in AUTF8String aNamePrefix);
/**
* Returns the number of profiles.
* @return the number of profiles.
*/
[infallible] readonly attribute unsigned long profileCount;
/**
* Flush the profiles list file. This will fail with
* NS_ERROR_DATABASE_CHANGED if the files on disk have changed since the
* profiles were loaded. Should not be called outside of startup.
*/
void flush();
/**
* Flushes the profiles list file on a background thread after acquiring the
* startup lock. Like `flush` this will fail with NS_ERROR_DATABASE_CHANGED
* if the files on disk have changed since the profiles were loaded.
* It is safe to call this while a previous flush is still in progress. The
* promise returned will resolve when the last call to flush completes.
*/
[implicit_jscontext]
Promise asyncFlush();
/**
* Flushes the mutable data about the current profile to disk on a
* background thread after acquiring the startup lock. Unlike other flushing
* methods this can usually succeed even if the files on disk have changed
* since the profiles were loaded.
* It is safe to call this while a previous flush is still in progress. The
* promise returned will resolve when the last call to flush completes.
*/
[implicit_jscontext]
Promise asyncFlushCurrentProfile();
/**
* Removes profile directories from disk. Will wait for up to aTimeout
* seconds to acquire the profile lock. aLocalDir can be null in which case
* it is calculated from the root directory.
*/
[implicit_jscontext]
Promise removeProfileFilesByPath(in nsIFile aRootDir, in nsIFile aLocalDir,
in unsigned long aTimeout);
};
%{C++
#define NS_PROFILESERVICE_CONTRACTID "@mozilla.org/toolkit/profile-service;1"
%}
|