Bug 1364644 - Pre: Remove guidsSince RepositorySession interface r=rnewman draft
authorGrigory Kruglov <gkruglov@mozilla.com>
Mon, 24 Jul 2017 14:48:38 -0400
changeset 615471 276523466631df64f000a658da7c51938e4dea3e
parent 615176 32d9d1e81cc607320a36391845917f645f7a7f72
child 615472 70a916a2acd3fb0f75ed6e0e8ca6f545323135ed
child 617897 2b0d69bfd7be9368fd0f2a9926c8b5ba156206ee
push id70375
push userbmo:gkruglov@mozilla.com
push dateWed, 26 Jul 2017 02:08:36 +0000
reviewersrnewman
bugs1364644
milestone56.0a1
Bug 1364644 - Pre: Remove guidsSince RepositorySession interface r=rnewman We're moving toward version-based syncing. This is one of the bricks in that road, removing an unused timestamp-based interface for accessing changed records. MozReview-Commit-ID: CYUyASWXrMW
mobile/android/base/android-services.mozbuild
mobile/android/services/src/main/java/org/mozilla/gecko/sync/middleware/MiddlewareRepositorySession.java
mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/RepositorySession.java
mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/Server15RepositorySession.java
mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/AndroidBrowserRepositoryDataAccessor.java
mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/AndroidBrowserRepositorySession.java
mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/FennecTabsRepository.java
mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/FormHistoryRepositorySession.java
mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/PasswordsRepositorySession.java
mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/delegates/RepositorySessionGuidsSinceDelegate.java
mobile/android/tests/background/junit3/background_junit3_sources.mozbuild
mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/AndroidBrowserRepositoryTestCase.java
mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestAndroidBrowserBookmarksRepository.java
mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestAndroidBrowserHistoryRepository.java
mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestFormHistoryRepositorySession.java
mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestPasswordsRepository.java
mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/sync/helpers/DefaultGuidsSinceDelegate.java
mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/sync/helpers/ExpectGuidsSinceDelegate.java
mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/sync/helpers/ExpectNoGUIDsSinceDelegate.java
mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/testhelpers/WBORepository.java
mobile/android/tests/background/junit4/src/org/mozilla/gecko/background/testhelpers/WBORepository.java
--- a/mobile/android/base/android-services.mozbuild
+++ b/mobile/android/base/android-services.mozbuild
@@ -974,17 +974,16 @@ sync_java_files = [TOPSRCDIR + '/mobile/
     'sync/repositories/delegates/DeferredRepositorySessionFetchRecordsDelegate.java',
     'sync/repositories/delegates/DeferredRepositorySessionFinishDelegate.java',
     'sync/repositories/delegates/DeferredRepositorySessionStoreDelegate.java',
     'sync/repositories/delegates/RepositorySessionBeginDelegate.java',
     'sync/repositories/delegates/RepositorySessionCleanDelegate.java',
     'sync/repositories/delegates/RepositorySessionCreationDelegate.java',
     'sync/repositories/delegates/RepositorySessionFetchRecordsDelegate.java',
     'sync/repositories/delegates/RepositorySessionFinishDelegate.java',
-    'sync/repositories/delegates/RepositorySessionGuidsSinceDelegate.java',
     'sync/repositories/delegates/RepositorySessionStoreDelegate.java',
     'sync/repositories/delegates/RepositorySessionWipeDelegate.java',
     'sync/repositories/domain/BookmarkRecord.java',
     'sync/repositories/domain/BookmarkRecordFactory.java',
     'sync/repositories/domain/ClientRecord.java',
     'sync/repositories/domain/ClientRecordFactory.java',
     'sync/repositories/domain/FormHistoryRecord.java',
     'sync/repositories/domain/HistoryRecord.java',
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/middleware/MiddlewareRepositorySession.java
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/middleware/MiddlewareRepositorySession.java
@@ -8,17 +8,16 @@ import java.util.concurrent.ExecutorServ
 
 import org.mozilla.gecko.background.common.log.Logger;
 import org.mozilla.gecko.sync.repositories.InactiveSessionException;
 import org.mozilla.gecko.sync.repositories.InvalidSessionTransitionException;
 import org.mozilla.gecko.sync.repositories.RepositorySession;
 import org.mozilla.gecko.sync.repositories.RepositorySessionBundle;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionBeginDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFinishDelegate;
-import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionGuidsSinceDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionWipeDelegate;
 
 public abstract class MiddlewareRepositorySession extends RepositorySession {
   private static final String LOG_TAG = "MiddlewareSession";
   protected final RepositorySession inner;
 
   public MiddlewareRepositorySession(RepositorySession innerSession, MiddlewareRepository repository) {
     super(repository);
@@ -143,22 +142,16 @@ public abstract class MiddlewareReposito
   }
 
   @Override
   public void abort(RepositorySessionFinishDelegate delegate) {
     inner.abort(new MiddlewareRepositorySessionFinishDelegate(this, delegate));
   }
 
   @Override
-  public void guidsSince(long timestamp, RepositorySessionGuidsSinceDelegate delegate) {
-    // TODO: need to do anything here?
-    inner.guidsSince(timestamp, delegate);
-  }
-
-  @Override
   public void storeIncomplete() {
     inner.storeIncomplete();
   }
 
   @Override
   public void storeDone() {
     inner.storeDone();
   }
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/RepositorySession.java
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/RepositorySession.java
@@ -9,17 +9,16 @@ import java.util.Collection;
 import java.util.Iterator;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 import org.mozilla.gecko.background.common.log.Logger;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionBeginDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFetchRecordsDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFinishDelegate;
-import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionGuidsSinceDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionStoreDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionWipeDelegate;
 import org.mozilla.gecko.sync.repositories.domain.Record;
 
 /**
  * A <code>RepositorySession</code> is created and used thusly:
  *
  *<ul>
@@ -79,17 +78,16 @@ public abstract class RepositorySession 
   public static long now() {
     return System.currentTimeMillis();
   }
 
   public RepositorySession(Repository repository) {
     this.repository = repository;
   }
 
-  public abstract void guidsSince(long timestamp, RepositorySessionGuidsSinceDelegate delegate);
   public abstract void fetchSince(long timestamp, RepositorySessionFetchRecordsDelegate delegate);
   public abstract void fetch(String[] guids, RepositorySessionFetchRecordsDelegate delegate) throws InactiveSessionException;
   public abstract void fetchAll(RepositorySessionFetchRecordsDelegate delegate);
 
   /**
    * Override this if you wish to short-circuit a sync when you know --
    * e.g., by inspecting the database or info/collections -- that no new
    * data are available.
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/Server15RepositorySession.java
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/Server15RepositorySession.java
@@ -3,17 +3,16 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 package org.mozilla.gecko.sync.repositories;
 
 import android.net.Uri;
 
 import org.mozilla.gecko.background.common.log.Logger;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFetchRecordsDelegate;
-import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionGuidsSinceDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionStoreDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionWipeDelegate;
 import org.mozilla.gecko.sync.repositories.domain.Record;
 import org.mozilla.gecko.sync.repositories.downloaders.BatchingDownloader;
 import org.mozilla.gecko.sync.repositories.downloaders.BatchingDownloaderController;
 import org.mozilla.gecko.sync.repositories.uploaders.BatchingUploader;
 
 public class Server15RepositorySession extends RepositorySession {
@@ -43,23 +42,16 @@ public class Server15RepositorySession e
     // Now that we have the delegate, we can initialize our uploader.
     this.uploader = new BatchingUploader(
             this, storeWorkQueue, storeDelegate, Uri.parse(serverRepository.collectionURI.toString()),
             serverRepository.getCollectionLastModified(), serverRepository.getInfoConfiguration(),
             serverRepository.authHeaderProvider);
   }
 
   @Override
-  public void guidsSince(long timestamp,
-                         RepositorySessionGuidsSinceDelegate delegate) {
-    // TODO Auto-generated method stub
-
-  }
-
-  @Override
   public void fetchSince(long sinceTimestamp,
                          RepositorySessionFetchRecordsDelegate delegate) {
     BatchingDownloaderController.resumeFetchSinceIfPossible(
             this.downloader,
             this.serverRepository.stateProvider,
             delegate,
             sinceTimestamp,
             serverRepository.getBatchLimit(),
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/AndroidBrowserRepositoryDataAccessor.java
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/AndroidBrowserRepositoryDataAccessor.java
@@ -120,32 +120,16 @@ public abstract class AndroidBrowserRepo
    * @return A cursor. You </b>must</b> close this when you're done with it.
    * @throws NullCursorException
    */
   public Cursor fetchAll() throws NullCursorException {
     return queryHelper.safeQuery(".fetchAll", getAllColumns(), null, null, null);
   }
 
   /**
-   * Fetch GUIDs for records modified since the provided timestamp.
-   * <p>
-   * The caller is responsible for closing the cursor.
-   *
-   * @param timestamp A timestamp in milliseconds.
-   * @return A cursor. You <b>must</b> close this when you're done with it.
-   * @throws NullCursorException
-   */
-  public Cursor getGUIDsSince(long timestamp) throws NullCursorException {
-    return queryHelper.safeQuery(".getGUIDsSince",
-                                 GUID_COLUMNS,
-                                 dateModifiedWhere(timestamp),
-                                 null, null);
-  }
-
-  /**
    * Fetch records modified since the provided timestamp.
    * <p>
    * The caller is responsible for closing the cursor.
    *
    * @param timestamp A timestamp in milliseconds.
    * @return A cursor. You <b>must</b> close this when you're done with it.
    * @throws NullCursorException
    */
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/AndroidBrowserRepositorySession.java
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/AndroidBrowserRepositorySession.java
@@ -1,33 +1,30 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 package org.mozilla.gecko.sync.repositories.android;
 
-import java.util.ArrayList;
-
 import org.mozilla.gecko.background.common.log.Logger;
 import org.mozilla.gecko.sync.repositories.InactiveSessionException;
 import org.mozilla.gecko.sync.repositories.InvalidRequestException;
 import org.mozilla.gecko.sync.repositories.InvalidSessionTransitionException;
 import org.mozilla.gecko.sync.repositories.MultipleRecordsForGuidException;
 import org.mozilla.gecko.sync.repositories.NoGuidForIdException;
 import org.mozilla.gecko.sync.repositories.NoStoreDelegateException;
 import org.mozilla.gecko.sync.repositories.NullCursorException;
 import org.mozilla.gecko.sync.repositories.ParentNotFoundException;
 import org.mozilla.gecko.sync.repositories.ProfileDatabaseException;
 import org.mozilla.gecko.sync.repositories.RecordFilter;
 import org.mozilla.gecko.sync.repositories.Repository;
 import org.mozilla.gecko.sync.repositories.StoreTrackingRepositorySession;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionBeginDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFetchRecordsDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFinishDelegate;
-import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionGuidsSinceDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionWipeDelegate;
 import org.mozilla.gecko.sync.repositories.domain.Record;
 
 import android.content.ContentUris;
 import android.database.Cursor;
 import android.net.Uri;
 import android.util.SparseArray;
 
@@ -185,70 +182,16 @@ public abstract class AndroidBrowserRepo
       dbHelper.fetch(new String[] { "none" }).close();
       Logger.debug(LOG_TAG, "END: checking database.");
     } catch (NullPointerException e) {
       throw new ProfileDatabaseException(e);
     }
   }
 
   @Override
