Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(393)

Unified Diff: chrome/browser/upgrade_detector_impl.cc

Issue 211543008: Show a modified outdated upgrade Bubble for non-enterprise users without auto-update (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Code review comments 1. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/upgrade_detector_impl.cc
diff --git a/chrome/browser/upgrade_detector_impl.cc b/chrome/browser/upgrade_detector_impl.cc
index f2934538ca6ecf1fe10ec032d6c30ab2a444841b..3e403eccf0e646e2d1ea2dbc852ef2aae9e6c90a 100644
--- a/chrome/browser/upgrade_detector_impl.cc
+++ b/chrome/browser/upgrade_detector_impl.cc
@@ -13,6 +13,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/memory/singleton.h"
#include "base/path_service.h"
+#include "base/prefs/pref_service.h"
#include "base/process/launch.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
@@ -23,10 +24,12 @@
#include "chrome/browser/google/google_util.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/chrome_version_info.h"
+#include "chrome/common/pref_names.h"
#include "content/public/browser/browser_thread.h"
#include "ui/base/resource/resource_bundle.h"
#if defined(OS_WIN)
+#include "base/win/win_util.h"
#include "chrome/installer/util/browser_distribution.h"
#include "chrome/installer/util/google_update_settings.h"
#include "chrome/installer/util/helper.h"
@@ -60,12 +63,18 @@ std::string CmdLineInterval() {
return cmd_line.GetSwitchValueASCII(switches::kCheckForUpdateIntervalSec);
}
+bool SimulatingOutdated() {
+ const CommandLine& cmd_line = *CommandLine::ForCurrentProcess();
+ return cmd_line.HasSwitch(switches::kSimulateOutdated) ||
+ cmd_line.HasSwitch(switches::kSimulateOutdatedNoAU);
+}
+
bool IsTesting() {
const CommandLine& cmd_line = *CommandLine::ForCurrentProcess();
return cmd_line.HasSwitch(switches::kSimulateUpgrade) ||
cmd_line.HasSwitch(switches::kCheckForUpdateIntervalSec) ||
cmd_line.HasSwitch(switches::kSimulateCriticalUpdate) ||
- cmd_line.HasSwitch(switches::kSimulateOutdated);
+ SimulatingOutdated();
}
// How often to check for an upgrade.
@@ -113,15 +122,22 @@ bool IsSystemInstall() {
// updates are allowed. It also identifies whether we are running an unstable
// channel.
void DetectUpdatability(const base::Closure& callback_task,
- bool* is_unstable_channel) {
+ bool* is_unstable_channel,
+ bool* is_auto_update_enabled) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
base::string16 app_guid = installer::GetAppGuidForUpdates(IsSystemInstall());
DCHECK(!app_guid.empty());
- if (GoogleUpdateSettings::AUTOMATIC_UPDATES ==
- GoogleUpdateSettings::GetAppUpdatePolicy(app_guid, NULL)) {
- CheckForUnstableChannel(callback_task, is_unstable_channel);
+ // Don't try to turn on autoupdate when we failed previously.
+ if (g_browser_process->local_state() &&
+ !g_browser_process->local_state()->GetBoolean(
+ prefs::kAttemptedToEnableAutoupdate)) {
+ *is_auto_update_enabled = GoogleUpdateSettings::AUTOMATIC_UPDATES ==
+ GoogleUpdateSettings::GetAppUpdatePolicy(app_guid, NULL);
}
+ // Don't show the update bubbles to entreprise users (i.e., on a domain).
+ if (!base::win::IsEnrolledToDomain())
+ CheckForUnstableChannel(callback_task, is_unstable_channel);
}
#endif // defined(OS_WIN)
@@ -130,7 +146,11 @@ void DetectUpdatability(const base::Closure& callback_task,
UpgradeDetectorImpl::UpgradeDetectorImpl()
: weak_factory_(this),
is_unstable_channel_(false),
+ is_auto_update_enabled_(true),
build_date_(base::GetBuildTime()) {
+ // Start tracking network time updates.
+ network_time_tracker_.Start();
+
CommandLine command_line(*CommandLine::ForCurrentProcess());
// The different command line switches that affect testing can't be used
// simultaneously, if they do, here's the precedence order, based on the order
@@ -139,7 +159,8 @@ UpgradeDetectorImpl::UpgradeDetectorImpl()
// switch from being taken into account.
// - kSimulateUpgrade supersedes critical or outdated upgrade switches.
// - kSimulateCriticalUpdate has precedence over kSimulateOutdated.
- // - kSimulateOutdated can work on its own, or with a specified date.
+ // - kSimulateOutdatedNoAU has precedence over kSimulateOutdated.
+ // - kSimulateOutdated[NoAu] can work on its own, or with a specified date.
robertshield 2014/03/26 20:37:18 drop the []
MAD 2014/03/26 21:21:10 Why? This is intended to say kSimulateOutdated and
robertshield 2014/03/26 21:45:09 Oh, sorry, for some reason I read it entirely as a
if (command_line.HasSwitch(switches::kDisableBackgroundNetworking))
return;
if (command_line.HasSwitch(switches::kSimulateUpgrade)) {
@@ -150,7 +171,7 @@ UpgradeDetectorImpl::UpgradeDetectorImpl()
UpgradeDetected(UPGRADE_AVAILABLE_CRITICAL);
return;
}
- if (command_line.HasSwitch(switches::kSimulateOutdated)) {
+ if (SimulatingOutdated()) {
// The outdated simulation can work without a value, which means outdated
// now, or with a value that must be a well formed date/time string that
// overrides the build date.
@@ -158,8 +179,14 @@ UpgradeDetectorImpl::UpgradeDetectorImpl()
// tracking moves off of the VariationsService, the "variations-server-url"
// command line switch must also be specified for the service to be
// available on non GOOGLE_CHROME_BUILD.
- std::string build_date = command_line.GetSwitchValueASCII(
- switches::kSimulateOutdated);
+ std::string switch_name;
+ if (command_line.HasSwitch(switches::kSimulateOutdatedNoAU)) {
+ is_auto_update_enabled_ = false;
+ switch_name = switches::kSimulateOutdatedNoAU;
+ } else {
+ switch_name = switches::kSimulateOutdated;
+ }
+ std::string build_date = command_line.GetSwitchValueASCII(switch_name);
base::Time maybe_build_time;
bool result = base::Time::FromString(build_date.c_str(), &maybe_build_time);
if (result && !maybe_build_time.is_null()) {
@@ -168,7 +195,9 @@ UpgradeDetectorImpl::UpgradeDetectorImpl()
StartTimerForUpgradeCheck();
} else {
// Without a valid date, we simulate that we are already outdated...
- UpgradeDetected(UPGRADE_NEEDED_OUTDATED_INSTALL);
+ UpgradeDetected(
+ is_auto_update_enabled_ ? UPGRADE_NEEDED_OUTDATED_INSTALL
+ : UPGRADE_NEEDED_OUTDATED_INSTALL_NO_AU);
}
return;
}
@@ -186,13 +215,16 @@ UpgradeDetectorImpl::UpgradeDetectorImpl()
BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
base::Bind(&DetectUpdatability,
start_upgrade_check_timer_task,
- &is_unstable_channel_));
+ &is_unstable_channel_,
+ &is_auto_update_enabled_));
#endif
#else
#if defined(OS_MACOSX)
// Only enable upgrade notifications if the updater (Keystone) is present.
- if (!keystone_glue::KeystoneEnabled())
+ if (!keystone_glue::KeystoneEnabled()) {
+ is_auto_update_enabled_ = false;
return;
+ }
#elif defined(OS_POSIX)
// Always enable upgrade notifications regardless of branding.
#else
@@ -203,9 +235,6 @@ UpgradeDetectorImpl::UpgradeDetectorImpl()
base::Bind(&CheckForUnstableChannel,
start_upgrade_check_timer_task,
&is_unstable_channel_));
-
- // Start tracking network time updates.
- network_time_tracker_.Start();
#endif
}
@@ -315,12 +344,10 @@ void UpgradeDetectorImpl::CheckForUpgrade() {
}
bool UpgradeDetectorImpl::DetectOutdatedInstall() {
- // Only enable the outdated install check if we are running the trial for it,
- // unless we are simulating an outdated isntall.
- static bool simulate_outdated = CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kSimulateOutdated);
+ // Don't show the bubble if we have a brand code that is NOT organic, unless
+ // an outdated build is being simulated by command line switches.
+ static bool simulate_outdated = SimulatingOutdated();
if (!simulate_outdated) {
- // Also don't show the bubble if we have a brand code that is NOT organic.
std::string brand;
if (google_util::GetBrand(&brand) && !google_util::IsOrganic(brand))
return false;
@@ -331,7 +358,9 @@ bool UpgradeDetectorImpl::DetectOutdatedInstall() {
if (!network_time_tracker_.GetNetworkTime(base::TimeTicks::Now(),
&network_time,
&uncertainty)) {
- return false;
+ // When network time has not been initialized yet, simply rely on the
+ // machine's current time.
+ network_time = base::Time::Now();
}
if (network_time.is_null() || build_date_.is_null() ||
@@ -342,7 +371,9 @@ bool UpgradeDetectorImpl::DetectOutdatedInstall() {
if (network_time - build_date_ >
base::TimeDelta::FromDays(kOutdatedBuildAgeInDays)) {
- UpgradeDetected(UPGRADE_NEEDED_OUTDATED_INSTALL);
+ UpgradeDetected(is_auto_update_enabled_ ?
+ UPGRADE_NEEDED_OUTDATED_INSTALL :
+ UPGRADE_NEEDED_OUTDATED_INSTALL_NO_AU);
return true;
}
// If we simlated an outdated install with a date, we don't want to keep

Powered by Google App Engine
This is Rietveld 408576698