Add minimal migration support

Add EcryptfsMigrationStrategy value MINIMAL_MIGRATE, which performs a
minimal ext4 migration, with only few files (esp. auth tokens and
channel binding information) whitelisted. This is similar to WIPE but
ensures that the user won't have to enter their password twice.

We monitor how long the minimal migration takes, and if it is longer
than 45 seconds, require a password re-entry for privacy reasons.

Depends on Chrome OS side CL:
https://chromium-review.googlesource.com/c/612249.

BUG=747907
TEST=unit_tests --gtest_filter=EncryptionMigrationScreenHandlerTest*
     Manual test with pre-existing ecryptfs user profile and user policy
     EcryptfsMigrationStrategy set to MINIMAL_MIGRATE(4).

Cq-Include-Trybots: master.tryserver.chromium.linux:closure_compilation
Change-Id: I95f367b9219195936571da2af82dea38c91a1221
Reviewed-on: https://chromium-review.googlesource.com/612086
Commit-Queue: Pavol Marko <[email protected]>
Reviewed-by: Achuith Bhandarkar <[email protected]>
Reviewed-by: Maksim Ivanov <[email protected]>
Reviewed-by: Ilya Sherman <[email protected]>
Cr-Commit-Position: refs/heads/master@{#498884}
diff --git a/components/user_manager/user_manager.h b/components/user_manager/user_manager.h
index b3eb6682..0586d76 100644
--- a/components/user_manager/user_manager.h
+++ b/components/user_manager/user_manager.h
@@ -329,6 +329,9 @@
   // Changes the child status and notifies observers.
   virtual void ChangeUserChildStatus(User* user, bool is_child) = 0;
 
+  // Resets this profile to be regarded as if it has never been initialized
+  // before. Used on profile wipe.
+  virtual void ResetProfileEverInitialized(const AccountId& account_id) = 0;
 
   // Returns true if supervised users allowed.
   virtual bool AreSupervisedUsersAllowed() const = 0;