diff options
author | Rishabh Singh <rishabhsing@google.com> | 2022-09-27 00:34:33 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-09-27 00:34:33 +0000 |
commit | 501fcc43b34164bd34f1c448fe3b9a3934e2b35d (patch) | |
tree | 3f17fe483c30509b817733d41fdf95a4f9f3a419 | |
parent | 3ab5213596a11e8d5c4ca279820bb39f42139483 (diff) | |
parent | 136c6d7bf4543a301b503a785f4c55fc4936591f (diff) | |
download | AdServices-501fcc43b34164bd34f1c448fe3b9a3934e2b35d.tar.gz |
Merge "Api to erase keys from sandbox" into tm-mainline-prod
4 files changed, 58 insertions, 1 deletions
diff --git a/sdksandbox/framework/java/android/app/sdksandbox/SharedPreferencesSyncManager.java b/sdksandbox/framework/java/android/app/sdksandbox/SharedPreferencesSyncManager.java index 44bba284de..acb24d29d6 100644 --- a/sdksandbox/framework/java/android/app/sdksandbox/SharedPreferencesSyncManager.java +++ b/sdksandbox/framework/java/android/app/sdksandbox/SharedPreferencesSyncManager.java @@ -107,7 +107,24 @@ public class SharedPreferencesSyncManager { public void removeSharedPreferencesSyncKeys(@NonNull Set<String> keys) { synchronized (mLock) { mKeysToSync.removeAll(keys); - // TODO(b/19742283): removed keys need to be erased from sandbox. + + final ArrayList<SharedPreferencesKey> keysWithTypeBeingRemoved = new ArrayList<>(); + + for (final String key : keys) { + keysWithTypeBeingRemoved.add( + new SharedPreferencesKey(key, SharedPreferencesKey.KEY_TYPE_STRING)); + } + final SharedPreferencesUpdate update = + new SharedPreferencesUpdate(keysWithTypeBeingRemoved, new Bundle()); + try { + mService.syncDataFromClient( + mContext.getPackageName(), + /*timeAppCalledSystemServer=*/ System.currentTimeMillis(), + update, + mCallback); + } catch (RemoteException e) { + Log.e(TAG, "Couldn't connect to SdkSandboxManagerService: " + e.getMessage()); + } } } diff --git a/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/app/src/com/android/tests/sdksandbox/SdkSandboxStorageTestApp.java b/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/app/src/com/android/tests/sdksandbox/SdkSandboxStorageTestApp.java index 9fcf6f7498..a358a542de 100644 --- a/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/app/src/com/android/tests/sdksandbox/SdkSandboxStorageTestApp.java +++ b/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/app/src/com/android/tests/sdksandbox/SdkSandboxStorageTestApp.java @@ -204,6 +204,28 @@ public class SdkSandboxStorageTestApp { assertThat(syncedValueInSandbox).isEqualTo(BULK_SYNC_VALUE); } + @Test + public void testSharedPreferences_SyncRemoveKeys() throws Exception { + loadSdk(); + + // Write to default shared preference + final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mContext); + pref.edit().putString(KEY_TO_SYNC, BULK_SYNC_VALUE).commit(); + + // Start syncing keys + mSdkSandboxManager.addSyncedSharedPreferencesKeys(Set.of(KEY_TO_SYNC)); + + // Remove the key + mSdkSandboxManager.removeSyncedSharedPreferencesKeys(Set.of(KEY_TO_SYNC)); + + // Allow some time for data to sync + Thread.sleep(1000); + + // Verify key has been removed from the sandbox + final String syncedValueInSandbox = mSdk.getSyncedSharedPreferencesString(KEY_TO_SYNC); + assertThat(syncedValueInSandbox).isEmpty(); + } + private static void assertDirIsNotAccessible(String path) { // Trying to access a file that does not exist in that directory, it should return // permission denied not file not found. diff --git a/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/src/com/android/tests/sdksandbox/host/SdkSandboxStorageHostTest.java b/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/src/com/android/tests/sdksandbox/host/SdkSandboxStorageHostTest.java index a71b11e966..a105b6b234 100644 --- a/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/src/com/android/tests/sdksandbox/host/SdkSandboxStorageHostTest.java +++ b/sdksandbox/tests/hostsidetests/SdkSandboxStorageHostTest/src/com/android/tests/sdksandbox/host/SdkSandboxStorageHostTest.java @@ -1059,6 +1059,12 @@ public final class SdkSandboxStorageHostTest extends BaseHostJUnit4Test { runPhase("testSharedPreferences_SyncStartedBeforeLoadingSdk"); } + @Test + public void testSharedPreferences_SyncRemoveKeys() throws Exception { + installPackage(TEST_APP_STORAGE_APK); + runPhase("testSharedPreferences_SyncRemoveKeys"); + } + private String getAppDataPath(int userId, String packageName, boolean isCeData) { return getAppDataPath(/*volumeUuid=*/ null, userId, packageName, isCeData); } diff --git a/sdksandbox/tests/unittest/src/android/app/sdksandbox/SharedPreferencesSyncManagerUnitTest.java b/sdksandbox/tests/unittest/src/android/app/sdksandbox/SharedPreferencesSyncManagerUnitTest.java index 65c034abb4..0426b34367 100644 --- a/sdksandbox/tests/unittest/src/android/app/sdksandbox/SharedPreferencesSyncManagerUnitTest.java +++ b/sdksandbox/tests/unittest/src/android/app/sdksandbox/SharedPreferencesSyncManagerUnitTest.java @@ -122,6 +122,18 @@ public class SharedPreferencesSyncManagerUnitTest { } @Test + public void test_removeKeys_updateSentForRemoval() throws Exception { + mSyncManager.addSharedPreferencesSyncKeys(KEYS_TO_SYNC); + + // Remove key + mSyncManager.removeSharedPreferencesSyncKeys(Set.of(KEY_TO_UPDATE)); + + final SharedPreferencesUpdate update = mSdkSandboxManagerService.getLastUpdate(); + assertThat(update.getData().keySet()).doesNotContain(Set.of(KEY_TO_UPDATE)); + assertThat(update.getKeysInUpdate()).containsExactly(KEY_WITH_TYPE_TO_UPDATE); + } + + @Test public void test_bulkSync_syncSpecifiedKeys() throws Exception { // Populate default shared preference with test data populateDefaultSharedPreference(TEST_DATA); |