summaryrefslogtreecommitdiffstats
path: root/sync/test
diff options
context:
space:
mode:
authorapiccion@chromium.org <apiccion@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-31 00:38:42 +0000
committerapiccion@chromium.org <apiccion@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-31 00:38:42 +0000
commita2a1a3c26bb7c656b6d0c3a0708496322a570fcc (patch)
tree22d6fa033167822d2ec690ba9bd0a4985f05179f /sync/test
parent16880766bbb9a56837340d331db7727a401565fd (diff)
downloadchromium_src-a2a1a3c26bb7c656b6d0c3a0708496322a570fcc.zip
chromium_src-a2a1a3c26bb7c656b6d0c3a0708496322a570fcc.tar.gz
chromium_src-a2a1a3c26bb7c656b6d0c3a0708496322a570fcc.tar.bz2
Fixed SyncStatusHelper not updating observers on changes.
* SyncStatusHelper now updates observers whenever cached contents changes, previously only updated on content resolver notifications. BUG=299123 Review URL: https://codereview.chromium.org/26116009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231960 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sync/test')
-rw-r--r--sync/test/android/javatests/src/org/chromium/sync/test/util/MockSyncContentResolverDelegate.java54
1 files changed, 36 insertions, 18 deletions
diff --git a/sync/test/android/javatests/src/org/chromium/sync/test/util/MockSyncContentResolverDelegate.java b/sync/test/android/javatests/src/org/chromium/sync/test/util/MockSyncContentResolverDelegate.java
index 213fcee..7a33f2f 100644
--- a/sync/test/android/javatests/src/org/chromium/sync/test/util/MockSyncContentResolverDelegate.java
+++ b/sync/test/android/javatests/src/org/chromium/sync/test/util/MockSyncContentResolverDelegate.java
@@ -31,16 +31,20 @@ import java.util.concurrent.TimeUnit;
*/
public class MockSyncContentResolverDelegate implements SyncContentResolverDelegate {
- private final Map<String, Boolean> mSyncAutomaticallyMap;
+ private final Set<String> mSyncAutomaticallySet;
+ private final Map<String, Boolean> mIsSyncableMap;
+ private final Object mSyncableMapLock = new Object();
private final Set<AsyncSyncStatusObserver> mObservers;
private boolean mMasterSyncAutomatically;
+ private boolean mDisableObserverNotifications;
private Semaphore mPendingObserverCount;
public MockSyncContentResolverDelegate() {
- mSyncAutomaticallyMap = new HashMap<String, Boolean>();
+ mSyncAutomaticallySet = new HashSet<String>();
+ mIsSyncableMap = new HashMap<String, Boolean>();
mObservers = new HashSet<AsyncSyncStatusObserver>();
}
@@ -80,22 +84,25 @@ public class MockSyncContentResolverDelegate implements SyncContentResolverDeleg
@Override
public boolean getSyncAutomatically(Account account, String authority) {
String key = createKey(account, authority);
- synchronized (mSyncAutomaticallyMap) {
- return mSyncAutomaticallyMap.containsKey(key) && mSyncAutomaticallyMap.get(key);
+ synchronized (mSyncableMapLock) {
+ return mSyncAutomaticallySet.contains(key);
}
}
@Override
public void setSyncAutomatically(Account account, String authority, boolean sync) {
String key = createKey(account, authority);
- synchronized (mSyncAutomaticallyMap) {
- if (!mSyncAutomaticallyMap.containsKey(key)) {
+ synchronized (mSyncableMapLock) {
+ if (!mIsSyncableMap.containsKey(key) || !mIsSyncableMap.get(key)) {
throw new IllegalArgumentException("Account " + account +
" is not syncable for authority " + authority +
". Can not set sync state to " + sync);
}
- if (mSyncAutomaticallyMap.get(key) == sync) return;
- mSyncAutomaticallyMap.put(key, sync);
+ if (sync) {
+ mSyncAutomaticallySet.add(key);
+ } else if (mSyncAutomaticallySet.contains(key)) {
+ mSyncAutomaticallySet.remove(key);
+ }
}
notifyObservers();
}
@@ -104,17 +111,22 @@ public class MockSyncContentResolverDelegate implements SyncContentResolverDeleg
public void setIsSyncable(Account account, String authority, int syncable) {
String key = createKey(account, authority);
- synchronized (mSyncAutomaticallyMap) {
+ synchronized (mSyncableMapLock) {
switch (syncable) {
case 0:
- if (!mSyncAutomaticallyMap.containsKey(key)) return;
+ if (mSyncAutomaticallySet.contains(key)) {
+ mSyncAutomaticallySet.remove(key);
+ }
- mSyncAutomaticallyMap.remove(key);
+ mIsSyncableMap.put(key, false);
break;
case 1:
- if (mSyncAutomaticallyMap.containsKey(key)) return;
-
- mSyncAutomaticallyMap.put(key, false);
+ mIsSyncableMap.put(key, true);
+ break;
+ case -1:
+ if (mIsSyncableMap.containsKey(key)) {
+ mIsSyncableMap.remove(key);
+ }
break;
default:
throw new IllegalArgumentException("Unable to understand syncable argument: " +
@@ -126,12 +138,13 @@ public class MockSyncContentResolverDelegate implements SyncContentResolverDeleg
@Override
public int getIsSyncable(Account account, String authority) {
- synchronized (mSyncAutomaticallyMap) {
- final Boolean isSyncable = mSyncAutomaticallyMap.get(createKey(account, authority));
- if (isSyncable == null) {
+ String key = createKey(account, authority);
+ synchronized (mSyncableMapLock) {
+ if (mIsSyncableMap.containsKey(key)) {
+ return mIsSyncableMap.containsKey(key) ? 1 : 0;
+ } else {
return -1;
}
- return isSyncable ? 1 : 0;
}
}
@@ -140,6 +153,7 @@ public class MockSyncContentResolverDelegate implements SyncContentResolverDeleg
}
private void notifyObservers() {
+ if (mDisableObserverNotifications) return;
synchronized (mObservers) {
mPendingObserverCount = new Semaphore(1 - mObservers.size());
for (AsyncSyncStatusObserver observer : mObservers) {
@@ -160,6 +174,10 @@ public class MockSyncContentResolverDelegate implements SyncContentResolverDeleg
mPendingObserverCount.tryAcquire(5, TimeUnit.SECONDS));
}
+ public void disableObserverNotifications() {
+ mDisableObserverNotifications = true;
+ }
+
private static class AsyncSyncStatusObserver {
private final SyncStatusObserver mSyncStatusObserver;