Added CryptohomeDoAutomaticFreeDiskSpaceControl()
and CryptohomeAsyncDoAutomaticFreeDiskSpaceControl()

This is Cros part for Cryptohome change: http://codereview.chromium.org/6598074/

Change-Id: I932ca04f217f1b1311d4db93e22495c8c2cb97cb

BUG=chromium-os:12713
TEST=none

Review URL: http://codereview.chromium.org/6602089
diff --git a/chromeos_cros_api.h b/chromeos_cros_api.h
index 6b19ec2..b3debf7 100644
--- a/chromeos_cros_api.h
+++ b/chromeos_cros_api.h
@@ -190,12 +190,14 @@
 // 108: Move types, RequestWifiServicePath, RequestScan, EnableNetworkDevice
 //      to deprecated. Add RequestHiddenWifiNetwork, RequestNetworkScan,
 //      RequestNetworkDeviceEnable.
+// 109: Added CryptohomeDoAutomaticFreeDiskSpaceControl and
+//      CryptohomeAsyncDoAutomaticFreeDiskSpaceControl
 
 namespace chromeos {  // NOLINT
 
 enum CrosAPIVersion {
   kCrosAPIMinVersion = 104,
-  kCrosAPIVersion = 108
+  kCrosAPIVersion = 109
 };
 
 // Default path to pass to LoadCros: "/opt/google/chrome/chromeos/libcros.so"
diff --git a/chromeos_cryptohome.cc b/chromeos_cryptohome.cc
index fba3d91..26ebde3 100644
--- a/chromeos_cryptohome.cc
+++ b/chromeos_cryptohome.cc
@@ -568,6 +568,55 @@
 }
 
 extern "C"
+bool ChromeOSCryptohomeDoAutomaticFreeDiskSpaceControl() {
+  dbus::BusConnection bus = dbus::GetSystemBusConnection();
+  dbus::Proxy proxy(bus,
+                    cryptohome::kCryptohomeServiceName,
+                    cryptohome::kCryptohomeServicePath,
+                    cryptohome::kCryptohomeInterface);
+  gboolean done = false;
+  glib::ScopedError error;
+
+  if (!::dbus_g_proxy_call(
+          proxy.gproxy(),
+          cryptohome::kCryptohomeDoAutomaticFreeDiskSpaceControl,
+          &Resetter(&error).lvalue(),
+          G_TYPE_INVALID,
+          G_TYPE_BOOLEAN,
+          &done,
+          G_TYPE_INVALID)) {
+    LOG(WARNING) << cryptohome::kCryptohomeDoAutomaticFreeDiskSpaceControl
+                 << " failed: "
+                 << (error->message ? error->message : "Unknown Error.");
+  }
+  return done;
+}
+
+extern "C"
+int ChromeOSCryptohomeAsyncDoAutomaticFreeDiskSpaceControl() {
+  dbus::BusConnection bus = dbus::GetSystemBusConnection();
+  dbus::Proxy proxy(bus,
+                    cryptohome::kCryptohomeServiceName,
+                    cryptohome::kCryptohomeServicePath,
+                    cryptohome::kCryptohomeInterface);
+  gint async_call_id = 0;
+  glib::ScopedError error;
+
+  if (!::dbus_g_proxy_call(proxy.gproxy(),
+           cryptohome::kCryptohomeAsyncDoAutomaticFreeDiskSpaceControl,
+           &Resetter(&error).lvalue(),
+           G_TYPE_INVALID,
+           G_TYPE_INT,
+           &async_call_id,
+           G_TYPE_INVALID)) {
+    LOG(WARNING) << cryptohome::kCryptohomeAsyncDoAutomaticFreeDiskSpaceControl
+                 << " failed: "
+                 << (error->message ? error->message : "Unknown Error.");
+  }
+  return async_call_id;
+}
+
+extern "C"
 bool ChromeOSCryptohomeTpmIsReady() {
   dbus::BusConnection bus = dbus::GetSystemBusConnection();
   dbus::Proxy proxy(bus,
diff --git a/chromeos_cryptohome.h b/chromeos_cryptohome.h
index b5c1c36..613cc2f 100644
--- a/chromeos_cryptohome.h
+++ b/chromeos_cryptohome.h
@@ -80,6 +80,8 @@
 extern bool (*CryptohomeUnmount)();
 extern bool (*CryptohomeRemoveTrackedSubdirectories)();
 extern int (*CryptohomeAsyncRemoveTrackedSubdirectories)();
+extern bool (*CryptohomeDoAutomaticFreeDiskSpaceControl)();
+extern int (*CryptohomeAsyncDoAutomaticFreeDiskSpaceControl)();
 extern bool (*CryptohomeTpmIsReady)();
 extern bool (*CryptohomeTpmIsEnabled)();
 extern bool (*CryptohomeTpmIsOwned)();
diff --git a/load.cc b/load.cc
index 7391492..11a15da 100644
--- a/load.cc
+++ b/load.cc
@@ -339,6 +339,8 @@
 DECL_FUNC_0(CryptohomeUnmount, bool);
 DECL_FUNC_0(CryptohomeRemoveTrackedSubdirectories, bool);
 DECL_FUNC_0(CryptohomeAsyncRemoveTrackedSubdirectories, int);
+DECL_FUNC_0(CryptohomeDoAutomaticFreeDiskSpaceControl, bool);
+DECL_FUNC_0(CryptohomeAsyncDoAutomaticFreeDiskSpaceControl, int);
 DECL_FUNC_0(CryptohomeTpmIsReady, bool);
 DECL_FUNC_0(CryptohomeTpmIsEnabled, bool);
 DECL_FUNC_0(CryptohomeTpmIsOwned, bool);
@@ -617,6 +619,8 @@
   INIT_FUNC(CryptohomeUnmount);
   INIT_FUNC(CryptohomeRemoveTrackedSubdirectories);
   INIT_FUNC(CryptohomeAsyncRemoveTrackedSubdirectories);
+  INIT_FUNC(CryptohomeDoAutomaticFreeDiskSpaceControl);
+  INIT_FUNC(CryptohomeAsyncDoAutomaticFreeDiskSpaceControl);
   INIT_FUNC(CryptohomeTpmIsReady);
   INIT_FUNC(CryptohomeTpmIsEnabled);
   INIT_FUNC(CryptohomeTpmIsOwned);