Bug 1191250 - Defer showing the default browser prompt to 2nd run (and only show it a maximum of three times). r=jimm

This commit is contained in:
Jared Wein
2015-08-28 16:30:00 -04:00
parent 76f5daf206
commit c4afcb7809
6 changed files with 182 additions and 3 deletions

View File

@@ -976,17 +976,61 @@ nsWindowsShellService::SetDefaultBrowser(bool aClaimAllTypes, bool aForAllUsers)
nsCOMPtr<nsIPrefBranch> prefs(do_GetService(NS_PREFSERVICE_CONTRACTID));
if (prefs) {
(void) prefs->SetBoolPref(PREF_CHECKDEFAULTBROWSER, true);
// Reset the number of times the dialog should be shown
// before it is silenced.
(void) prefs->SetIntPref(PREF_DEFAULTBROWSERCHECKCOUNT, 0);
}
return rv;
}
NS_IMETHODIMP
nsWindowsShellService::GetShouldSkipCheckDefaultBrowser(bool* aResult)
{
NS_ENSURE_ARG_POINTER(aResult);
nsresult rv;
nsCOMPtr<nsIPrefBranch> prefs(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv));
if (NS_FAILED(rv)) {
return rv;
}
rv = prefs->GetBoolPref(PREF_SKIPDEFAULTBROWSERCHECK, aResult);
if (NS_FAILED(rv)) {
return rv;
}
if (*aResult) {
// Only skip the default browser check once. The next attempt in
// a new session should proceed.
return prefs->SetBoolPref(PREF_SKIPDEFAULTBROWSERCHECK, false);
}
int32_t defaultBrowserCheckCount;
rv = prefs->GetIntPref(PREF_DEFAULTBROWSERCHECKCOUNT,
&defaultBrowserCheckCount);
if (NS_FAILED(rv)) {
return rv;
}
if (defaultBrowserCheckCount < 3) {
*aResult = false;
return prefs->SetIntPref(PREF_DEFAULTBROWSERCHECKCOUNT,
defaultBrowserCheckCount + 1);
}
// Disable the default browser check after three attempts.
// Don't modify PREF_CHECKDEFAULTBROWSER since that is a
// user-initiated action and it shouldn't get re-enabled
// if it has been user disabled.
*aResult = true;
return rv;
}
NS_IMETHODIMP
nsWindowsShellService::GetShouldCheckDefaultBrowser(bool* aResult)
{
NS_ENSURE_ARG_POINTER(aResult);
// If we've already checked, the browser has been started and this is a
// If we've already checked, the browser has been started and this is a
// new window open, and we don't want to check again.
if (mCheckedThisSession) {
*aResult = false;
@@ -994,6 +1038,18 @@ nsWindowsShellService::GetShouldCheckDefaultBrowser(bool* aResult)
}
nsresult rv;
#ifndef RELEASE_BUILD
bool skipDefaultBrowserCheck;
rv = GetShouldSkipCheckDefaultBrowser(&skipDefaultBrowserCheck);
if (NS_FAILED(rv)) {
return rv;
}
if (skipDefaultBrowserCheck) {
*aResult = false;
return rv;
}
#endif
nsCOMPtr<nsIPrefBranch> prefs(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv));
if (NS_FAILED(rv)) {
return rv;