Commit d0b9cf4b authored by maxbogue's avatar maxbogue Committed by Commit bot

[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}
parent f953e418
......@@ -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
......
......@@ -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);
}
......@@ -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);
}
}
......@@ -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 {
......@@ -135,6 +143,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 {
......
......@@ -9,6 +9,7 @@ import android.accounts.Account;
import android.content.ContentResolver;
import android.content.SyncStatusObserver;
import android.os.AsyncTask;
import android.os.Bundle;
import junit.framework.Assert;
......@@ -144,6 +145,10 @@ public class MockSyncContentResolverDelegate implements SyncContentResolverDeleg
}
}
@Override
public void removePeriodicSync(Account account, String authority, Bundle extras) {
}
private static String createKey(Account account, String authority) {
return account.name + "@@@" + account.type + "@@@" + authority;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment