@SmallTest
  @Feature({"Sync"})
  public void testRefreshShouldReadValuesFromDiskWithSpecificTypes() {
    // Store some preferences for ModelTypes and account. We are using the helper class
    // for this, so we don't have to deal with low-level details such as preference keys.
    InvalidationPreferences invalidationPreferences = new InvalidationPreferences(mContext);
    InvalidationPreferences.EditContext edit = invalidationPreferences.edit();
    Set<String> storedModelTypes = new HashSet<String>();
    storedModelTypes.add(ModelType.BOOKMARK.name());
    storedModelTypes.add(ModelType.TYPED_URL.name());
    invalidationPreferences.setSyncTypes(edit, storedModelTypes);
    Account storedAccount = AccountManagerHelper.createAccountFromName("*****@*****.**");
    invalidationPreferences.setAccount(edit, storedAccount);
    invalidationPreferences.commit(edit);

    // Ensure all calls to {@link InvalidationController#setRegisteredTypes} store values
    // we can inspect in the test.
    final AtomicReference<Account> resultAccount = new AtomicReference<Account>();
    final AtomicBoolean resultAllTypes = new AtomicBoolean();
    final AtomicReference<Set<ModelType>> resultTypes = new AtomicReference<Set<ModelType>>();
    InvalidationController controller =
        new InvalidationController(mContext) {
          @Override
          public void setRegisteredTypes(Account account, boolean allTypes, Set<ModelType> types) {
            resultAccount.set(account);
            resultAllTypes.set(allTypes);
            resultTypes.set(types);
          }
        };

    // Execute the test.
    controller.refreshRegisteredTypes();

    // Validate the values.
    assertEquals(storedAccount, resultAccount.get());
    assertEquals(false, resultAllTypes.get());
    assertEquals(ModelType.syncTypesToModelTypes(storedModelTypes), resultTypes.get());
  }