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

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: Incrament libcros API to 111 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
« no previous file with comments | « 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..f6b7406f3185d86013d8dfa0e7d2d45551c27f63 100644
--- a/chromeos_update_engine.cc
+++ b/chromeos_update_engine.cc
@@ -213,6 +213,58 @@ 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);
+ }
+ virtual ~UpdateEngineCallbackData() {
+ delete proxy;
+ }
+ UpdateCallback callback;
+ void* user_data;
+ dbus::Proxy* proxy;
petkov 2011/03/08 22:49:18 any reason why this is not a scoped_ptr? then you
+};
+
+// 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();
« no previous file with comments | « chromeos_update_engine.h ('k') | load.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698