Rollback: check for can_rollback before performing rollback.

This CL also removes the list_dir_contents calls as rollback
doesn't actually stage anything itself nor require something
on the devserver (it's call client-side).

BUG=chromium:356898
TEST=Tryjob + rollback test.

Change-Id: I1ac19dd40fecbc31b9d3c5ff001332b116856f68
Reviewed-on: https://chromium-review.googlesource.com/195449
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Prashanth B <beeps@chromium.org>
Tested-by: Chris Sosa <sosa@chromium.org>
Commit-Queue: Chris Sosa <sosa@chromium.org>
diff --git a/client/common_lib/cros/autoupdater.py b/client/common_lib/cros/autoupdater.py
index abd523a..f0acc90 100644
--- a/client/common_lib/cros/autoupdater.py
+++ b/client/common_lib/cros/autoupdater.py
@@ -319,18 +319,22 @@
         @raise RootFSUpdateError if anything went wrong.
 
         """
-        #TODO(sosa): crbug.com/309051 - Make this one update_engine_client call.
-        rollback_cmd = '%s --rollback' % (UPDATER_BIN)
-        wait_for_update_to_complete_cmd = '%s --update' % (UPDATER_BIN)
+        can_rollback_cmd = '%s --can_rollback' % (UPDATER_BIN)
+        logging.info('Checking for rollback.')
+        try:
+            self._run(can_rollback_cmd)
+        except error.AutoservRunError as e:
+            raise RootFSUpdateError("Rollback isn't possible on %s: %s" %
+                                    (self.host.hostname, str(e)))
+
+        rollback_cmd = '%s --rollback --follow' % (UPDATER_BIN)
         if not powerwash:
           rollback_cmd += ' --nopowerwash'
 
-        logging.info('Triggering rollback.')
+        logging.info('Performing rollback.')
         try:
             self._run(rollback_cmd)
-            self._run(wait_for_update_to_complete_cmd)
         except error.AutoservRunError as e:
-            list_image_dir_contents(self.update_url)
             raise RootFSUpdateError('Rollback failed on %s: %s' %
                                     (self.host.hostname, str(e)))