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

Unified Diff: chromeos_update_engine.cc

Issue 6648007: Libcros changes for issue_12743: Add async RequestUpdateCheck call. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/cros.git@master
Patch Set: Used scoped_ptr in callback data. 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
« chromeos_network.cc ('K') | « chromeos_update_engine.h ('k') | load.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos_update_engine.cc
diff --git a/chromeos_update_engine.cc b/chromeos_update_engine.cc
index fcff1f375f9c8975396dad69d0774082838501d0..f0ddcffe9030f8c9f8fd6b5ea8df4113a113ed09 100644
--- a/chromeos_update_engine.cc
+++ b/chromeos_update_engine.cc
@@ -213,6 +213,55 @@ bool ChromeOSInitiateUpdateCheck() {
return rc == TRUE;
}
+namespace {
+
+struct UpdateEngineCallbackData {
+ UpdateEngineCallbackData(UpdateCallback cb, void* data)
+ : callback(cb),
+ user_data(data),
+ proxy(new dbus::Proxy(dbus::GetSystemBusConnection(),
+ kUpdateEngineServiceName,
+ kUpdateEngineServicePath,
+ kUpdateEngineServiceInterface)) {}
+ UpdateCallback callback;
+ void* user_data;
+ scoped_ptr<dbus::Proxy> proxy;
petkov 2011/03/09 00:32:09 actually, does this need to be a pointer at all?
+};
+
+// Note: org_chromium_UpdateEngineInterface wraps the DBus calls and provides
+// its own callback and data, which in turn calls this callback.
+void UpdateEngineNotify(DBusGProxy* gproxy, GError* error, void* user_data) {
+ UpdateEngineCallbackData* cb_data =
+ static_cast<UpdateEngineCallbackData*>(user_data);
+ if (error) {
+ const char* msg = GetGErrorMessage(error);
+ LOG(WARNING) << "UpdateEngine DBus Error: " << msg;
+ if (cb_data->callback)
+ cb_data->callback(cb_data->user_data, UPDATE_RESULT_FAILED, msg);
+ } else {
+ if (cb_data->callback)
+ cb_data->callback(cb_data->user_data, UPDATE_RESULT_SUCCESS, NULL);
+ }
+ delete cb_data;
+}
+
+} // namespace
+
+extern "C"
+void ChromeOSRequestUpdateCheck(UpdateCallback callback, void* user_data) {
+ UpdateEngineCallbackData* cb_data =
+ new UpdateEngineCallbackData(callback, user_data);
+ DBusGProxyCall* call_id =
+ org_chromium_UpdateEngineInterface_attempt_update_async(
+ cb_data->proxy->gproxy(), "", "", &UpdateEngineNotify, cb_data);
+ if (!call_id) {
+ LOG(ERROR) << "NULL call_id";
+ if (callback)
+ callback(user_data, UPDATE_RESULT_DBUS_FAILED, NULL);
+ delete cb_data;
+ }
+}
+
extern "C"
bool ChromeOSRebootIfUpdated() {
dbus::BusConnection bus = dbus::GetSystemBusConnection();
« chromeos_network.cc ('K') | « chromeos_update_engine.h ('k') | load.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698