summaryrefslogtreecommitdiffstats
path: root/sync/android
diff options
context:
space:
mode:
authormaxbogue <maxbogue@chromium.org>2015-05-19 22:25:28 -0700
committerCommit bot <commit-bot@chromium.org>2015-05-20 05:25:30 +0000
commitd0b9cf4b34450dc615f2f574d0af0c7010f33636 (patch)
tree7cc67b6ddaecdda53b489a390286abd8cc02825f /sync/android
parentf953e418bc56e5f07e600479832e2141683b15a6 (diff)
downloadchromium_src-d0b9cf4b34450dc615f2f574d0af0c7010f33636.zip
chromium_src-d0b9cf4b34450dc615f2f574d0af0c7010f33636.tar.gz
chromium_src-d0b9cf4b34450dc615f2f574d0af0c7010f33636.tar.bz2
[Sync] Remove periodic sync for Chrome for Android, take 2.
updateAccount() is always called on startup with the signed in account, so the removePeriodicSync() call will be hit even for already signed in users when the app restarts. This change was previously submitted as http://crrev.com/1148613002 but got reverted due to a bad merge caused by http://crrev.com/1138013008. BUG=480688 Review URL: https://codereview.chromium.org/1144993002 Cr-Commit-Position: refs/heads/master@{#330703}
Diffstat (limited to 'sync/android')
-rw-r--r--sync/android/java/src/org/chromium/sync/AndroidSyncSettings.java4
-rw-r--r--sync/android/java/src/org/chromium/sync/SyncContentResolverDelegate.java3
-rw-r--r--sync/android/java/src/org/chromium/sync/SystemSyncContentResolverDelegate.java6
-rw-r--r--sync/android/javatests/src/org/chromium/sync/AndroidSyncSettingsTest.java24
4 files changed, 37 insertions, 0 deletions
diff --git a/sync/android/java/src/org/chromium/sync/AndroidSyncSettings.java b/sync/android/java/src/org/chromium/sync/AndroidSyncSettings.java
index c36cef4..ab424e5 100644
--- a/sync/android/java/src/org/chromium/sync/AndroidSyncSettings.java
+++ b/sync/android/java/src/org/chromium/sync/AndroidSyncSettings.java
@@ -8,6 +8,7 @@ import android.accounts.Account;
import android.content.ContentResolver;
import android.content.Context;
import android.content.SyncStatusObserver;
+import android.os.Bundle;
import android.os.StrictMode;
import org.chromium.base.ObserverList;
@@ -221,6 +222,9 @@ public class AndroidSyncSettings {
// Make account syncable if there is one.
if (shouldBeSyncable) {
mSyncContentResolverDelegate.setIsSyncable(mAccount, mContractAuthority, 1);
+ // This reduces unnecessary resource usage. See http://crbug.com/480688 for details.
+ mSyncContentResolverDelegate.removePeriodicSync(
+ mAccount, mContractAuthority, Bundle.EMPTY);
}
// Disable the syncability of Chrome for all other accounts. Don't use
diff --git a/sync/android/java/src/org/chromium/sync/SyncContentResolverDelegate.java b/sync/android/java/src/org/chromium/sync/SyncContentResolverDelegate.java
index 85ab19f..b5ea731 100644
--- a/sync/android/java/src/org/chromium/sync/SyncContentResolverDelegate.java
+++ b/sync/android/java/src/org/chromium/sync/SyncContentResolverDelegate.java
@@ -7,6 +7,7 @@ package org.chromium.sync;
import android.accounts.Account;
import android.content.SyncStatusObserver;
+import android.os.Bundle;
/**
* Since the ContentResolver in Android has a lot of static methods, it is hard to
@@ -30,4 +31,6 @@ public interface SyncContentResolverDelegate {
void setIsSyncable(Account account, String authority, int syncable);
int getIsSyncable(Account account, String authority);
+
+ void removePeriodicSync(Account account, String authority, Bundle extras);
}
diff --git a/sync/android/java/src/org/chromium/sync/SystemSyncContentResolverDelegate.java b/sync/android/java/src/org/chromium/sync/SystemSyncContentResolverDelegate.java
index 9e8cd7d..6d790da 100644
--- a/sync/android/java/src/org/chromium/sync/SystemSyncContentResolverDelegate.java
+++ b/sync/android/java/src/org/chromium/sync/SystemSyncContentResolverDelegate.java
@@ -8,6 +8,7 @@ package org.chromium.sync;
import android.accounts.Account;
import android.content.ContentResolver;
import android.content.SyncStatusObserver;
+import android.os.Bundle;
/**
* A SyncContentResolverDelegate that simply forwards calls to ContentResolver.
@@ -53,4 +54,9 @@ public class SystemSyncContentResolverDelegate implements SyncContentResolverDel
public int getIsSyncable(Account account, String authority) {
return ContentResolver.getIsSyncable(account, authority);
}
+
+ @Override
+ public void removePeriodicSync(Account account, String authority, Bundle extras) {
+ ContentResolver.removePeriodicSync(account, authority, extras);
+ }
}
diff --git a/sync/android/javatests/src/org/chromium/sync/AndroidSyncSettingsTest.java b/sync/android/javatests/src/org/chromium/sync/AndroidSyncSettingsTest.java
index 94e099b..507989a 100644
--- a/sync/android/javatests/src/org/chromium/sync/AndroidSyncSettingsTest.java
+++ b/sync/android/javatests/src/org/chromium/sync/AndroidSyncSettingsTest.java
@@ -6,6 +6,7 @@ package org.chromium.sync;
import android.accounts.Account;
import android.content.Context;
+import android.os.Bundle;
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.SmallTest;
@@ -29,6 +30,7 @@ public class AndroidSyncSettingsTest extends InstrumentationTestCase {
private int mGetIsSyncableCalls;
private int mSetIsSyncableCalls;
private int mSetSyncAutomaticallyCalls;
+ private int mRemovePeriodicSyncCalls;
@Override
public boolean getMasterSyncAutomatically() {
@@ -59,6 +61,12 @@ public class AndroidSyncSettingsTest extends InstrumentationTestCase {
mSetSyncAutomaticallyCalls++;
super.setSyncAutomatically(account, authority, sync);
}
+
+ @Override
+ public void removePeriodicSync(Account account, String authority, Bundle extras) {
+ mRemovePeriodicSyncCalls++;
+ super.removePeriodicSync(account, authority, extras);
+ }
}
private static class MockSyncSettingsObserver implements AndroidSyncSettingsObserver {
@@ -137,6 +145,22 @@ public class AndroidSyncSettingsTest extends InstrumentationTestCase {
@SmallTest
@Feature({"Sync"})
+ public void testAccountInitialization() throws InterruptedException {
+ // mAccount was set to be syncable and not have periodic syncs.
+ assertEquals(1, mSyncContentResolverDelegate.mSetIsSyncableCalls);
+ assertEquals(1, mSyncContentResolverDelegate.mRemovePeriodicSyncCalls);
+ AndroidSyncSettings.updateAccount(mContext, null);
+ // mAccount was set to be not syncable.
+ assertEquals(2, mSyncContentResolverDelegate.mSetIsSyncableCalls);
+ assertEquals(1, mSyncContentResolverDelegate.mRemovePeriodicSyncCalls);
+ AndroidSyncSettings.updateAccount(mContext, mAlternateAccount);
+ // mAlternateAccount was set to be syncable and not have periodic syncs.
+ assertEquals(3, mSyncContentResolverDelegate.mSetIsSyncableCalls);
+ assertEquals(2, mSyncContentResolverDelegate.mRemovePeriodicSyncCalls);
+ }
+
+ @SmallTest
+ @Feature({"Sync"})
public void testToggleMasterSyncFromSettings() throws InterruptedException {
mSyncContentResolverDelegate.setMasterSyncAutomatically(true);
mSyncContentResolverDelegate.waitForLastNotificationCompleted();