Mypal portable mode

This commit is contained in:
K4sum1 2025-03-24 16:06:08 -07:00
commit 633ef1c426
24 changed files with 299 additions and 25 deletions

View file

@ -112,7 +112,7 @@ public:
private:
friend class nsToolkitProfile;
friend class nsToolkitProfileFactory;
friend nsresult NS_NewToolkitProfileService(nsIToolkitProfileService**);
friend nsresult NS_NewToolkitProfileService(nsIToolkitProfileService**,uint32_t);
nsToolkitProfileService() :
mDirty(false),
@ -126,7 +126,7 @@ private:
gService = nullptr;
}
nsresult Init();
nsresult Init(uint32_t portable);
nsresult CreateTimesInternal(nsIFile *profileDir);
@ -382,16 +382,30 @@ NS_IMPL_ISUPPORTS(nsToolkitProfileService,
nsIToolkitProfileService)
nsresult
nsToolkitProfileService::Init()
nsToolkitProfileService::Init(uint32_t portable)
{
NS_ASSERTION(gDirServiceProvider, "No dirserviceprovider!");
nsresult rv;
rv = gDirServiceProvider->GetUserAppDataDirectory(getter_AddRefs(mAppData));
NS_ENSURE_SUCCESS(rv, rv);
if(portable>0){
nsCOMPtr<nsIFile> appFile;
bool per = false;
rv = gDirServiceProvider->GetFile(XRE_EXECUTABLE_FILE, &per, getter_AddRefs(appFile));
NS_ENSURE_SUCCESS(rv, rv);
rv = appFile->GetParent(getter_AddRefs(mAppData));
NS_ENSURE_SUCCESS(rv, rv);
rv = appFile->GetParent(getter_AddRefs(mTempData));
NS_ENSURE_SUCCESS(rv, rv);
rv = gDirServiceProvider->GetUserLocalDataDirectory(getter_AddRefs(mTempData));
NS_ENSURE_SUCCESS(rv, rv);
}
else{
rv = gDirServiceProvider->GetUserAppDataDirectory(getter_AddRefs(mAppData));
NS_ENSURE_SUCCESS(rv, rv);
rv = gDirServiceProvider->GetUserLocalDataDirectory(getter_AddRefs(mTempData));
NS_ENSURE_SUCCESS(rv, rv);
}
rv = mAppData->Clone(getter_AddRefs(mListFile));
NS_ENSURE_SUCCESS(rv, rv);
@ -969,6 +983,13 @@ nsToolkitProfileService::Flush()
return NS_OK;
}
NS_IMETHODIMP
nsToolkitProfileService::Portable(uint32_t *aResult)
{
return gDirServiceProvider->Portable(aResult);
}
NS_IMPL_ISUPPORTS(nsToolkitProfileFactory, nsIFactory)
NS_IMETHODIMP
@ -981,7 +1002,7 @@ nsToolkitProfileFactory::CreateInstance(nsISupports* aOuter, const nsID& aIID,
nsCOMPtr<nsIToolkitProfileService> profileService =
nsToolkitProfileService::gService;
if (!profileService) {
nsresult rv = NS_NewToolkitProfileService(getter_AddRefs(profileService));
nsresult rv = NS_NewToolkitProfileService(getter_AddRefs(profileService),0);
if (NS_FAILED(rv))
return rv;
}
@ -1006,12 +1027,12 @@ NS_NewToolkitProfileFactory(nsIFactory* *aResult)
}
nsresult
NS_NewToolkitProfileService(nsIToolkitProfileService* *aResult)
NS_NewToolkitProfileService(nsIToolkitProfileService* *aResult,uint32_t portable)
{
nsToolkitProfileService* profileService = new nsToolkitProfileService();
if (!profileService)
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = profileService->Init();
nsresult rv = profileService->Init(portable);
if (NS_FAILED(rv)) {
NS_ERROR("nsToolkitProfileService::Init failed!");
delete profileService;