NS_IMETHODIMP nsWindowsShellService::SetDefaultClient(bool aForAllUsers, uint16_t aApps) { nsAutoString appHelperPath; if (NS_FAILED(GetHelperPath(appHelperPath))) return NS_ERROR_FAILURE; nsAutoString params; if (aForAllUsers) { params.AppendLiteral(" /SetAsDefaultAppGlobal"); } else { params.AppendLiteral(" /SetAsDefaultAppUser"); if (aApps & nsIShellService::MAIL) params.AppendLiteral(" Mail"); if (aApps & nsIShellService::NEWS) params.AppendLiteral(" News"); } return LaunchHelper(appHelperPath, params); }
NS_IMETHODIMP nsWindowsShellService::ShortcutMaintenance() { nsresult rv; // Launch helper.exe so it can update the application user model ids on // shortcuts in the user's taskbar and start menu. This keeps older pinned // shortcuts grouped correctly after major updates. Note, we also do this // through the upgrade installer script, however, this is the only place we // have a chance to trap links created by users who do control the install/ // update process of the browser. nsCOMPtr<nsIWinTaskbar> taskbarInfo = do_GetService(NS_TASKBAR_CONTRACTID); if (!taskbarInfo) // If we haven't built with win7 sdk features, this fails. return NS_OK; // Avoid if this isn't Win7+ bool isSupported = false; taskbarInfo->GetAvailable(&isSupported); if (!isSupported) return NS_OK; nsAutoString appId; if (NS_FAILED(taskbarInfo->GetDefaultGroupId(appId))) return NS_ERROR_UNEXPECTED; NS_NAMED_LITERAL_CSTRING(prefName, "mail.taskbar.lastgroupid"); nsCOMPtr<nsIPrefService> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID); if (!prefs) return NS_ERROR_UNEXPECTED; nsCOMPtr<nsIPrefBranch> prefBranch; prefs->GetBranch(nullptr, getter_AddRefs(prefBranch)); if (!prefBranch) return NS_ERROR_UNEXPECTED; nsCOMPtr<nsISupportsString> prefString; rv = prefBranch->GetComplexValue(prefName.get(), NS_GET_IID(nsISupportsString), getter_AddRefs(prefString)); if (NS_SUCCEEDED(rv)) { nsAutoString version; prefString->GetData(version); if (!version.IsEmpty() && version.Equals(appId)) { // We're all good, get out of here. return NS_OK; } } // Update the version in prefs prefString = do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; prefString->SetData(appId); rv = prefBranch->SetComplexValue(prefName.get(), NS_GET_IID(nsISupportsString), prefString); if (NS_FAILED(rv)) { NS_WARNING("Couldn't set last user model id!"); return NS_ERROR_UNEXPECTED; } nsAutoString appHelperPath; if (NS_FAILED(GetHelperPath(appHelperPath))) return NS_ERROR_UNEXPECTED; nsAutoString params; params.AssignLiteral(" /UpdateShortcutAppUserModelIds"); return LaunchHelper(appHelperPath, params); }