Bug 1122124 - fix default profile setting after reset, keep profile name, r=MattN

MozReview-Commit-ID: 9h1ktdUUVZH

--HG--
extra : rebase_source : aa82bd4048d5e3288d524caabbedcb9f5d20ff8a
This commit is contained in:
Gijs Kruitbosch 2016-05-10 10:09:46 +01:00
Родитель eca53451e1
Коммит c3347c9d19
2 изменённых файлов: 32 добавлений и 19 удалений

Просмотреть файл

@ -1,5 +1,6 @@
import os
import shutil
import time
from marionette_harness import MarionetteTestCase
@ -343,21 +344,22 @@ class TestFirefoxRefresh(MarionetteTestCase):
if self.reset_profile_path:
# Remove ourselves from profiles.ini
profileLeafName = os.path.basename(os.path.normpath(self.reset_profile_path))
self.runCode("""
let [salt, name] = arguments[0].split(".");
let name = arguments[0];
let profile = global.profSvc.getProfileByName(name);
profile.remove(false)
global.profSvc.flush();
""", script_args=[profileLeafName])
""", script_args=[self.profileNameToRemove])
# And delete all the files.
shutil.rmtree(self.reset_profile_path, ignore_errors=False, onerror=handleRemoveReadonly)
def doReset(self):
profileName = "marionette-test-profile-" + str(int(time.time() * 1000))
self.profileNameToRemove = profileName
self.runCode("""
// Ensure the current (temporary) profile is in profiles.ini:
let profD = Services.dirsvc.get("ProfD", Ci.nsIFile);
let profileName = "marionette-test-profile-" + Date.now();
let profileName = arguments[1];
let myProfile = global.profSvc.createProfile(profD, profileName);
global.profSvc.flush()
@ -375,7 +377,7 @@ class TestFirefoxRefresh(MarionetteTestCase):
env.set("MOZ_RESET_PROFILE_RESTART", "1");
env.set("XRE_PROFILE_PATH", arguments[0]);
env.set("XRE_PROFILE_NAME", profileName);
""", script_args=[self.marionette.instance.profile.profile])
""", script_args=[self.marionette.instance.profile.profile, profileName])
profileLeafName = os.path.basename(os.path.normpath(self.marionette.instance.profile.profile))

Просмотреть файл

@ -2143,17 +2143,20 @@ ShowProfileManager(nsIToolkitProfileService* aProfileSvc,
}
/**
* Set the currently running profile as the default/selected one.
* Get the currently running profile using its root directory.
*
* @param aProfileSvc The profile service
* @param aCurrentProfileRoot The root directory of the current profile.
* @return an error if aCurrentProfileRoot is not found or the profile could not
* be set as the default.
* @param aProfile Out-param that returns the profile object.
* @return an error if aCurrentProfileRoot is not found
*/
static nsresult
SetCurrentProfileAsDefault(nsIToolkitProfileService* aProfileSvc,
nsIFile* aCurrentProfileRoot)
GetCurrentProfile(nsIToolkitProfileService* aProfileSvc,
nsIFile* aCurrentProfileRoot,
nsIToolkitProfile** aProfile)
{
NS_ENSURE_ARG_POINTER(aProfileSvc);
NS_ENSURE_ARG_POINTER(aProfile);
nsCOMPtr<nsISimpleEnumerator> profiles;
nsresult rv = aProfileSvc->GetProfiles(getter_AddRefs(profiles));
@ -2169,7 +2172,8 @@ SetCurrentProfileAsDefault(nsIToolkitProfileService* aProfileSvc,
profile->GetRootDir(getter_AddRefs(profileRoot));
profileRoot->Equals(aCurrentProfileRoot, &foundMatchingProfile);
if (foundMatchingProfile) {
return aProfileSvc->SetSelectedProfile(profile);
profile.forget(aProfile);
return NS_OK;
}
rv = profiles->GetNext(getter_AddRefs(supports));
}
@ -4289,15 +4293,22 @@ XREMain::XRE_mainRun()
nsresult backupCreated = ProfileResetCleanup(profileBeingReset);
if (NS_FAILED(backupCreated)) NS_WARNING("Could not cleanup the profile that was reset");
// Set the new profile as the default after we're done cleaning up the old profile,
// iff that profile was already the default
if (profileWasSelected) {
// this is actually "broken" - see bug 1122124
rv = SetCurrentProfileAsDefault(mProfileSvc, mProfD);
if (NS_FAILED(rv)) NS_WARNING("Could not set current profile as the default");
nsCOMPtr<nsIToolkitProfile> newProfile;
rv = GetCurrentProfile(mProfileSvc, mProfD, getter_AddRefs(newProfile));
if (NS_SUCCEEDED(rv)) {
newProfile->SetName(gResetOldProfileName);
// Set the new profile as the default after we're done cleaning up the old profile,
// iff that profile was already the default
if (profileWasSelected) {
rv = mProfileSvc->SetDefaultProfile(newProfile);
if (NS_FAILED(rv)) NS_WARNING("Could not set current profile as the default");
}
} else {
NS_WARNING("Could not find current profile to set as default / change name.");
}
// Need to write out the fact that the profile has been removed and potentially
// that the selected/default profile changed.
// Need to write out the fact that the profile has been removed, the new profile
// renamed, and potentially that the selected/default profile changed.
mProfileSvc->Flush();
}
}