| Index: chrome/android/java/src/org/chromium/chrome/browser/sync/ChromiumSyncAdapter.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/ChromiumSyncAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/ChromiumSyncAdapter.java
|
| deleted file mode 100644
|
| index 83b9cd31d506b571b46f489948e4aa3ef28d9f6e..0000000000000000000000000000000000000000
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/ChromiumSyncAdapter.java
|
| +++ /dev/null
|
| @@ -1,203 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -package org.chromium.chrome.browser.sync;
|
| -
|
| -import android.accounts.Account;
|
| -import android.app.Application;
|
| -import android.content.AbstractThreadedSyncAdapter;
|
| -import android.content.ContentProviderClient;
|
| -import android.content.ContentResolver;
|
| -import android.content.Context;
|
| -import android.content.SyncResult;
|
| -import android.os.Bundle;
|
| -import android.os.Handler;
|
| -import android.util.Log;
|
| -
|
| -import com.google.protos.ipc.invalidation.Types;
|
| -
|
| -import org.chromium.base.ThreadUtils;
|
| -import org.chromium.base.VisibleForTesting;
|
| -import org.chromium.base.annotations.SuppressFBWarnings;
|
| -import org.chromium.base.library_loader.LibraryProcessType;
|
| -import org.chromium.base.library_loader.ProcessInitException;
|
| -import org.chromium.chrome.browser.invalidation.InvalidationServiceFactory;
|
| -import org.chromium.chrome.browser.profiles.Profile;
|
| -import org.chromium.content.app.ContentApplication;
|
| -import org.chromium.content.browser.BrowserStartupController;
|
| -import org.chromium.sync.signin.ChromeSigninController;
|
| -
|
| -import java.util.concurrent.Semaphore;
|
| -import java.util.concurrent.TimeUnit;
|
| -
|
| -/**
|
| - * A sync adapter for Chromium.
|
| - */
|
| -public abstract class ChromiumSyncAdapter extends AbstractThreadedSyncAdapter {
|
| - private static final String TAG = "ChromiumSyncAdapter";
|
| -
|
| - // TODO(nyquist) Make these fields package protected once downstream sync adapter tests are
|
| - // removed.
|
| - @VisibleForTesting
|
| - public static final String INVALIDATION_OBJECT_SOURCE_KEY = "objectSource";
|
| - @VisibleForTesting
|
| - public static final String INVALIDATION_OBJECT_ID_KEY = "objectId";
|
| - @VisibleForTesting
|
| - public static final String INVALIDATION_VERSION_KEY = "version";
|
| - @VisibleForTesting
|
| - public static final String INVALIDATION_PAYLOAD_KEY = "payload";
|
| -
|
| - private final Application mApplication;
|
| - private final boolean mAsyncStartup;
|
| -
|
| - public ChromiumSyncAdapter(Context context, Application application) {
|
| - super(context, false);
|
| - mApplication = application;
|
| - mAsyncStartup = useAsyncStartup();
|
| - }
|
| -
|
| - protected abstract boolean useAsyncStartup();
|
| -
|
| - @Override
|
| - public void onPerformSync(Account account, Bundle extras, String authority,
|
| - ContentProviderClient provider, SyncResult syncResult) {
|
| - if (extras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE)) {
|
| - Account signedInAccount = ChromeSigninController.get(getContext()).getSignedInUser();
|
| - if (account.equals(signedInAccount)) {
|
| - ContentResolver.setIsSyncable(account, authority, 1);
|
| - } else {
|
| - ContentResolver.setIsSyncable(account, authority, 0);
|
| - }
|
| - return;
|
| - }
|
| -
|
| - if (!DelayedSyncController.getInstance().shouldPerformSync(getContext(), extras, account)) {
|
| - return;
|
| - }
|
| -
|
| - // Browser startup is asynchronous, so we will need to wait for startup to finish.
|
| - Semaphore semaphore = new Semaphore(0);
|
| -
|
| - // Configure the callback with all the data it needs.
|
| - BrowserStartupController.StartupCallback callback =
|
| - getStartupCallback(mApplication, account, extras, syncResult, semaphore);
|
| - startBrowserProcess(callback, syncResult, semaphore);
|
| -
|
| - try {
|
| - // This code is only synchronously calling a single native method
|
| - // to trigger and asynchronous sync cycle, so 5 minutes is generous.
|
| - if (!semaphore.tryAcquire(5, TimeUnit.MINUTES)) {
|
| - Log.w(TAG, "Sync request timed out!");
|
| - syncResult.stats.numIoExceptions++;
|
| - }
|
| - } catch (InterruptedException e) {
|
| - Log.w(TAG, "Got InterruptedException when trying to request a sync.", e);
|
| - // Using numIoExceptions so Android will treat this as a soft error.
|
| - syncResult.stats.numIoExceptions++;
|
| - }
|
| - }
|
| -
|
| - private void startBrowserProcess(
|
| - final BrowserStartupController.StartupCallback callback,
|
| - final SyncResult syncResult, Semaphore semaphore) {
|
| - try {
|
| - ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| - @Override
|
| - @SuppressFBWarnings("DM_EXIT")
|
| - public void run() {
|
| - ContentApplication.initCommandLine(getContext());
|
| - if (mAsyncStartup) {
|
| - try {
|
| - BrowserStartupController.get(mApplication,
|
| - LibraryProcessType.PROCESS_BROWSER)
|
| - .startBrowserProcessesAsync(callback);
|
| - } catch (ProcessInitException e) {
|
| - Log.e(TAG, "Unable to load native library.", e);
|
| - System.exit(-1);
|
| - }
|
| - } else {
|
| - startBrowserProcessesSync(callback);
|
| - }
|
| - }
|
| - });
|
| - } catch (RuntimeException e) {
|
| - // It is still unknown why we ever experience this. See http://crbug.com/180044.
|
| - Log.w(TAG, "Got exception when trying to request a sync. Informing Android system.", e);
|
| - // Using numIoExceptions so Android will treat this as a soft error.
|
| - syncResult.stats.numIoExceptions++;
|
| - semaphore.release();
|
| - }
|
| - }
|
| -
|
| - @SuppressFBWarnings("DM_EXIT")
|
| - private void startBrowserProcessesSync(
|
| - final BrowserStartupController.StartupCallback callback) {
|
| - try {
|
| - BrowserStartupController.get(mApplication, LibraryProcessType.PROCESS_BROWSER)
|
| - .startBrowserProcessesSync(false);
|
| - } catch (ProcessInitException e) {
|
| - Log.e(TAG, "Unable to load native library.", e);
|
| - System.exit(-1);
|
| - }
|
| - new Handler().post(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - callback.onSuccess(false);
|
| - }
|
| - });
|
| - }
|
| -
|
| - private BrowserStartupController.StartupCallback getStartupCallback(
|
| - final Context context, final Account acct, Bundle extras,
|
| - final SyncResult syncResult, final Semaphore semaphore) {
|
| - final boolean syncAllTypes = extras.getString(INVALIDATION_OBJECT_ID_KEY) == null;
|
| - final int objectSource = syncAllTypes ? 0 : extras.getInt(INVALIDATION_OBJECT_SOURCE_KEY);
|
| - final String objectId = syncAllTypes ? "" : extras.getString(INVALIDATION_OBJECT_ID_KEY);
|
| - final long version = syncAllTypes ? 0 : extras.getLong(INVALIDATION_VERSION_KEY);
|
| - final String payload = syncAllTypes ? "" : extras.getString(INVALIDATION_PAYLOAD_KEY);
|
| -
|
| - return new BrowserStartupController.StartupCallback() {
|
| - @Override
|
| - public void onSuccess(boolean alreadyStarted) {
|
| - // Startup succeeded, so we can tickle the sync engine.
|
| - if (syncAllTypes) {
|
| - Log.v(TAG, "Received sync tickle for all types.");
|
| - requestSyncForAllTypes();
|
| - } else {
|
| - // Invalidations persisted before objectSource was added should be assumed to be
|
| - // for Sync objects. TODO(stepco): Remove this check once all persisted
|
| - // invalidations can be expected to have the objectSource.
|
| - int resolvedSource = objectSource;
|
| - if (resolvedSource == 0) {
|
| - resolvedSource = Types.ObjectSource.CHROME_SYNC;
|
| - }
|
| - Log.v(TAG, "Received sync tickle for " + resolvedSource + " " + objectId + ".");
|
| - requestSync(resolvedSource, objectId, version, payload);
|
| - }
|
| - semaphore.release();
|
| - }
|
| -
|
| - @Override
|
| - public void onFailure() {
|
| - // The startup failed, so we reset the delayed sync state.
|
| - DelayedSyncController.getInstance().setDelayedSync(context, acct.name);
|
| - // Using numIoExceptions so Android will treat this as a soft error.
|
| - syncResult.stats.numIoExceptions++;
|
| - semaphore.release();
|
| - }
|
| - };
|
| - }
|
| -
|
| - @VisibleForTesting
|
| - public void requestSync(int objectSource, String objectId, long version, String payload) {
|
| - InvalidationServiceFactory.getForProfile(Profile.getLastUsedProfile())
|
| - .requestSyncFromNativeChrome(objectSource, objectId, version, payload);
|
| - }
|
| -
|
| - @VisibleForTesting
|
| - public void requestSyncForAllTypes() {
|
| - InvalidationServiceFactory.getForProfile(Profile.getLastUsedProfile())
|
| - .requestSyncFromNativeChromeForAllTypes();
|
| - }
|
| -}
|
|
|