Wipe FRP partition if OEM unlock enabled

Not all devices invoke recovery on every userdata wipe,
so we can't rely on code in the
recovery OS to do this. This results in fastboot -w
not properly wiping the FRP partition. This patch
fixes the issue by having the framework level service
check the OEM unlock enabled bit, and wiping the partition
if it is set.

Bug: 18644051
Change-Id: Id97a29916fe39561700912a920c5741109842bdb
diff --git a/services/core/java/com/android/server/PersistentDataBlockService.java b/services/core/java/com/android/server/PersistentDataBlockService.java
index 9d4cd99a..e5ace1b 100644
--- a/services/core/java/com/android/server/PersistentDataBlockService.java
+++ b/services/core/java/com/android/server/PersistentDataBlockService.java
@@ -103,9 +103,19 @@
     @Override
     public void onStart() {
         enforceChecksumValidity();
+        formatIfOemUnlockEnabled();
         publishBinderService(Context.PERSISTENT_DATA_BLOCK_SERVICE, mService);
     }
 
+    private void formatIfOemUnlockEnabled() {
+        if (doGetOemUnlockEnabled()) {
+            synchronized (mLock) {
+                formatPartitionLocked();
+                doSetOemUnlockEnabledLocked(true);
+            }
+        }
+    }
+
     private void enforceOemUnlockPermission() {
         mContext.enforceCallingOrSelfPermission(
                 Manifest.permission.OEM_UNLOCK_STATE,
@@ -285,6 +295,28 @@
         }
     }
 
+    private boolean doGetOemUnlockEnabled() {
+        DataInputStream inputStream;
+        try {
+            inputStream = new DataInputStream(new FileInputStream(new File(mDataBlockFile)));
+        } catch (FileNotFoundException e) {
+            Slog.e(TAG, "partition not available");
+            return false;
+        }
+
+        try {
+            synchronized (mLock) {
+                inputStream.skip(getBlockDeviceSize() - 1);
+                return inputStream.readByte() != 0;
+            }
+        } catch (IOException e) {
+            Slog.e(TAG, "unable to access persistent partition", e);
+            return false;
+        } finally {
+            IoUtils.closeQuietly(inputStream);
+        }
+    }
+
     private native long nativeGetBlockDeviceSize(String path);
     private native int nativeWipe(String path);
 
@@ -410,25 +442,7 @@
         @Override
         public boolean getOemUnlockEnabled() {
             enforceOemUnlockPermission();
-            DataInputStream inputStream;
-            try {
-                inputStream = new DataInputStream(new FileInputStream(new File(mDataBlockFile)));
-            } catch (FileNotFoundException e) {
-                Slog.e(TAG, "partition not available");
-                return false;
-            }
-
-            try {
-                synchronized (mLock) {
-                    inputStream.skip(getBlockDeviceSize() - 1);
-                    return inputStream.readByte() != 0;
-                }
-            } catch (IOException e) {
-                Slog.e(TAG, "unable to access persistent partition", e);
-                return false;
-            } finally {
-                IoUtils.closeQuietly(inputStream);
-            }
+            return doGetOemUnlockEnabled();
         }
 
         @Override