File: nsIToolkitProfileService.idl

package info (click to toggle)
firefox 147.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,683,484 kB
  • sloc: cpp: 7,607,246; javascript: 6,533,185; ansic: 3,775,227; python: 1,415,393; xml: 634,561; asm: 438,951; java: 186,241; sh: 62,752; makefile: 18,079; objc: 13,092; perl: 12,808; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10; exp: 6
file content (190 lines) | stat: -rw-r--r-- 7,488 bytes parent folder | download | duplicates (3)
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"
%}