-  public void guidsSince(long timestamp, RepositorySessionGuidsSinceDelegate delegate) {
-    GuidsSinceRunnable command = new GuidsSinceRunnable(timestamp, delegate);
-    delegateQueue.execute(command);
-  }
-
-  class GuidsSinceRunnable implements Runnable {
-
-    private final RepositorySessionGuidsSinceDelegate delegate;
-    private final long                                timestamp;
-
-    public GuidsSinceRunnable(long timestamp,
-                              RepositorySessionGuidsSinceDelegate delegate) {
-      this.timestamp = timestamp;
-      this.delegate = delegate;
-    }
-
-    @Override
-    public void run() {
-      if (!isActive()) {
-        delegate.onGuidsSinceFailed(new InactiveSessionException());
-        return;
-      }
-
-      Cursor cur;
-      try {
-        cur = dbHelper.getGUIDsSince(timestamp);
-      } catch (Exception e) {
-        delegate.onGuidsSinceFailed(e);
-        return;
-      }
-
-      ArrayList<String> guids;
-      try {
-        if (!cur.moveToFirst()) {
-          delegate.onGuidsSinceSucceeded(new String[] {});
-          return;
-        }
-        guids = new ArrayList<String>();
-        while (!cur.isAfterLast()) {
-          guids.add(RepoUtils.getStringFromCursor(cur, "guid"));
-          cur.moveToNext();
-        }
-      } finally {
-        Logger.debug(LOG_TAG, "Closing cursor after guidsSince.");
-        cur.close();
-      }
-
-      String guidsArray[] = new String[guids.size()];
-      guids.toArray(guidsArray);
-      delegate.onGuidsSinceSucceeded(guidsArray);
-    }
-  }
-
-  @Override
   public void fetch(String[] guids,
                     RepositorySessionFetchRecordsDelegate delegate) throws InactiveSessionException {
     FetchRunnable command = new FetchRunnable(guids, now(), null, delegate);
     executeDelegateCommand(command);
   }
 
   abstract class FetchingRunnable implements Runnable {
     protected final RepositorySessionFetchRecordsDelegate delegate;
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/FennecTabsRepository.java
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/FennecTabsRepository.java
@@ -14,17 +14,16 @@ import org.mozilla.gecko.sync.delegates.
 import org.mozilla.gecko.sync.repositories.InactiveSessionException;
 import org.mozilla.gecko.sync.repositories.NoContentProviderException;
 import org.mozilla.gecko.sync.repositories.NoStoreDelegateException;
 import org.mozilla.gecko.sync.repositories.Repository;
 import org.mozilla.gecko.sync.repositories.RepositorySession;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionCreationDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFetchRecordsDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFinishDelegate;
-import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionGuidsSinceDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionWipeDelegate;
 import org.mozilla.gecko.sync.repositories.domain.ClientRecord;
 import org.mozilla.gecko.sync.repositories.domain.Record;
 import org.mozilla.gecko.sync.repositories.domain.TabsRecord;
 
 import android.content.ContentProviderClient;
 import android.content.ContentValues;
 import android.content.Context;
@@ -115,30 +114,16 @@ public class FennecTabsRepository extend
       return BrowserContract.Tabs.CLIENT_GUID + " IS NULL";
     }
 
     protected String[] localClientSelectionArgs() {
       return null;
     }
 
     @Override
