| Index: chrome/browser/chromeos/upgrade_detector_chromeos.cc
|
| diff --git a/chrome/browser/chromeos/upgrade_detector_chromeos.cc b/chrome/browser/chromeos/upgrade_detector_chromeos.cc
|
| index 7b22f9214053679f6c8176cec8a5f8b2da59ce6e..546558429d9eeafe6bb29f3c6b61046bfe50f617 100644
|
| --- a/chrome/browser/chromeos/upgrade_detector_chromeos.cc
|
| +++ b/chrome/browser/chromeos/upgrade_detector_chromeos.cc
|
| @@ -6,6 +6,10 @@
|
|
|
| #include "base/memory/singleton.h"
|
| #include "chromeos/dbus/dbus_thread_manager.h"
|
| +#include "chromeos/dbus/update_engine_client.h"
|
| +
|
| +using chromeos::DBusThreadManager;
|
| +using chromeos::UpdateEngineClient;
|
|
|
| namespace {
|
|
|
| @@ -15,10 +19,57 @@ const int kNotifyCycleTimeMs = 20 * 60 * 1000; // 20 minutes.
|
|
|
| } // namespace
|
|
|
| -using chromeos::DBusThreadManager;
|
| -using chromeos::UpdateEngineClient;
|
| +class UpgradeDetectorChromeos::ChannelsRequester {
|
| + public:
|
| + typedef base::Callback<void(const std::string&, const std::string&)>
|
| + OnChannelsReceivedCallback;
|
| +
|
| + ChannelsRequester() : weak_factory_(this) {}
|
| +
|
| + void RequestChannels(const OnChannelsReceivedCallback& callback) {
|
| + UpdateEngineClient* client =
|
| + DBusThreadManager::Get()->GetUpdateEngineClient();
|
| + callback_ = callback;
|
| + client->GetChannel(true /* get_current_channel */,
|
| + base::Bind(&ChannelsRequester::SetCurrentChannel,
|
| + weak_factory_.GetWeakPtr()));
|
| + client->GetChannel(false /* get_current_channel */,
|
| + base::Bind(&ChannelsRequester::SetTargetChannel,
|
| + weak_factory_.GetWeakPtr()));
|
| + }
|
| +
|
| + private:
|
| + void SetCurrentChannel(const std::string& current_channel) {
|
| + DCHECK(!current_channel.empty());
|
| + current_channel_ = current_channel;
|
| + TriggerCallbackIfReady();
|
| + }
|
| +
|
| + void SetTargetChannel(const std::string& target_channel) {
|
| + DCHECK(!target_channel.empty());
|
| + target_channel_ = target_channel;
|
| + TriggerCallbackIfReady();
|
| + }
|
| +
|
| + void TriggerCallbackIfReady() {
|
| + if (current_channel_.empty() || target_channel_.empty())
|
| + return;
|
| + if (!callback_.is_null())
|
| + callback_.Run(current_channel_, target_channel_);
|
| + }
|
| +
|
| + std::string current_channel_;
|
| + std::string target_channel_;
|
| +
|
| + OnChannelsReceivedCallback callback_;
|
| +
|
| + base::WeakPtrFactory<ChannelsRequester> weak_factory_;
|
|
|
| -UpgradeDetectorChromeos::UpgradeDetectorChromeos() : initialized_(false) {
|
| + DISALLOW_COPY_AND_ASSIGN(ChannelsRequester);
|
| +};
|
| +
|
| +UpgradeDetectorChromeos::UpgradeDetectorChromeos()
|
| + : initialized_(false), weak_factory_(this) {
|
| }
|
|
|
| UpgradeDetectorChromeos::~UpgradeDetectorChromeos() {
|
| @@ -43,13 +94,10 @@ void UpgradeDetectorChromeos::UpdateStatusChanged(
|
|
|
| upgrade_detected_time_ = base::Time::Now();
|
|
|
| - // ChromeOS shows upgrade arrow once the upgrade becomes available.
|
| - NotifyOnUpgrade();
|
| -
|
| - // Setup timer to to move along the upgrade advisory system.
|
| - upgrade_notification_timer_.Start(
|
| - FROM_HERE, base::TimeDelta::FromMilliseconds(kNotifyCycleTimeMs),
|
| - this, &UpgradeDetectorChromeos::NotifyOnUpgrade);
|
| + channels_requester_.reset(new UpgradeDetectorChromeos::ChannelsRequester());
|
| + channels_requester_->RequestChannels(
|
| + base::Bind(&UpgradeDetectorChromeos::OnChannelsReceived,
|
| + weak_factory_.GetWeakPtr()));
|
| }
|
|
|
| void UpgradeDetectorChromeos::NotifyOnUpgrade() {
|
| @@ -80,6 +128,26 @@ void UpgradeDetectorChromeos::NotifyOnUpgrade() {
|
| NotifyUpgradeRecommended();
|
| }
|
|
|
| +void UpgradeDetectorChromeos::OnChannelsReceived(
|
| + const std::string& current_channel,
|
| + const std::string& target_channel) {
|
| + // As current update engine status is UPDATE_STATUS_UPDATED_NEED_REBOOT
|
| + // and target channel is more stable than current channel, powerwash
|
| + // will be performed after reboot.
|
| + set_is_factory_reset_required(UpdateEngineClient::IsTargetChannelMoreStable(
|
| + current_channel, target_channel));
|
| +
|
| + // ChromeOS shows upgrade arrow once the upgrade becomes available.
|
| + NotifyOnUpgrade();
|
| +
|
| + // Setup timer to to move along the upgrade advisory system.
|
| + upgrade_notification_timer_.Start(
|
| + FROM_HERE,
|
| + base::TimeDelta::FromMilliseconds(kNotifyCycleTimeMs),
|
| + this,
|
| + &UpgradeDetectorChromeos::NotifyOnUpgrade);
|
| +}
|
| +
|
| // static
|
| UpgradeDetectorChromeos* UpgradeDetectorChromeos::GetInstance() {
|
| return Singleton<UpgradeDetectorChromeos>::get();
|
|
|