diff options
author | Christopher Tate <ctate@google.com> | 2014-04-01 10:38:29 -0700 |
---|---|---|
committer | Christopher Tate <ctate@google.com> | 2014-04-01 16:43:00 -0700 |
commit | cba5941c6085dab1566bc047c1ea31f58a2dd4cf (patch) | |
tree | 65f1da5c842078cebbc4db4d547ae80243e66271 /core | |
parent | 4bb047fa5e6d43a027bfe1dfe23b3541e3910a31 (diff) | |
download | frameworks_base-cba5941c6085dab1566bc047c1ea31f58a2dd4cf.zip frameworks_base-cba5941c6085dab1566bc047c1ea31f58a2dd4cf.tar.gz frameworks_base-cba5941c6085dab1566bc047c1ea31f58a2dd4cf.tar.bz2 |
Rejigger the invalid-key checks at backup time
Bug 13732002
Change-Id: Ic8f71234d1bbc7420eaa8e1762b999d09f308d46
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/app/IBackupAgent.aidl | 8 | ||||
-rw-r--r-- | core/java/android/app/backup/BackupAgent.java | 32 | ||||
-rw-r--r-- | core/java/android/app/backup/BackupDataOutput.java | 5 |
3 files changed, 35 insertions, 10 deletions
diff --git a/core/java/android/app/IBackupAgent.aidl b/core/java/android/app/IBackupAgent.aidl index 4ca06ed..7036aea 100644 --- a/core/java/android/app/IBackupAgent.aidl +++ b/core/java/android/app/IBackupAgent.aidl @@ -124,4 +124,12 @@ oneway interface IBackupAgent { int type, String domain, String path, long mode, long mtime, int token, IBackupManager callbackBinder); + /** + * Out of band: instruct the agent to crash within the client process. This is used + * when the backup infrastructure detects a semantic error post-hoc and needs to + * pass the problem back to the app. + * + * @param message The message to be passed to the agent's application in an exception. + */ + void fail(String message); } diff --git a/core/java/android/app/backup/BackupAgent.java b/core/java/android/app/backup/BackupAgent.java index 67c772b..3c31f8d 100644 --- a/core/java/android/app/backup/BackupAgent.java +++ b/core/java/android/app/backup/BackupAgent.java @@ -128,6 +128,13 @@ public abstract class BackupAgent extends ContextWrapper { Handler mHandler = null; + Handler getHandler() { + if (mHandler == null) { + mHandler = new Handler(Looper.getMainLooper()); + } + return mHandler; + } + class SharedPrefsSynchronizer implements Runnable { public final CountDownLatch mLatch = new CountDownLatch(1); @@ -140,12 +147,9 @@ public abstract class BackupAgent extends ContextWrapper { // Syncing shared preferences deferred writes needs to happen on the main looper thread private void waitForSharedPrefs() { - if (mHandler == null) { - mHandler = new Handler(Looper.getMainLooper()); - } - + Handler h = getHandler(); final SharedPrefsSynchronizer s = new SharedPrefsSynchronizer(); - mHandler.postAtFrontOfQueue(s); + h.postAtFrontOfQueue(s); try { s.mLatch.await(); } catch (InterruptedException e) { /* ignored */ } @@ -680,5 +684,23 @@ public abstract class BackupAgent extends ContextWrapper { } } } + + @Override + public void fail(String message) { + getHandler().post(new FailRunnable(message)); + } + } + + static class FailRunnable implements Runnable { + private String mMessage; + + FailRunnable(String message) { + mMessage = message; + } + + @Override + public void run() { + throw new IllegalStateException(mMessage); + } } } diff --git a/core/java/android/app/backup/BackupDataOutput.java b/core/java/android/app/backup/BackupDataOutput.java index 845784f..fc5fb3d 100644 --- a/core/java/android/app/backup/BackupDataOutput.java +++ b/core/java/android/app/backup/BackupDataOutput.java @@ -85,11 +85,6 @@ public class BackupDataOutput { * @throws IOException if the write failed */ public int writeEntityHeader(String key, int dataSize) throws IOException { - if (key != null && key.charAt(0) >= 0xff00) { - if (Process.myUid() != Process.SYSTEM_UID) { - throw new IllegalArgumentException("Invalid key " + key); - } - } int result = writeEntityHeader_native(mBackupWriter, key, dataSize); if (result >= 0) { return result; |