-    public void guidsSince(final long timestamp,
-                           final RepositorySessionGuidsSinceDelegate delegate) {
-      // Bug 783692: Now that Bug 730039 has landed, we could implement this,
-      // but it's not a priority since it's not used (yet).
-      Logger.warn(LOG_TAG, "Not returning anything from guidsSince.");
-      delegateQueue.execute(new Runnable() {
-        @Override
-        public void run() {
-          delegate.onGuidsSinceSucceeded(new String[] {});
-        }
-      });
-    }
-
-    @Override
     public void fetchSince(final long timestamp,
                            final RepositorySessionFetchRecordsDelegate delegate) {
       if (tabsProvider == null) {
         throw new IllegalArgumentException("tabsProvider was null.");
       }
       if (tabsHelper == null) {
         throw new IllegalArgumentException("tabsHelper was null.");
       }
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/FormHistoryRepositorySession.java
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/FormHistoryRepositorySession.java
@@ -18,17 +18,16 @@ import org.mozilla.gecko.sync.repositori
 import org.mozilla.gecko.sync.repositories.NoStoreDelegateException;
 import org.mozilla.gecko.sync.repositories.NullCursorException;
 import org.mozilla.gecko.sync.repositories.RecordFilter;
 import org.mozilla.gecko.sync.repositories.Repository;
 import org.mozilla.gecko.sync.repositories.StoreTrackingRepositorySession;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionCreationDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFetchRecordsDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFinishDelegate;
-import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionGuidsSinceDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionWipeDelegate;
 import org.mozilla.gecko.sync.repositories.domain.FormHistoryRecord;
 import org.mozilla.gecko.sync.repositories.domain.Record;
 
 import android.content.ContentProviderClient;
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
@@ -116,69 +115,16 @@ public class FormHistoryRepositorySessio
   public void finish(final RepositorySessionFinishDelegate delegate)
       throws InactiveSessionException {
     releaseProviders();
     super.finish(delegate);
   }
 
   protected static final String[] GUID_COLUMNS = new String[] { FormHistory.GUID };
 
-  @Override
-  public void guidsSince(final long timestamp, final RepositorySessionGuidsSinceDelegate delegate) {
-    Runnable command = new Runnable() {
-      @Override
-      public void run() {
-        if (!isActive()) {
-          delegate.onGuidsSinceFailed(new InactiveSessionException());
-          return;
-        }
-
-        ArrayList<String> guids = new ArrayList<String>();
-
-        final long sharedEnd = now();
-        Cursor cur = null;
-        try {
-          cur = regularHelper.safeQuery(formsProvider, "", GUID_COLUMNS, regularBetween(timestamp, sharedEnd), null, null);
-          cur.moveToFirst();
-          while (!cur.isAfterLast()) {
-            guids.add(cur.getString(0));
-            cur.moveToNext();
-          }
-        } catch (RemoteException | NullCursorException e) {
-          delegate.onGuidsSinceFailed(e);
-          return;
-        } finally {
-          if (cur != null) {
-            cur.close();
-          }
-        }
-
-        try {
-          cur = deletedHelper.safeQuery(formsProvider, "", GUID_COLUMNS, deletedBetween(timestamp, sharedEnd), null, null);
-          cur.moveToFirst();
-          while (!cur.isAfterLast()) {
-            guids.add(cur.getString(0));
-            cur.moveToNext();
-          }
-        } catch (RemoteException | NullCursorException e) {
-          delegate.onGuidsSinceFailed(e);
-          return;
-        } finally {
-          if (cur != null) {
-            cur.close();
-          }
-        }
-
-        String guidsArray[] = guids.toArray(new String[guids.size()]);
-        delegate.onGuidsSinceSucceeded(guidsArray);
-      }
-    };
-    delegateQueue.execute(command);
-  }
-
   protected static FormHistoryRecord retrieveDuringFetch(final Cursor cursor) {
     // A simple and efficient way to distinguish two tables.
     if (cursor.getColumnCount() == BrowserContractHelpers.FormHistoryColumns.length) {
       return formHistoryRecordFromCursor(cursor);
     } else {
       return deletedFormHistoryRecordFromCursor(cursor);
     }
   }
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/PasswordsRepositorySession.java
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/PasswordsRepositorySession.java
@@ -1,33 +1,29 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 package org.mozilla.gecko.sync.repositories.android;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.mozilla.gecko.background.common.log.Logger;
 import org.mozilla.gecko.db.BrowserContract;
 import org.mozilla.gecko.db.BrowserContract.DeletedColumns;
 import org.mozilla.gecko.db.BrowserContract.DeletedPasswords;
 import org.mozilla.gecko.db.BrowserContract.Passwords;
 import org.mozilla.gecko.sync.repositories.InactiveSessionException;
 import org.mozilla.gecko.sync.repositories.NoStoreDelegateException;
 import org.mozilla.gecko.sync.repositories.NullCursorException;
 import org.mozilla.gecko.sync.repositories.RecordFilter;
 import org.mozilla.gecko.sync.repositories.Repository;
 import org.mozilla.gecko.sync.repositories.StoreTrackingRepositorySession;
 import org.mozilla.gecko.sync.repositories.android.RepoUtils.QueryHelper;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionCreationDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFetchRecordsDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFinishDelegate;
-import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionGuidsSinceDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionWipeDelegate;
 import org.mozilla.gecko.sync.repositories.domain.PasswordRecord;
 import org.mozilla.gecko.sync.repositories.domain.Record;
 
 import android.content.ContentProviderClient;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
@@ -67,69 +63,16 @@ public class PasswordsRepositorySession 
 
   private static final String[] GUID_COLS = new String[] { Passwords.GUID };
   private static final String[] DELETED_GUID_COLS = new String[] { DeletedColumns.GUID };
 
   private static final String WHERE_GUID_IS = Passwords.GUID + " = ?";
   private static final String WHERE_DELETED_GUID_IS = DeletedPasswords.GUID + " = ?";
 
   @Override
-  public void guidsSince(final long timestamp, final RepositorySessionGuidsSinceDelegate delegate) {
-    final Runnable guidsSinceRunnable = new Runnable() {
-      @Override
-      public void run() {
-
-        if (!isActive()) {
-          delegate.onGuidsSinceFailed(new InactiveSessionException());
-          return;
-        }
-
-        // Checks succeeded, now get GUIDs.
-        final List<String> guids = new ArrayList<String>();
-        try {
-          Logger.debug(LOG_TAG, "Fetching guidsSince from data table.");
-          final Cursor data = passwordsHelper.safeQuery(passwordsProvider, ".getGUIDsSince", GUID_COLS, dateModifiedWhere(timestamp), null, null);
-          try {
-            if (data.moveToFirst()) {
-              while (!data.isAfterLast()) {
-                guids.add(RepoUtils.getStringFromCursor(data, Passwords.GUID));
-                data.moveToNext();
-              }
-            }
-          } finally {
-            data.close();
-          }
-
-          // Fetch guids from deleted table.
-          Logger.debug(LOG_TAG, "Fetching guidsSince from deleted table.");
-          final Cursor deleted = deletedPasswordsHelper.safeQuery(passwordsProvider, ".getGUIDsSince", DELETED_GUID_COLS, dateModifiedWhereDeleted(timestamp), null, null);
-          try {
-            if (deleted.moveToFirst()) {
-              while (!deleted.isAfterLast()) {
-                guids.add(RepoUtils.getStringFromCursor(deleted, DeletedColumns.GUID));
-                deleted.moveToNext();
-              }
-            }
-          } finally {
-            deleted.close();
-          }
-        } catch (Exception e) {
-          Logger.error(LOG_TAG, "Exception in fetch.");
-          delegate.onGuidsSinceFailed(e);
-          return;
-        }
-        String[] guidStrings = new String[guids.size()];
-        delegate.onGuidsSinceSucceeded(guids.toArray(guidStrings));
-      }
-    };
-
-    delegateQueue.execute(guidsSinceRunnable);
-  }
-
-  @Override
   public void fetchSince(final long timestamp, final RepositorySessionFetchRecordsDelegate delegate) {
     final RecordFilter filter = this.storeTracker.getFilter();
     final Runnable fetchSinceRunnable = new Runnable() {
       @Override
       public void run() {
         if (!isActive()) {
           delegate.onFetchFailed(new InactiveSessionException());
           return;
deleted file mode 100644
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/delegates/RepositorySessionGuidsSinceDelegate.java
+++ /dev/null
@@ -1,10 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-package org.mozilla.gecko.sync.repositories.delegates;
-
-public interface RepositorySessionGuidsSinceDelegate {
-  public void onGuidsSinceFailed(Exception ex);
-  public void onGuidsSinceSucceeded(String[] guids);
-}
--- a/mobile/android/tests/background/junit3/background_junit3_sources.mozbuild
+++ b/mobile/android/tests/background/junit3/background_junit3_sources.mozbuild
@@ -27,30 +27,27 @@ background_junit3_sources = [
     'src/org/mozilla/gecko/background/nativecode/test/TestNativeCrypto.java',
     'src/org/mozilla/gecko/background/sync/AndroidSyncTestCaseWithAccounts.java',
     'src/org/mozilla/gecko/background/sync/helpers/BookmarkHelpers.java',
     'src/org/mozilla/gecko/background/sync/helpers/DefaultBeginDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/DefaultCleanDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/DefaultDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/DefaultFetchDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/DefaultFinishDelegate.java',
-    'src/org/mozilla/gecko/background/sync/helpers/DefaultGuidsSinceDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/DefaultSessionCreationDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/DefaultStoreDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/ExpectBeginDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/ExpectBeginFailDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/ExpectFetchDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/ExpectFetchSinceDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/ExpectFinishDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/ExpectFinishFailDelegate.java',
-    'src/org/mozilla/gecko/background/sync/helpers/ExpectGuidsSinceDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/ExpectInvalidRequestFetchDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/ExpectInvalidTypeStoreDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/ExpectManyStoredDelegate.java',
-    'src/org/mozilla/gecko/background/sync/helpers/ExpectNoGUIDsSinceDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/ExpectNoStoreDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/ExpectStoreCompletedDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/ExpectStoredDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/HistoryHelpers.java',
     'src/org/mozilla/gecko/background/sync/helpers/PasswordHelpers.java',
     'src/org/mozilla/gecko/background/sync/helpers/SessionTestHelper.java',
     'src/org/mozilla/gecko/background/sync/helpers/SimpleSuccessBeginDelegate.java',
     'src/org/mozilla/gecko/background/sync/helpers/SimpleSuccessCreationDelegate.java',
--- a/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/AndroidBrowserRepositoryTestCase.java
+++ b/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/AndroidBrowserRepositoryTestCase.java
@@ -14,32 +14,30 @@ import org.mozilla.gecko.background.sync
 import org.mozilla.gecko.background.sync.helpers.DefaultSessionCreationDelegate;
 import org.mozilla.gecko.background.sync.helpers.DefaultStoreDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectBeginDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectBeginFailDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectFetchDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectFetchSinceDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectFinishDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectFinishFailDelegate;
-import org.mozilla.gecko.background.sync.helpers.ExpectGuidsSinceDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectInvalidRequestFetchDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectManyStoredDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectStoreCompletedDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectStoredDelegate;
 import org.mozilla.gecko.background.sync.helpers.SessionTestHelper;
 import org.mozilla.gecko.background.testhelpers.WaitHelper;
 import org.mozilla.gecko.db.BrowserContract;
 import org.mozilla.gecko.sync.Utils;
 import org.mozilla.gecko.sync.repositories.InactiveSessionException;
 import org.mozilla.gecko.sync.repositories.InvalidSessionTransitionException;
 import org.mozilla.gecko.sync.repositories.NoStoreDelegateException;
 import org.mozilla.gecko.sync.repositories.Repository;
 import org.mozilla.gecko.sync.repositories.RepositorySession;
 import org.mozilla.gecko.sync.repositories.android.AndroidBrowserRepositoryDataAccessor;
-import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionGuidsSinceDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionWipeDelegate;
 import org.mozilla.gecko.sync.repositories.domain.Record;
 
 import android.content.ContentValues;
 import android.content.Context;
 
 public abstract class AndroidBrowserRepositoryTestCase extends AndroidSyncTestCase {
   protected static String LOG_TAG = "BrowserRepositoryTest";
@@ -93,30 +91,16 @@ public abstract class AndroidBrowserRepo
   /**
    * Hook to return an ExpectFetchDelegate, possibly with special GUIDs ignored.
    */
   public ExpectFetchDelegate preparedExpectFetchDelegate(Record[] expected) {
     return new ExpectFetchDelegate(expected);
   }
 
   /**
-   * Hook to return an ExpectGuidsSinceDelegate, possibly with special GUIDs ignored.
-   */
-  public ExpectGuidsSinceDelegate preparedExpectGuidsSinceDelegate(String[] expected) {
-    return new ExpectGuidsSinceDelegate(expected);
-  }
-
-  /**
-   * Hook to return an ExpectGuidsSinceDelegate expecting only special GUIDs (if there are any).
-   */
-  public ExpectGuidsSinceDelegate preparedExpectOnlySpecialGuidsSinceDelegate() {
-    return new ExpectGuidsSinceDelegate(new String[] {});
-  }
-
-  /**
    * Hook to return an ExpectFetchSinceDelegate, possibly with special GUIDs ignored.
    */
   public ExpectFetchSinceDelegate preparedExpectFetchSinceDelegate(long timestamp, String[] expected) {
     return new ExpectFetchSinceDelegate(timestamp, expected);
   }
 
   public static Runnable storeRunnable(final RepositorySession session, final Record record, final DefaultStoreDelegate delegate) {
     return new Runnable() {
@@ -203,25 +187,16 @@ public abstract class AndroidBrowserRepo
       }
     };
   }
 
   public Runnable fetchAllRunnable(final RepositorySession session, final Record[] expectedRecords) {
     return fetchAllRunnable(session, preparedExpectFetchDelegate(expectedRecords));
   }
 
-  public Runnable guidsSinceRunnable(final RepositorySession session, final long timestamp, final String[] expected) {
-    return new Runnable() {
-      @Override
-      public void run() {
-        session.guidsSince(timestamp, preparedExpectGuidsSinceDelegate(expected));
-      }
-    };
-  }
-
   public Runnable fetchSinceRunnable(final RepositorySession session, final long timestamp, final String[] expected) {
     return new Runnable() {
       @Override
       public void run() {
         session.fetchSince(timestamp, preparedExpectFetchSinceDelegate(timestamp, expected));
       }
     };
   }
@@ -255,18 +230,16 @@ public abstract class AndroidBrowserRepo
   protected abstract AndroidBrowserRepositoryDataAccessor getDataAccessor();
 
   protected static void doStore(RepositorySession session, Record[] records) {
     performWait(storeManyRunnable(session, records));
   }
 
   // Tests to implement
   public abstract void testFetchAll();
-  public abstract void testGuidsSinceReturnMultipleRecords();
-  public abstract void testGuidsSinceReturnNoRecords();
   public abstract void testFetchSinceOneRecord();
   public abstract void testFetchSinceReturnNoRecords();
   public abstract void testFetchOneRecordByGuid();
   public abstract void testFetchMultipleRecordsByGuids();
   public abstract void testFetchNoRecordByGuid();
   public abstract void testWipe();
   public abstract void testStore();
   public abstract void testRemoteNewerTimeStamp();
@@ -333,45 +306,16 @@ public abstract class AndroidBrowserRepo
 
     performWait(cleanRunnable);
     performWait(fetchAllRunnable(session, preparedExpectFetchDelegate(new Record[] { keep0, keep1, keep2})));
     closeDataAccessor(db);
     dispose(session);
   }
 
   /*
-   * Tests for guidsSince
-   */
-  protected void guidsSinceReturnMultipleRecords(Record record0, Record record1) {
-    RepositorySession session = createAndBeginSession();
-    long timestamp = System.currentTimeMillis();
-
-    String[] expected = new String[2];
-    expected[0] = record0.guid;
-    expected[1] = record1.guid;
-
-    Logger.debug(getName(), "Storing two records...");
-    performWait(storeManyRunnable(session, new Record[] { record0, record1 }));
-    Logger.debug(getName(), "Getting guids since " + timestamp + "; expecting " + expected.length);
-    performWait(guidsSinceRunnable(session, timestamp, expected));
-    dispose(session);
-  }
-
-  protected void guidsSinceReturnNoRecords(Record record0) {
-    RepositorySession session = createAndBeginSession();
-
-    //  Store 1 record in the past.
-    performWait(storeRunnable(session, record0));
-
-    String[] expected = {};
-    performWait(guidsSinceRunnable(session, System.currentTimeMillis() + 1000, expected));
-    dispose(session);
-  }
-
-  /*
    * Tests for fetchSince
    */
   protected void fetchSinceOneRecord(Record record0, Record record1) {
     RepositorySession session = createAndBeginSession();
 
     performWait(storeRunnable(session, record0));
     long timestamp = System.currentTimeMillis();
     Logger.debug("fetchSinceOneRecord", "Entering synchronized section. Timestamp " + timestamp);
@@ -779,39 +723,16 @@ public abstract class AndroidBrowserRepo
      } catch (InactiveSessionException e) {
        // Yay.
        dispose(session);
        return;
      };
      fail("Should have caught InactiveSessionException.");
    }
 
-   public void testGuidsSinceOnUnstartedSession() {
-     final RepositorySession session = createSession();
-     Runnable run = new Runnable() {
-       @Override
-       public void run() {
-         session.guidsSince(System.currentTimeMillis(),
-             new RepositorySessionGuidsSinceDelegate() {
-           public void onGuidsSinceSucceeded(String[] guids) {
-             fail("Session inactive, should fail");
-             performNotify();
-           }
-
-           public void onGuidsSinceFailed(Exception ex) {
-             verifyInactiveException(ex);
-             performNotify();
-           }
-         });
-       }
-     };
-     performWait(run);
-     dispose(session);
-   }
-
    private static void verifyInactiveException(Exception ex) {
      if (!(ex instanceof InactiveSessionException)) {
        fail("Wrong exception type");
      }
    }
 
    protected void closeDataAccessor(AndroidBrowserRepositoryDataAccessor dataAccessor) {
    }
--- a/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestAndroidBrowserBookmarksRepository.java
+++ b/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestAndroidBrowserBookmarksRepository.java
@@ -5,17 +5,16 @@ package org.mozilla.gecko.background.db;
 
 import java.util.ArrayList;
 
 import org.json.simple.JSONArray;
 import org.mozilla.gecko.background.sync.helpers.BookmarkHelpers;
 import org.mozilla.gecko.background.sync.helpers.ExpectFetchDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectFetchSinceDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectFinishDelegate;
-import org.mozilla.gecko.background.sync.helpers.ExpectGuidsSinceDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectInvalidTypeStoreDelegate;
 import org.mozilla.gecko.db.BrowserContract;
 import org.mozilla.gecko.sync.Utils;
 import org.mozilla.gecko.sync.repositories.InactiveSessionException;
 import org.mozilla.gecko.sync.repositories.NullCursorException;
 import org.mozilla.gecko.sync.repositories.RepositorySession;
 import org.mozilla.gecko.sync.repositories.android.AndroidBrowserBookmarksDataAccessor;
 import org.mozilla.gecko.sync.repositories.android.AndroidBrowserBookmarksRepository;
@@ -67,34 +66,16 @@ public class TestAndroidBrowserBookmarks
   @Override
   public ExpectFetchDelegate preparedExpectFetchDelegate(Record[] expected) {
     ExpectFetchDelegate delegate = new ExpectFetchDelegate(expected);
     delegate.ignore.addAll(AndroidBrowserBookmarksRepositorySession.SPECIAL_GUIDS_MAP.keySet());
     return delegate;
   }
 
   /**
-   * Hook to return an ExpectGuidsSinceDelegate expecting only special GUIDs (if there are any).
-   */
-  public ExpectGuidsSinceDelegate preparedExpectOnlySpecialGuidsSinceDelegate() {
-    ExpectGuidsSinceDelegate delegate = new ExpectGuidsSinceDelegate(AndroidBrowserBookmarksRepositorySession.SPECIAL_GUIDS_MAP.keySet().toArray(new String[] {}));
-    return delegate;
-  }
-
-  /**
-   * Hook to return an ExpectGuidsSinceDelegate, possibly with special GUIDs ignored.
-   */
-  @Override
-  public ExpectGuidsSinceDelegate preparedExpectGuidsSinceDelegate(String[] expected) {
-    ExpectGuidsSinceDelegate delegate = new ExpectGuidsSinceDelegate(expected);
-    delegate.ignore.addAll(AndroidBrowserBookmarksRepositorySession.SPECIAL_GUIDS_MAP.keySet());
-    return delegate;
-  }
-
-  /**
    * Hook to return an ExpectFetchSinceDelegate, possibly with special GUIDs ignored.
    */
   public ExpectFetchSinceDelegate preparedExpectFetchSinceDelegate(long timestamp, String[] expected) {
     ExpectFetchSinceDelegate delegate = new ExpectFetchSinceDelegate(timestamp, expected);
     delegate.ignore.addAll(AndroidBrowserBookmarksRepositorySession.SPECIAL_GUIDS_MAP.keySet());
     return delegate;
   }
 
@@ -131,28 +112,16 @@ public class TestAndroidBrowserBookmarks
     Record[] expected = new Record[3];
     expected[0] = BookmarkHelpers.createFolder1();
     expected[1] = BookmarkHelpers.createBookmark1();
     expected[2] = BookmarkHelpers.createBookmark2();
     basicFetchAllTest(expected);
   }
 
   @Override
-  public void testGuidsSinceReturnMultipleRecords() {
-    BookmarkRecord record0 = BookmarkHelpers.createBookmark1();
-    BookmarkRecord record1 = BookmarkHelpers.createBookmark2();
-    guidsSinceReturnMultipleRecords(record0, record1);
-  }
-
-  @Override
-  public void testGuidsSinceReturnNoRecords() {
-    guidsSinceReturnNoRecords(BookmarkHelpers.createBookmarkInMobileFolder1());
-  }
-
-  @Override
   public void testFetchSinceOneRecord() {
     fetchSinceOneRecord(BookmarkHelpers.createBookmarkInMobileFolder1(),
         BookmarkHelpers.createBookmarkInMobileFolder2());
   }
 
   @Override
   public void testFetchSinceReturnNoRecords() {
     fetchSinceReturnNoRecords(BookmarkHelpers.createBookmark1());
--- a/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestAndroidBrowserHistoryRepository.java
+++ b/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestAndroidBrowserHistoryRepository.java
@@ -83,28 +83,16 @@ public class TestAndroidBrowserHistoryRe
         HistoryHelpers.createHistory2(),
         HistoryHelpers.createHistory3(),
         HistoryHelpers.createHistory4(),
         HistoryHelpers.createHistory5()
         );
   }
 
   @Override
-  public void testGuidsSinceReturnMultipleRecords() {
-    HistoryRecord record0 = HistoryHelpers.createHistory1();
-    HistoryRecord record1 = HistoryHelpers.createHistory2();
-    guidsSinceReturnMultipleRecords(record0, record1);
-  }
-
-  @Override
-  public void testGuidsSinceReturnNoRecords() {
-    guidsSinceReturnNoRecords(HistoryHelpers.createHistory3());
-  }
-
-  @Override
   public void testFetchSinceOneRecord() {
     fetchSinceOneRecord(HistoryHelpers.createHistory1(),
         HistoryHelpers.createHistory2());
   }
 
   @Override
   public void testFetchSinceReturnNoRecords() {
     fetchSinceReturnNoRecords(HistoryHelpers.createHistory3());
--- a/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestFormHistoryRepositorySession.java
+++ b/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestFormHistoryRepositorySession.java
@@ -3,17 +3,16 @@
 
 package org.mozilla.gecko.background.db;
 
 import java.util.concurrent.ExecutorService;
 
 import org.mozilla.gecko.background.helpers.AndroidSyncTestCase;
 import org.mozilla.gecko.background.sync.helpers.ExpectFetchDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectFetchSinceDelegate;
-import org.mozilla.gecko.background.sync.helpers.ExpectGuidsSinceDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectNoStoreDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectStoredDelegate;
 import org.mozilla.gecko.background.sync.helpers.SessionTestHelper;
 import org.mozilla.gecko.background.testhelpers.WaitHelper;
 import org.mozilla.gecko.db.BrowserContract;
 import org.mozilla.gecko.sync.repositories.InactiveSessionException;
 import org.mozilla.gecko.sync.repositories.NoContentProviderException;
 import org.mozilla.gecko.sync.repositories.NoStoreDelegateException;
@@ -294,40 +293,16 @@ public class TestFormHistoryRepositorySe
     performWait(fetchSinceRunnable(session,
         after3, new String[] { deleted2.guid }));
     performWait(fetchSinceRunnable(session,
         after4, new String[] { }));
 
     session.abort();
   }
 
-  protected Runnable guidsSinceRunnable(final RepositorySession session, final long timestamp, final String[] expectedGuids) {
-    return new Runnable() {
-      @Override
-      public void run() {
-        session.guidsSince(timestamp, new ExpectGuidsSinceDelegate(expectedGuids));
-      }
-    };
-  }
-
-  public void testGuidsSince() throws NoContentProviderException, RemoteException {
-    final FormHistoryRepositorySession session = createAndBeginSession();
-
-    insertTwoRecords(session);
-
-    performWait(guidsSinceRunnable(session,
-        after0, new String[] { regular1.guid, deleted1.guid }));
-    performWait(guidsSinceRunnable(session,
-        after1, new String[] { deleted1.guid}));
-    performWait(guidsSinceRunnable(session,
-        after2, new String[] { }));
-
-    session.abort();
-  }
-
   protected Runnable storeRunnable(final RepositorySession session, final Record record, final RepositorySessionStoreDelegate delegate) {
     return new Runnable() {
       @Override
       public void run() {
         session.setStoreDelegate(delegate);
         try {
           session.store(record);
           session.storeDone();
--- a/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestPasswordsRepository.java
+++ b/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestPasswordsRepository.java
@@ -4,17 +4,16 @@
 package org.mozilla.gecko.background.db;
 
 import java.util.HashSet;
 import java.util.Set;
 
 import org.mozilla.gecko.background.helpers.AndroidSyncTestCase;
 import org.mozilla.gecko.background.sync.helpers.ExpectFetchDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectFetchSinceDelegate;
-import org.mozilla.gecko.background.sync.helpers.ExpectGuidsSinceDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectNoStoreDelegate;
 import org.mozilla.gecko.background.sync.helpers.ExpectStoredDelegate;
 import org.mozilla.gecko.background.sync.helpers.PasswordHelpers;
 import org.mozilla.gecko.background.sync.helpers.SessionTestHelper;
 import org.mozilla.gecko.background.testhelpers.WaitHelper;
 import org.mozilla.gecko.db.BrowserContract;
 import org.mozilla.gecko.sync.Utils;
 import org.mozilla.gecko.sync.repositories.InactiveSessionException;
@@ -52,45 +51,16 @@ public class TestPasswordsRepository ext
 
     performWait(storeRunnable(session, expected[0]));
     performWait(storeRunnable(session, expected[1]));
 
     performWait(fetchAllRunnable(session, expected));
     dispose(session);
   }
 
-  public void testGuidsSinceReturnMultipleRecords() {
-    RepositorySession session = createAndBeginSession();
-
-    PasswordRecord record1 = PasswordHelpers.createPassword1();
-    PasswordRecord record2 = PasswordHelpers.createPassword2();
-
-    updatePassword(NEW_PASSWORD1, record1);
-    long timestamp = updatePassword(NEW_PASSWORD2, record2);
-
-    String[] expected = new String[] { record1.guid, record2.guid };
-
-    performWait(storeRunnable(session, record1));
-    performWait(storeRunnable(session, record2));
-
-    performWait(guidsSinceRunnable(session, timestamp, expected));
-    dispose(session);
-  }
-
-  public void testGuidsSinceReturnNoRecords() {
-    RepositorySession session = createAndBeginSession();
-
-    //  Store 1 record in the past.
-    performWait(storeRunnable(session, PasswordHelpers.createPassword1()));
-
-    String[] expected = {};
-    performWait(guidsSinceRunnable(session, System.currentTimeMillis() + 1000, expected));
-    dispose(session);
-  }
-
   public void testFetchSinceOneRecord() {
     RepositorySession session = createAndBeginSession();
 
     // Passwords fetchSince checks timePasswordChanged, not insertion time.
     PasswordRecord record1 = PasswordHelpers.createPassword1();
     long timeModified1 = updatePassword(NEW_PASSWORD1, record1);
     performWait(storeRunnable(session, record1));
 
@@ -444,25 +414,16 @@ public class TestPasswordsRepository ext
     return new Runnable() {
       @Override
       public void run() {
         session.fetchAll(new ExpectFetchDelegate(records));
       }
     };
   }
 
-  private static Runnable guidsSinceRunnable(final RepositorySession session, final long timestamp, final String[] expected) {
-    return new Runnable() {
-      @Override
-      public void run() {
-        session.guidsSince(timestamp, new ExpectGuidsSinceDelegate(expected));
-      }
-    };
-  }
-
   private static Runnable fetchSinceRunnable(final RepositorySession session, final long timestamp, final String[] expected) {
     return new Runnable() {
       @Override
       public void run() {
         session.fetchSince(timestamp, new ExpectFetchSinceDelegate(timestamp, expected));
       }
     };
   }
deleted file mode 100644
--- a/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/sync/helpers/DefaultGuidsSinceDelegate.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-package org.mozilla.gecko.background.sync.helpers;
-
-import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionGuidsSinceDelegate;
-
-public class DefaultGuidsSinceDelegate extends DefaultDelegate implements RepositorySessionGuidsSinceDelegate {
-
-  @Override
-  public void onGuidsSinceFailed(Exception ex) {
-    performNotify("shouldn't fail", ex);
-  }
-
-  @Override
-  public void onGuidsSinceSucceeded(String[] guids) {
-    performNotify("default guids since delegate called", null);
-  }
-}
deleted file mode 100644
--- a/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/sync/helpers/ExpectGuidsSinceDelegate.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-package org.mozilla.gecko.background.sync.helpers;
-
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-import junit.framework.AssertionFailedError;
-
-public class ExpectGuidsSinceDelegate extends DefaultGuidsSinceDelegate {
-  private String[] expected;
-  public Set<String> ignore = new HashSet<String>();
-
-  public ExpectGuidsSinceDelegate(String[] guids) {
-    expected = guids;
-    Arrays.sort(expected);
-  }
-
-  @Override
-  public void onGuidsSinceSucceeded(String[] guids) {
-    AssertionFailedError err = null;
-    try {
-      int notIgnored = 0;
-      for (String guid : guids) {
-        if (!ignore.contains(guid)) {
-          notIgnored++;
-          assertFalse(-1 == Arrays.binarySearch(this.expected, guid));
-        }
-      }
-      assertEquals(this.expected.length, notIgnored);
-    } catch (AssertionFailedError e) {
-      err = e;
-    }
-    performNotify(err);
-  }
-}
deleted file mode 100644
--- a/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/sync/helpers/ExpectNoGUIDsSinceDelegate.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-package org.mozilla.gecko.background.sync.helpers;
-
-import static junit.framework.Assert.assertEquals;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import junit.framework.AssertionFailedError;
-
-public class ExpectNoGUIDsSinceDelegate extends DefaultGuidsSinceDelegate {
-
-  public Set<String> ignore = new HashSet<String>();
-
-  @Override
-  public void onGuidsSinceSucceeded(String[] guids) {
-    AssertionFailedError err = null;
-    try {
-      int nonIgnored = 0;
-      for (int i = 0; i < guids.length; i++) {
-        if (!ignore.contains(guids[i])) {
-          nonIgnored++;
-        }
-      }
-      assertEquals(0, nonIgnored);
-    } catch (AssertionFailedError e) {
-      err = e;
-    }
-    performNotify(err);
-  }
-}
--- a/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/testhelpers/WBORepository.java
+++ b/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/testhelpers/WBORepository.java
@@ -14,17 +14,16 @@ import org.mozilla.gecko.sync.repositori
 import org.mozilla.gecko.sync.repositories.NoStoreDelegateException;
 import org.mozilla.gecko.sync.repositories.RecordFilter;
 import org.mozilla.gecko.sync.repositories.Repository;
 import org.mozilla.gecko.sync.repositories.StoreTrackingRepositorySession;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionBeginDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionCreationDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFetchRecordsDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFinishDelegate;
-import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionGuidsSinceDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionWipeDelegate;
 import org.mozilla.gecko.sync.repositories.domain.Record;
 
 import android.content.Context;
 
 public class WBORepository extends Repository {
 
   public class WBORepositoryStats {
@@ -63,22 +62,16 @@ public class WBORepository extends Repos
     @Override
     protected synchronized void trackGUID(String guid) {
       if (wboRepository.shouldTrack()) {
         super.trackGUID(guid);
       }
     }
 
     @Override
-    public void guidsSince(long timestamp,
-                           RepositorySessionGuidsSinceDelegate delegate) {
-      throw new RuntimeException("guidsSince not implemented.");
-    }
-
-    @Override
     public void fetchSince(long timestamp,
                            RepositorySessionFetchRecordsDelegate delegate) {
       long fetchBegan  = now();
       stats.fetchBegan = fetchBegan;
       RecordFilter filter = storeTracker.getFilter();
 
       for (Entry<String, Record> entry : wbos.entrySet()) {
         Record record = entry.getValue();
--- a/mobile/android/tests/background/junit4/src/org/mozilla/gecko/background/testhelpers/WBORepository.java
+++ b/mobile/android/tests/background/junit4/src/org/mozilla/gecko/background/testhelpers/WBORepository.java
@@ -10,17 +10,16 @@ import org.mozilla.gecko.sync.repositori
 import org.mozilla.gecko.sync.repositories.NoStoreDelegateException;
 import org.mozilla.gecko.sync.repositories.RecordFilter;
 import org.mozilla.gecko.sync.repositories.Repository;
 import org.mozilla.gecko.sync.repositories.StoreTrackingRepositorySession;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionBeginDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionCreationDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFetchRecordsDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFinishDelegate;
-import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionGuidsSinceDelegate;
 import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionWipeDelegate;
 import org.mozilla.gecko.sync.repositories.domain.Record;
 
 import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -62,22 +61,16 @@ public class WBORepository extends Repos
     @Override
     protected synchronized void trackGUID(String guid) {
       if (wboRepository.shouldTrack()) {
         super.trackGUID(guid);
       }
     }
 
     @Override
-    public void guidsSince(long timestamp,
-                           RepositorySessionGuidsSinceDelegate delegate) {
-      throw new RuntimeException("guidsSince not implemented.");
-    }
-
-    @Override
     public void fetchSince(long timestamp,
                            RepositorySessionFetchRecordsDelegate delegate) {
       long fetchBegan  = now();
       stats.fetchBegan = fetchBegan;
       RecordFilter filter = storeTracker.getFilter();
 
       for (Entry<String, Record> entry : wbos.entrySet()) {
         Record record = entry.getValue();