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

Unified Diff: chrome/browser/chromeos/login/update_screen.cc

Issue 6648009: Modify UpdateLibrary to use async RequestUpdateCheck call (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix nits Created 9 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/chromeos/login/update_screen.cc
diff --git a/chrome/browser/chromeos/login/update_screen.cc b/chrome/browser/chromeos/login/update_screen.cc
index e39345c0ba9592b526876203e01e3695f68a9af5..0528491adc9ef29d83fa0f5019b22c29bb9a0377 100644
--- a/chrome/browser/chromeos/login/update_screen.cc
+++ b/chrome/browser/chromeos/login/update_screen.cc
@@ -11,6 +11,7 @@
#include "chrome/browser/chromeos/login/screen_observer.h"
#include "chrome/browser/chromeos/login/update_view.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
+#include "content/browser/browser_thread.h"
namespace {
@@ -37,6 +38,21 @@ const char kUpdateDeadlineFile[] = "/tmp/update-check-response-deadline";
namespace chromeos {
+
+// static
+UpdateScreen::InstanceSet& UpdateScreen::GetInstanceSet() {
+ static std::set<UpdateScreen*> instance_set;
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); // not threadsafe.
+ return instance_set;
+}
+
+// static
+bool UpdateScreen::HasInstance(UpdateScreen* inst) {
+ InstanceSet& instance_set = GetInstanceSet();
+ InstanceSet::iterator found = instance_set.find(inst);
+ return (found != instance_set.end());
+}
+
UpdateScreen::UpdateScreen(WizardScreenDelegate* delegate)
: DefaultViewScreen<chromeos::UpdateView>(delegate,
kUpdateScreenWidth,
@@ -45,6 +61,7 @@ UpdateScreen::UpdateScreen(WizardScreenDelegate* delegate)
reboot_check_delay_(0),
is_downloading_update_(false),
is_all_updates_critical_(false) {
+ GetInstanceSet().insert(this);
}
UpdateScreen::~UpdateScreen() {
@@ -52,6 +69,7 @@ UpdateScreen::~UpdateScreen() {
if (view())
view()->set_controller(NULL);
CrosLibrary::Get()->GetUpdateLibrary()->RemoveObserver(this);
+ GetInstanceSet().erase(this);
}
void UpdateScreen::UpdateStatusChanged(UpdateLibrary* library) {
@@ -134,6 +152,20 @@ void UpdateScreen::UpdateStatusChanged(UpdateLibrary* library) {
}
}
+namespace {
+// Invoked from call to RequestUpdateCheck upon completion of the DBus call.
+void StartUpdateCallback(void* user_data,
+ UpdateResult result,
+ const char* msg) {
+ if (result != UPDATE_RESULT_SUCCESS) {
+ DCHECK(user_data);
+ UpdateScreen* screen = static_cast<UpdateScreen*>(user_data);
+ if (UpdateScreen::HasInstance(screen))
+ screen->ExitUpdate(UpdateScreen::REASON_UPDATE_INIT_FAILED);
+ }
+}
+} // namespace
+
void UpdateScreen::StartUpdate() {
// Reset view if view was created.
if (view()) {
@@ -149,9 +181,8 @@ void UpdateScreen::StartUpdate() {
} else {
CrosLibrary::Get()->GetUpdateLibrary()->AddObserver(this);
VLOG(1) << "Initiate update check";
- if (!CrosLibrary::Get()->GetUpdateLibrary()->CheckForUpdate()) {
- ExitUpdate(REASON_UPDATE_INIT_FAILED);
- }
+ CrosLibrary::Get()->GetUpdateLibrary()->RequestUpdateCheck(
+ StartUpdateCallback, this);
}
}
« no previous file with comments | « chrome/browser/chromeos/login/update_screen.h ('k') | chrome/browser/chromeos/login/update_screen_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698