File: test_async_flush_current_profile.js

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 (87 lines) | stat: -rw-r--r-- 2,594 bytes parent folder | download | duplicates (2)
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
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

/*
 * Tests that asyncFlushCurrentProfile succeeds if we startup into
 * the default managed profile for a profile group (see bug 1963173).
 */
add_task(
  {
    skip_if: () => !AppConstants.MOZ_SELECTABLE_PROFILES,
  },
  async () => {
    let hash = xreDirProvider.getInstallHash();
    let defaultProfile = makeRandomProfileDir("default");
    let otherProfile = makeRandomProfileDir("other");
    let storeID = "b0bacafe";
    let profilesIni = {
      profiles: [
        {
          name: "default",
          path: defaultProfile.leafName,
          storeID,
          default: true,
        },
      ],
      installs: {
        [hash]: {
          default: defaultProfile.leafName,
        },
      },
    };
    writeProfilesIni(profilesIni);

    Services.prefs.setCharPref("toolkit.profiles.storeID", storeID);

    let service = getProfileService();
    selectStartupProfile();

    // Overwrite profiles.ini: simulate another instance launching, getting
    // app focus, and flushing to disk, overwriting the default path.
    let overwriteProfilesIni = () => {
      let updated = {
        profiles: [
          {
            name: "default",
            path: otherProfile.leafName,
            storeID,
            default: true,
          },
        ],
        installs: {
          [hash]: {
            default: otherProfile.leafName,
          },
        },
      };
      writeProfilesIni(updated);
      let profileData = readProfilesIni();
      Assert.equal(
        profileData.profiles[0].path,
        otherProfile.leafName,
        "Default path should now be the unmanaged profile path"
      );
    };
    overwriteProfilesIni();

    // Now, simulate the default profile receiving app focus: asyncFlush would
    // fail, since profiles.ini has been updated since startup, but we should
    // then fall back to asyncFlushCurrentProfile, which should succeed.
    let asyncRewriteDefault = async () => {
      await service.asyncFlushCurrentProfile();
      let profileData = readProfilesIni();

      Assert.equal(
        profileData.profiles[0].path,
        defaultProfile.leafName,
        "AsyncFlushCurrentProfile should have updated the path to the path of the current managed profile"
      );
    };
    await asyncRewriteDefault();

    // Just to be sure, repeat the other instance setting itself to default,
    // then this instance flushing over top of those changes.
    overwriteProfilesIni();
    await asyncRewriteDefault();
  }
);