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

Unified Diff: chrome/browser/chromeos/upgrade_detector_chromeos.cc

Issue 614363002: Added Aura notification that relaunch and powerwash is required in case of downgrade. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More fixes to StstemTrayDelegateWin. Created 6 years, 3 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/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..a96bf8d9874aec6b77006ffb6fb0fb15ac6ba4b3 100644
--- a/chrome/browser/chromeos/upgrade_detector_chromeos.cc
+++ b/chrome/browser/chromeos/upgrade_detector_chromeos.cc
@@ -7,18 +7,74 @@
#include "base/memory/singleton.h"
#include "chromeos/dbus/dbus_thread_manager.h"
+using chromeos::DBusThreadManager;
+using chromeos::UpdateEngineClient;
+
namespace {
// How long to wait (each cycle) before checking which severity level we should
// be at. Once we reach the highest severity, the timer will stop.
const int kNotifyCycleTimeMs = 20 * 60 * 1000; // 20 minutes.
+bool IsTargetChannelMoreStable(const std::string& current_channel,
+ const std::string& target_channel) {
stevenjb 2014/10/01 22:26:44 This should either be moved to UpdateEngineClient
ygorshenin1 2014/10/02 14:21:35 Done.
+ const auto& channels_list = UpdateEngineClient::kReleaseChannelsList;
+ auto cix =
+ std::find(channels_list.cbegin(), channels_list.cend(), current_channel);
+ auto tix =
+ std::find(channels_list.cbegin(), channels_list.cend(), target_channel);
+ return tix > cix;
+}
+
} // namespace
-using chromeos::DBusThreadManager;
-using chromeos::UpdateEngineClient;
+class UpgradeDetectorChromeos::ChannelsRequester {
+ public:
+ ChannelsRequester() : weak_factory_(this) {}
+
+ void RequestChannels(const base::Callback<
+ void(const std::string&, const std::string&)>& callback) {
stevenjb 2014/10/01 22:26:44 This callback should be typedfed somewhere
ygorshenin1 2014/10/02 14:21:35 Done.
+ 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) {
stevenjb 2014/10/01 22:26:44 DCHECK(!current_channel.empty()), otherwise an emp
ygorshenin1 2014/10/02 14:21:35 Done.
+ current_channel_ = current_channel;
+ TriggerCallbackIfReady();
+ }
+
+ void SetTargetChannel(const std::string& target_channel) {
stevenjb 2014/10/01 22:26:44 Ditto.
ygorshenin1 2014/10/02 14:21:35 Done.
+ 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_;
+
+ base::Callback<void(const std::string&, const std::string&)> callback_;
-UpgradeDetectorChromeos::UpgradeDetectorChromeos() : initialized_(false) {
+ base::WeakPtrFactory<ChannelsRequester> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(ChannelsRequester);
+};
+
+UpgradeDetectorChromeos::UpgradeDetectorChromeos()
+ : initialized_(false), weak_factory_(this) {
}
UpgradeDetectorChromeos::~UpgradeDetectorChromeos() {
@@ -43,13 +99,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 +133,23 @@ void UpgradeDetectorChromeos::NotifyOnUpgrade() {
NotifyUpgradeRecommended();
}
+void UpgradeDetectorChromeos::OnChannelsReceived(
+ const std::string& current_channel,
+ const std::string& target_channel) {
+ set_is_factory_reset_required(
+ IsTargetChannelMoreStable(current_channel, target_channel));
stevenjb 2014/10/01 22:26:44 Could you add a comment explaining why IsTargetCha
ygorshenin1 2014/10/02 14:21:35 Done.
+
+ // 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();

Powered by Google App Engine
This is Rietveld 408576698