diff options
author | maxbogue <maxbogue@chromium.org> | 2015-05-19 22:25:28 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-20 05:25:30 +0000 |
commit | d0b9cf4b34450dc615f2f574d0af0c7010f33636 (patch) | |
tree | 7cc67b6ddaecdda53b489a390286abd8cc02825f /sync/android | |
parent | f953e418bc56e5f07e600479832e2141683b15a6 (diff) | |
download | chromium_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')
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(); |