From 2cde72ea2c42e665df3408a52148edde3a343a0d Mon Sep 17 00:00:00 2001 From: Nick Alexander Date: Wed, 13 Nov 2013 17:03:18 -0800 Subject: [PATCH] Backed out changeset 569d58c88da3 (bug 922147) --- mobile/android/base/android-services.mozbuild | 9 +-- .../background/common/GlobalConstants.java.in | 2 +- mobile/android/base/sync/GlobalSession.java | 68 +++++++++++++------ .../android/base/sync/JSONRecordFetcher.java | 12 ++-- mobile/android/base/sync/MetaGlobal.java | 16 ++--- .../base/sync/PersistedMetaGlobal.java | 6 +- .../android/base/sync/SyncConfiguration.java | 37 ++++------ .../sync/config/ClientRecordTerminator.java | 9 ++- .../base/sync/net/SyncStorageRequest.java | 7 +- .../sync/net/SyncStorageRequestDelegate.java | 3 +- .../receivers/SyncAccountDeletedService.java | 3 +- .../base/sync/receivers/UpgradeReceiver.java | 3 +- .../ConstrainedServer11Repository.java | 7 +- .../sync/repositories/Server11Repository.java | 42 +++++++----- .../Server11RepositorySession.java | 9 ++- ...ndroidBrowserBookmarksServerSyncStage.java | 13 ++-- .../AndroidBrowserHistoryServerSyncStage.java | 9 ++- .../sync/stage/EnsureCrypto5KeysStage.java | 5 +- .../base/sync/stage/FetchMetaGlobalStage.java | 4 +- .../stage/FormHistoryServerSyncStage.java | 9 ++- .../SafeConstrainedServer11Repository.java | 11 +-- .../base/sync/stage/ServerSyncStage.java | 18 ++--- .../sync/stage/SyncClientsEngineStage.java | 9 ++- .../base/sync/syncadapter/SyncAdapter.java | 12 ++-- .../junit3/src/sync/TestClientsStage.java | 5 +- .../junit3/src/sync/TestResetting.java | 5 +- .../src/sync/TestSyncConfiguration.java | 20 +++--- .../src/testhelpers/MockGlobalSession.java | 3 +- .../testhelpers/MockPrefsGlobalSession.java | 17 +---- 29 files changed, 187 insertions(+), 186 deletions(-) diff --git a/mobile/android/base/android-services.mozbuild b/mobile/android/base/android-services.mozbuild index c9e65e1e193..c8d4367c20f 100644 --- a/mobile/android/base/android-services.mozbuild +++ b/mobile/android/base/android-services.mozbuild @@ -552,6 +552,7 @@ sync_java_files = [ 'sync/config/ClientRecordTerminator.java', 'sync/config/ConfigurationMigrator.java', 'sync/CredentialException.java', + 'sync/CredentialsSource.java', 'sync/crypto/CryptoException.java', 'sync/crypto/CryptoInfo.java', 'sync/crypto/HKDF.java', @@ -786,8 +787,8 @@ sync_java_files = [ ] sync_generated_java_files = [ - 'background/common/GlobalConstants.java', - 'sync/SyncConstants.java', - 'background/announcements/AnnouncementsConstants.java', - 'background/healthreport/HealthReportConstants.java', + 'org/mozilla/gecko/background/announcements/AnnouncementsConstants.java', + 'org/mozilla/gecko/background/common/GlobalConstants.java', + 'org/mozilla/gecko/background/healthreport/HealthReportConstants.java', + 'org/mozilla/gecko/sync/SyncConstants.java', ] diff --git a/mobile/android/base/background/common/GlobalConstants.java.in b/mobile/android/base/background/common/GlobalConstants.java.in index d74fbc9ba11..68f373b7c7d 100644 --- a/mobile/android/base/background/common/GlobalConstants.java.in +++ b/mobile/android/base/background/common/GlobalConstants.java.in @@ -44,7 +44,7 @@ public class GlobalConstants { // Fennec's prefs branch and pref name. // Eventually Fennec might listen to startup notifications and // do this automatically, but this will do for now. See Bug 800244. - public static String GECKO_PREFERENCES_CLASS = "org.mozilla.gecko.GeckoPreferences"; + public static String GECKO_PREFERENCES_CLASS = "org.mozilla.gecko.preferences.GeckoPreferences"; public static String GECKO_BROADCAST_ANNOUNCEMENTS_PREF_METHOD = "broadcastAnnouncementsPref"; public static String GECKO_BROADCAST_HEALTHREPORT_UPLOAD_PREF_METHOD = "broadcastHealthReportUploadPref"; public static String GECKO_BROADCAST_HEALTHREPORT_PRUNE_METHOD = "broadcastHealthReportPrune"; diff --git a/mobile/android/base/sync/GlobalSession.java b/mobile/android/base/sync/GlobalSession.java index 86adf1c426e..aaffb59e2cc 100644 --- a/mobile/android/base/sync/GlobalSession.java +++ b/mobile/android/base/sync/GlobalSession.java @@ -29,7 +29,6 @@ import org.mozilla.gecko.sync.delegates.JSONRecordFetchDelegate; import org.mozilla.gecko.sync.delegates.KeyUploadDelegate; import org.mozilla.gecko.sync.delegates.MetaGlobalDelegate; import org.mozilla.gecko.sync.delegates.WipeServerDelegate; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; import org.mozilla.gecko.sync.net.BaseResource; import org.mozilla.gecko.sync.net.HttpResponseObserver; import org.mozilla.gecko.sync.net.SyncResponse; @@ -59,7 +58,7 @@ import android.content.SharedPreferences; import android.os.Bundle; import ch.boye.httpclientandroidlib.HttpResponse; -public class GlobalSession implements PrefsSource, HttpResponseObserver { +public class GlobalSession implements CredentialsSource, PrefsSource, HttpResponseObserver { private static final String LOG_TAG = "GlobalSession"; public static final String API_VERSION = "1.1"; @@ -90,17 +89,39 @@ public class GlobalSession implements PrefsSource, HttpResponseObserver { /* * Config passthrough for convenience. */ - public AuthHeaderProvider getAuthHeaderProvider() { - return config.getAuthHeaderProvider(); + @Override + public String credentials() { + return config.credentials(); } public URI wboURI(String collection, String id) throws URISyntaxException { return config.wboURI(collection, id); } - public GlobalSession(String serverURL, + /* + * Validators. + */ + private static boolean isInvalidString(String s) { + return s == null || + s.trim().length() == 0; + } + + private static boolean anyInvalidStrings(String s, String...strings) { + if (isInvalidString(s)) { + return true; + } + for (String str : strings) { + if (isInvalidString(str)) { + return true; + } + } + return false; + } + + public GlobalSession(String userAPI, + String serverURL, String username, - AuthHeaderProvider authHeaderProvider, + String password, String prefsPath, KeyBundle syncKeyBundle, GlobalSessionCallback callback, @@ -108,13 +129,14 @@ public class GlobalSession implements PrefsSource, HttpResponseObserver { Bundle extras, ClientsDataDelegate clientsDelegate) throws SyncConfigurationException, IllegalArgumentException, IOException, ParseException, NonObjectJSONException { - if (username == null) { - throw new IllegalArgumentException("username must not be null."); - } if (callback == null) { throw new IllegalArgumentException("Must provide a callback to GlobalSession constructor."); } + if (anyInvalidStrings(username, password)) { + throw new SyncConfigurationException(); + } + Logger.debug(LOG_TAG, "GlobalSession initialized with bundle " + extras); URI serverURI; try { @@ -133,9 +155,11 @@ public class GlobalSession implements PrefsSource, HttpResponseObserver { this.context = context; this.clientsDelegate = clientsDelegate; - config = new SyncConfiguration(username, authHeaderProvider, prefsPath, this); - + config = new SyncConfiguration(prefsPath, this); + config.userAPI = userAPI; config.serverURL = serverURI; + config.username = username; + config.password = password; config.syncKeyBundle = syncKeyBundle; registerCommands(); @@ -545,7 +569,7 @@ public class GlobalSession implements PrefsSource, HttpResponseObserver { } public void fetchInfoCollections(JSONRecordFetchDelegate callback) throws URISyntaxException { - final JSONRecordFetcher fetcher = new JSONRecordFetcher(config.infoCollectionsURL(), getAuthHeaderProvider()); + final JSONRecordFetcher fetcher = new JSONRecordFetcher(config.infoCollectionsURL(), credentials()); fetcher.fetch(callback); } @@ -560,6 +584,7 @@ public class GlobalSession implements PrefsSource, HttpResponseObserver { public void uploadKeys(final CollectionKeys keys, final KeyUploadDelegate keyUploadDelegate) { SyncStorageRecordRequest request; + final GlobalSession self = this; try { request = new SyncStorageRecordRequest(this.config.keysURI()); } catch (URISyntaxException e) { @@ -584,7 +609,7 @@ public class GlobalSession implements PrefsSource, HttpResponseObserver { @Override public void handleRequestFailure(SyncStorageResponse response) { Logger.debug(LOG_TAG, "Failed to upload keys."); - GlobalSession.this.interpretHTTPFailure(response.httpResponse()); + self.interpretHTTPFailure(response.httpResponse()); BaseResource.consumeEntity(response); // The exception thrown should not need the body of the response. keyUploadDelegate.onKeyUploadFailed(new HTTPFailureException(response)); } @@ -596,8 +621,8 @@ public class GlobalSession implements PrefsSource, HttpResponseObserver { } @Override - public AuthHeaderProvider getAuthHeaderProvider() { - return GlobalSession.this.getAuthHeaderProvider(); + public String credentials() { + return self.credentials(); } }; @@ -723,7 +748,7 @@ public class GlobalSession implements PrefsSource, HttpResponseObserver { final MetaGlobal mg = session.generateNewMetaGlobal(); - session.wipeServer(session.getAuthHeaderProvider(), new WipeServerDelegate() { + session.wipeServer(session, new WipeServerDelegate() { @Override public void onWiped(long timestamp) { @@ -823,12 +848,12 @@ public class GlobalSession implements PrefsSource, HttpResponseObserver { // reset client to prompt reupload. // If sync ID mismatch: take that syncID and reset client. - protected void wipeServer(final AuthHeaderProvider authHeaderProvider, final WipeServerDelegate wipeDelegate) { + protected void wipeServer(final CredentialsSource credentials, final WipeServerDelegate wipeDelegate) { SyncStorageRequest request; final GlobalSession self = this; try { - request = new SyncStorageRequest(config.storageURL()); + request = new SyncStorageRequest(config.storageURL(false)); } catch (URISyntaxException ex) { Logger.warn(LOG_TAG, "Invalid URI in wipeServer."); wipeDelegate.onWipeFailed(ex); @@ -864,8 +889,8 @@ public class GlobalSession implements PrefsSource, HttpResponseObserver { } @Override - public AuthHeaderProvider getAuthHeaderProvider() { - return GlobalSession.this.getAuthHeaderProvider(); + public String credentials() { + return credentials.credentials(); } }; request.delete(); @@ -957,6 +982,7 @@ public class GlobalSession implements PrefsSource, HttpResponseObserver { public MetaGlobal generateNewMetaGlobal() { final String newSyncID = Utils.generateGuid(); final String metaURL = this.config.metaURL(); + final String credentials = this.credentials(); ExtendedJSONObject engines = new ExtendedJSONObject(); for (String engineName : enabledEngineNames()) { @@ -976,7 +1002,7 @@ public class GlobalSession implements PrefsSource, HttpResponseObserver { engines.put(engineName, engineSettings.toJSONObject()); } - MetaGlobal metaGlobal = new MetaGlobal(metaURL, this.getAuthHeaderProvider()); + MetaGlobal metaGlobal = new MetaGlobal(metaURL, credentials); metaGlobal.setSyncID(newSyncID); metaGlobal.setStorageVersion(STORAGE_VERSION); metaGlobal.setEngines(engines); diff --git a/mobile/android/base/sync/JSONRecordFetcher.java b/mobile/android/base/sync/JSONRecordFetcher.java index b43487c2e40..168b194206c 100644 --- a/mobile/android/base/sync/JSONRecordFetcher.java +++ b/mobile/android/base/sync/JSONRecordFetcher.java @@ -9,7 +9,6 @@ import java.util.concurrent.TimeUnit; import org.mozilla.gecko.background.common.log.Logger; import org.mozilla.gecko.sync.delegates.JSONRecordFetchDelegate; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; import org.mozilla.gecko.sync.net.SyncStorageRecordRequest; import org.mozilla.gecko.sync.net.SyncStorageRequestDelegate; import org.mozilla.gecko.sync.net.SyncStorageResponse; @@ -22,13 +21,13 @@ public class JSONRecordFetcher { private static final long DEFAULT_AWAIT_TIMEOUT_MSEC = 2 * 60 * 1000; // Two minutes. private static final String LOG_TAG = "JSONRecordFetcher"; - protected final AuthHeaderProvider authHeaderProvider; + protected final String credentials; protected final String uri; protected JSONRecordFetchDelegate delegate; - public JSONRecordFetcher(final String uri, final AuthHeaderProvider authHeaderProvider) { + public JSONRecordFetcher(final String uri, final String credentials) { this.uri = uri; - this.authHeaderProvider = authHeaderProvider; + this.credentials = credentials; } protected String getURI() { @@ -38,9 +37,8 @@ public class JSONRecordFetcher { private class JSONFetchHandler implements SyncStorageRequestDelegate { // SyncStorageRequestDelegate methods for fetching. - @Override - public AuthHeaderProvider getAuthHeaderProvider() { - return authHeaderProvider; + public String credentials() { + return credentials; } public String ifUnmodifiedSince() { diff --git a/mobile/android/base/sync/MetaGlobal.java b/mobile/android/base/sync/MetaGlobal.java index dadcebffb91..99baeb83af7 100644 --- a/mobile/android/base/sync/MetaGlobal.java +++ b/mobile/android/base/sync/MetaGlobal.java @@ -16,7 +16,6 @@ import org.mozilla.gecko.background.common.log.Logger; import org.mozilla.gecko.sync.MetaGlobalException.MetaGlobalMalformedSyncIDException; import org.mozilla.gecko.sync.MetaGlobalException.MetaGlobalMalformedVersionException; import org.mozilla.gecko.sync.delegates.MetaGlobalDelegate; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; import org.mozilla.gecko.sync.net.SyncStorageRecordRequest; import org.mozilla.gecko.sync.net.SyncStorageRequestDelegate; import org.mozilla.gecko.sync.net.SyncStorageResponse; @@ -24,6 +23,7 @@ import org.mozilla.gecko.sync.net.SyncStorageResponse; public class MetaGlobal implements SyncStorageRequestDelegate { private static final String LOG_TAG = "MetaGlobal"; protected String metaURL; + protected String credentials; // Fields. protected ExtendedJSONObject engines; @@ -40,11 +40,10 @@ public class MetaGlobal implements SyncStorageRequestDelegate { // A little hack so we can use the same delegate implementation for upload and download. private boolean isUploading; - protected final AuthHeaderProvider authHeaderProvider; - public MetaGlobal(String metaURL, AuthHeaderProvider authHeaderProvider) { - this.metaURL = metaURL; - this.authHeaderProvider = authHeaderProvider; + public MetaGlobal(String metaURL, String credentials) { + this.metaURL = metaURL; + this.credentials = credentials; } public void fetch(MetaGlobalDelegate delegate) { @@ -248,12 +247,7 @@ public class MetaGlobal implements SyncStorageRequestDelegate { // SyncStorageRequestDelegate methods for fetching. public String credentials() { - return null; - } - - @Override - public AuthHeaderProvider getAuthHeaderProvider() { - return authHeaderProvider; + return this.credentials; } public String ifUnmodifiedSince() { diff --git a/mobile/android/base/sync/PersistedMetaGlobal.java b/mobile/android/base/sync/PersistedMetaGlobal.java index d3467545c2a..19753d40570 100644 --- a/mobile/android/base/sync/PersistedMetaGlobal.java +++ b/mobile/android/base/sync/PersistedMetaGlobal.java @@ -5,7 +5,7 @@ package org.mozilla.gecko.sync; import org.mozilla.gecko.background.common.log.Logger; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; +import org.mozilla.gecko.sync.CryptoRecord; import android.content.SharedPreferences; @@ -32,7 +32,7 @@ public class PersistedMetaGlobal { * @return set from previously fetched meta/global record from * server */ - public MetaGlobal metaGlobal(String metaUrl, AuthHeaderProvider authHeaderProvider) { + public MetaGlobal metaGlobal(String metaUrl, String credentials) { String json = prefs.getString(META_GLOBAL_SERVER_RESPONSE_BODY, null); if (json == null) { return null; @@ -40,7 +40,7 @@ public class PersistedMetaGlobal { MetaGlobal metaGlobal = null; try { CryptoRecord cryptoRecord = CryptoRecord.fromJSONRecord(json); - MetaGlobal mg = new MetaGlobal(metaUrl, authHeaderProvider); + MetaGlobal mg = new MetaGlobal(metaUrl, credentials); mg.setFromRecord(cryptoRecord); metaGlobal = mg; } catch (Exception e) { diff --git a/mobile/android/base/sync/SyncConfiguration.java b/mobile/android/base/sync/SyncConfiguration.java index 972fb9b120b..87ca0ab556a 100644 --- a/mobile/android/base/sync/SyncConfiguration.java +++ b/mobile/android/base/sync/SyncConfiguration.java @@ -16,13 +16,12 @@ import java.util.Set; import org.mozilla.gecko.background.common.log.Logger; import org.mozilla.gecko.sync.crypto.KeyBundle; import org.mozilla.gecko.sync.crypto.PersistedCrypto5Keys; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; import org.mozilla.gecko.sync.stage.GlobalSyncStage.Stage; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; -public class SyncConfiguration { +public class SyncConfiguration implements CredentialsSource { public class EditorBranch implements Editor { @@ -180,17 +179,18 @@ public class SyncConfiguration { private static final String LOG_TAG = "SyncConfiguration"; // These must be set in GlobalSession's constructor. + public String userAPI; public URI serverURL; public URI clusterURL; + public String username; public KeyBundle syncKeyBundle; public CollectionKeys collectionKeys; public InfoCollections infoCollections; public MetaGlobal metaGlobal; + public String password; public String syncID; - protected final String username; - /** * Persisted collection of enabledEngineNames. *

@@ -243,8 +243,6 @@ public class SyncConfiguration { public String prefsPath; public PrefsSource prefsSource; - protected final AuthHeaderProvider authHeaderProvider; - public static final String PREF_PREFS_VERSION = "prefs.version"; public static final long CURRENT_PREFS_VERSION = 1; @@ -269,9 +267,7 @@ public class SyncConfiguration { * Create a new SyncConfiguration instance. Pass in a PrefsSource to * provide access to preferences. */ - public SyncConfiguration(String username, AuthHeaderProvider authHeaderProvider, String prefsPath, PrefsSource prefsSource) { - this.username = username; - this.authHeaderProvider = authHeaderProvider; + public SyncConfiguration(String prefsPath, PrefsSource prefsSource) { this.prefsPath = prefsPath; this.prefsSource = prefsSource; this.loadFromPrefs(getPrefs()); @@ -441,8 +437,9 @@ public class SyncConfiguration { // TODO: keys. } - public AuthHeaderProvider getAuthHeaderProvider() { - return authHeaderProvider; + @Override + public String credentials() { + return username + ":" + password; } public CollectionKeys getCollectionKeys() { @@ -481,20 +478,16 @@ public class SyncConfiguration { } public String metaURL() { - return storageURL() + "/meta/global"; + return clusterURL + GlobalSession.API_VERSION + "/" + username + "/storage/meta/global"; } - /** - * Return path to storage endpoint without trailing slash. - * - * @return storage endpoint without trailing slash. - */ - public String storageURL() { - return clusterURL + GlobalSession.API_VERSION + "/" + username + "/storage"; + public String storageURL(boolean trailingSlash) { + return clusterURL + GlobalSession.API_VERSION + "/" + username + + (trailingSlash ? "/storage/" : "/storage"); } public URI collectionURI(String collection) throws URISyntaxException { - return new URI(storageURL() + "/" + collection); + return new URI(storageURL(true) + collection); } public URI collectionURI(String collection, boolean full) throws URISyntaxException { @@ -509,12 +502,12 @@ public class SyncConfiguration { } uriParams = params.toString(); } - String uri = storageURL() + "/" + collection + uriParams; + String uri = storageURL(true) + collection + uriParams; return new URI(uri); } public URI wboURI(String collection, String id) throws URISyntaxException { - return new URI(storageURL() + "/" + collection + "/" + id); + return new URI(storageURL(true) + collection + "/" + id); } public URI keysURI() throws URISyntaxException { diff --git a/mobile/android/base/sync/config/ClientRecordTerminator.java b/mobile/android/base/sync/config/ClientRecordTerminator.java index b7f7efaa5cf..4231c095222 100644 --- a/mobile/android/base/sync/config/ClientRecordTerminator.java +++ b/mobile/android/base/sync/config/ClientRecordTerminator.java @@ -8,7 +8,6 @@ import java.net.URI; import org.mozilla.gecko.background.common.log.Logger; import org.mozilla.gecko.sync.GlobalSession; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; import org.mozilla.gecko.sync.net.BaseResource; import org.mozilla.gecko.sync.net.SyncStorageRecordRequest; import org.mozilla.gecko.sync.net.SyncStorageRequestDelegate; @@ -28,9 +27,9 @@ public class ClientRecordTerminator { } public static void deleteClientRecord(final String username, + final String password, final String clusterURL, - final String clientGuid, - final AuthHeaderProvider authHeaderProvider) + final String clientGuid) throws Exception { // Would prefer to delegate to SyncConfiguration, but that would proliferate static methods. @@ -41,8 +40,8 @@ public class ClientRecordTerminator { final SyncStorageRecordRequest r = new SyncStorageRecordRequest(wboURI); r.delegate = new SyncStorageRequestDelegate() { @Override - public AuthHeaderProvider getAuthHeaderProvider() { - return authHeaderProvider; + public String credentials() { + return username + ":" + password; } @Override diff --git a/mobile/android/base/sync/net/SyncStorageRequest.java b/mobile/android/base/sync/net/SyncStorageRequest.java index 72ea5e24d63..8cc9ad85cae 100644 --- a/mobile/android/base/sync/net/SyncStorageRequest.java +++ b/mobile/android/base/sync/net/SyncStorageRequest.java @@ -92,7 +92,12 @@ public class SyncStorageRequest implements Resource { @Override public AuthHeaderProvider getAuthHeaderProvider() { - return request.delegate.getAuthHeaderProvider(); + String credentials = request.delegate.credentials(); + if (credentials == null) { + return null; + } + + return new BasicAuthHeaderProvider(credentials); } @Override diff --git a/mobile/android/base/sync/net/SyncStorageRequestDelegate.java b/mobile/android/base/sync/net/SyncStorageRequestDelegate.java index 29f42cc289d..7ca73051e88 100644 --- a/mobile/android/base/sync/net/SyncStorageRequestDelegate.java +++ b/mobile/android/base/sync/net/SyncStorageRequestDelegate.java @@ -5,8 +5,7 @@ package org.mozilla.gecko.sync.net; public interface SyncStorageRequestDelegate { - public AuthHeaderProvider getAuthHeaderProvider(); - + String credentials(); String ifUnmodifiedSince(); // TODO: at this point we can access X-Weave-Timestamp, compare diff --git a/mobile/android/base/sync/receivers/SyncAccountDeletedService.java b/mobile/android/base/sync/receivers/SyncAccountDeletedService.java index 8b5b55b80d2..394512723ff 100644 --- a/mobile/android/base/sync/receivers/SyncAccountDeletedService.java +++ b/mobile/android/base/sync/receivers/SyncAccountDeletedService.java @@ -12,7 +12,6 @@ import org.mozilla.gecko.sync.SyncConfiguration; import org.mozilla.gecko.sync.Utils; import org.mozilla.gecko.sync.config.AccountPickler; import org.mozilla.gecko.sync.config.ClientRecordTerminator; -import org.mozilla.gecko.sync.net.BasicAuthHeaderProvider; import org.mozilla.gecko.sync.setup.Constants; import org.mozilla.gecko.sync.setup.SyncAccounts.SyncAccountParameters; @@ -130,7 +129,7 @@ public class SyncAccountDeletedService extends IntentService { } try { - ClientRecordTerminator.deleteClientRecord(encodedUsername, clusterURL, clientGuid, new BasicAuthHeaderProvider(encodedUsername, password)); + ClientRecordTerminator.deleteClientRecord(encodedUsername, password, clusterURL, clientGuid); } catch (Exception e) { // This should never happen, but we really don't want to die in a background thread. Logger.warn(LOG_TAG, "Got exception deleting client record from server; ignoring.", e); diff --git a/mobile/android/base/sync/receivers/UpgradeReceiver.java b/mobile/android/base/sync/receivers/UpgradeReceiver.java index b25fa6d49ad..344b433f670 100644 --- a/mobile/android/base/sync/receivers/UpgradeReceiver.java +++ b/mobile/android/base/sync/receivers/UpgradeReceiver.java @@ -9,6 +9,7 @@ import org.mozilla.gecko.background.common.GlobalConstants; import org.mozilla.gecko.background.common.log.Logger; import org.mozilla.gecko.sync.SyncConfiguration; import org.mozilla.gecko.sync.ThreadPool; +import org.mozilla.gecko.sync.Utils; import org.mozilla.gecko.sync.config.ConfigurationMigrator; import org.mozilla.gecko.sync.setup.Constants; import org.mozilla.gecko.sync.setup.SyncAccounts; @@ -53,7 +54,7 @@ public class UpgradeReceiver extends BroadcastReceiver { final Account[] accounts = SyncAccounts.syncAccounts(context); for (Account account : accounts) { - Logger.info(LOG_TAG, "Migrating preferences on upgrade for Android account named " + account.name + "."); + Logger.info(LOG_TAG, "Migrating preferences on upgrade for Android account named " + Utils.obfuscateEmail(account.name) + "."); SyncAccountParameters params; try { diff --git a/mobile/android/base/sync/repositories/ConstrainedServer11Repository.java b/mobile/android/base/sync/repositories/ConstrainedServer11Repository.java index 51b2572df78..f5aed167e6f 100644 --- a/mobile/android/base/sync/repositories/ConstrainedServer11Repository.java +++ b/mobile/android/base/sync/repositories/ConstrainedServer11Repository.java @@ -6,7 +6,7 @@ package org.mozilla.gecko.sync.repositories; import java.net.URISyntaxException; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; +import org.mozilla.gecko.sync.CredentialsSource; /** * A kind of Server11Repository that supports explicit setting of limit and sort on operations. @@ -19,8 +19,9 @@ public class ConstrainedServer11Repository extends Server11Repository { private String sort = null; private long limit = -1; - public ConstrainedServer11Repository(String collection, String storageURL, AuthHeaderProvider authHeaderProvider, long limit, String sort) throws URISyntaxException { - super(collection, storageURL, authHeaderProvider); + public ConstrainedServer11Repository(String serverURI, String username, String collection, CredentialsSource credentialsSource, long limit, String sort) throws URISyntaxException { + super(serverURI, username, collection, credentialsSource); + this.limit = limit; this.sort = sort; } diff --git a/mobile/android/base/sync/repositories/Server11Repository.java b/mobile/android/base/sync/repositories/Server11Repository.java index 7f0db6847f4..6090d1e2c6a 100644 --- a/mobile/android/base/sync/repositories/Server11Repository.java +++ b/mobile/android/base/sync/repositories/Server11Repository.java @@ -8,8 +8,8 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; +import org.mozilla.gecko.sync.CredentialsSource; import org.mozilla.gecko.sync.Utils; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionCreationDelegate; import android.content.Context; @@ -21,23 +21,33 @@ import android.content.Context; * @author rnewman */ public class Server11Repository extends Repository { + + private String serverURI; + private String username; protected String collection; - protected URI collectionURI; - protected final AuthHeaderProvider authHeaderProvider; + private String collectionPath; + private URI collectionPathURI; + public CredentialsSource credentialsSource; public static final String VERSION_PATH_FRAGMENT = "1.1/"; /** - * Construct a new repository that fetches and stores against the Sync 1.1. API. * - * @param collection name. - * @param storageURL full URL to storage endpoint. - * @param authHeaderProvider to use in requests. + * @param serverURI + * URI of the Sync 1.1 server (string) + * @param username + * Username on the server (string) + * @param collection + * Name of the collection (string) * @throws URISyntaxException */ - public Server11Repository(String collection, String storageURL, AuthHeaderProvider authHeaderProvider) throws URISyntaxException { + public Server11Repository(String serverURI, String username, String collection, CredentialsSource credentialsSource) throws URISyntaxException { + this.serverURI = serverURI; + this.username = username; this.collection = collection; - this.collectionURI = new URI(storageURL + (storageURL.endsWith("/") ? collection : "/" + collection)); - this.authHeaderProvider = authHeaderProvider; + + this.collectionPath = this.serverURI + VERSION_PATH_FRAGMENT + this.username + "/storage/" + this.collection; + this.collectionPathURI = new URI(this.collectionPath); + this.credentialsSource = credentialsSource; } @Override @@ -47,7 +57,7 @@ public class Server11Repository extends Repository { } public URI collectionURI() { - return this.collectionURI; + return this.collectionPathURI; } public URI collectionURI(boolean full, long newer, long limit, String sort, String ids) throws URISyntaxException { @@ -71,7 +81,7 @@ public class Server11Repository extends Repository { } if (params.size() == 0) { - return this.collectionURI; + return this.collectionPathURI; } StringBuilder out = new StringBuilder(); @@ -81,12 +91,12 @@ public class Server11Repository extends Repository { indicator = '&'; out.append(param); } - String uri = this.collectionURI + out.toString(); + String uri = this.collectionPath + out.toString(); return new URI(uri); } public URI wboURI(String id) throws URISyntaxException { - return new URI(this.collectionURI + "/" + id); + return new URI(this.collectionPath + "/" + id); } // Override these. @@ -99,8 +109,4 @@ public class Server11Repository extends Repository { protected String getDefaultSort() { return null; } - - public AuthHeaderProvider getAuthHeaderProvider() { - return authHeaderProvider; - } } diff --git a/mobile/android/base/sync/repositories/Server11RepositorySession.java b/mobile/android/base/sync/repositories/Server11RepositorySession.java index a3fd26b9e7a..d6f7d56e91b 100644 --- a/mobile/android/base/sync/repositories/Server11RepositorySession.java +++ b/mobile/android/base/sync/repositories/Server11RepositorySession.java @@ -25,7 +25,6 @@ import org.mozilla.gecko.sync.Server11PreviousPostFailedException; import org.mozilla.gecko.sync.Server11RecordPostFailedException; import org.mozilla.gecko.sync.UnexpectedJSONException; import org.mozilla.gecko.sync.crypto.KeyBundle; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; import org.mozilla.gecko.sync.net.SyncStorageCollectionRequest; import org.mozilla.gecko.sync.net.SyncStorageRequest; import org.mozilla.gecko.sync.net.SyncStorageRequestDelegate; @@ -136,8 +135,8 @@ public class Server11RepositorySession extends RepositorySession { } @Override - public AuthHeaderProvider getAuthHeaderProvider() { - return serverRepository.getAuthHeaderProvider(); + public String credentials() { + return serverRepository.credentialsSource.credentials(); } @Override @@ -443,8 +442,8 @@ public class Server11RepositorySession extends RepositorySession { } @Override - public AuthHeaderProvider getAuthHeaderProvider() { - return serverRepository.getAuthHeaderProvider(); + public String credentials() { + return serverRepository.credentialsSource.credentials(); } @Override diff --git a/mobile/android/base/sync/stage/AndroidBrowserBookmarksServerSyncStage.java b/mobile/android/base/sync/stage/AndroidBrowserBookmarksServerSyncStage.java index 9ed19310157..f6cda952e32 100644 --- a/mobile/android/base/sync/stage/AndroidBrowserBookmarksServerSyncStage.java +++ b/mobile/android/base/sync/stage/AndroidBrowserBookmarksServerSyncStage.java @@ -8,7 +8,6 @@ import java.net.URISyntaxException; import org.mozilla.gecko.sync.JSONRecordFetcher; import org.mozilla.gecko.sync.MetaGlobalException; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; import org.mozilla.gecko.sync.repositories.RecordFactory; import org.mozilla.gecko.sync.repositories.Repository; import org.mozilla.gecko.sync.repositories.android.AndroidBrowserBookmarksRepository; @@ -42,13 +41,11 @@ public class AndroidBrowserBookmarksServerSyncStage extends ServerSyncStage { protected Repository getRemoteRepository() throws URISyntaxException { // If this is a first sync, we need to check server counts to make sure that we aren't // going to screw up. SafeConstrainedServer11Repository does this. See Bug 814331. - AuthHeaderProvider authHeaderProvider = session.getAuthHeaderProvider(); - final JSONRecordFetcher countsFetcher = new JSONRecordFetcher(session.config.infoCollectionCountsURL(), authHeaderProvider); - String collection = getCollection(); - return new SafeConstrainedServer11Repository( - collection, - session.config.storageURL(), - session.getAuthHeaderProvider(), + final JSONRecordFetcher countsFetcher = new JSONRecordFetcher(session.config.infoCollectionCountsURL(), session.credentials()); + return new SafeConstrainedServer11Repository(session.config.getClusterURLString(), + session.config.username, + getCollection(), + session, BOOKMARKS_REQUEST_LIMIT, BOOKMARKS_SORT, countsFetcher); diff --git a/mobile/android/base/sync/stage/AndroidBrowserHistoryServerSyncStage.java b/mobile/android/base/sync/stage/AndroidBrowserHistoryServerSyncStage.java index c6869b53598..673e345de98 100644 --- a/mobile/android/base/sync/stage/AndroidBrowserHistoryServerSyncStage.java +++ b/mobile/android/base/sync/stage/AndroidBrowserHistoryServerSyncStage.java @@ -44,11 +44,10 @@ public class AndroidBrowserHistoryServerSyncStage extends ServerSyncStage { @Override protected Repository getRemoteRepository() throws URISyntaxException { - String collection = getCollection(); - return new ConstrainedServer11Repository( - collection, - session.config.storageURL(), - session.getAuthHeaderProvider(), + return new ConstrainedServer11Repository(session.config.getClusterURLString(), + session.config.username, + getCollection(), + session, HISTORY_REQUEST_LIMIT, HISTORY_SORT); } diff --git a/mobile/android/base/sync/stage/EnsureCrypto5KeysStage.java b/mobile/android/base/sync/stage/EnsureCrypto5KeysStage.java index 5031cf770fb..46cef489fc1 100644 --- a/mobile/android/base/sync/stage/EnsureCrypto5KeysStage.java +++ b/mobile/android/base/sync/stage/EnsureCrypto5KeysStage.java @@ -16,7 +16,6 @@ import org.mozilla.gecko.sync.InfoCollections; import org.mozilla.gecko.sync.NoCollectionKeysSetException; import org.mozilla.gecko.sync.crypto.KeyBundle; import org.mozilla.gecko.sync.crypto.PersistedCrypto5Keys; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; import org.mozilla.gecko.sync.net.SyncStorageRecordRequest; import org.mozilla.gecko.sync.net.SyncStorageRequestDelegate; import org.mozilla.gecko.sync.net.SyncStorageResponse; @@ -64,8 +63,8 @@ implements SyncStorageRequestDelegate { } @Override - public AuthHeaderProvider getAuthHeaderProvider() { - return session.getAuthHeaderProvider(); + public String credentials() { + return session.credentials(); } @Override diff --git a/mobile/android/base/sync/stage/FetchMetaGlobalStage.java b/mobile/android/base/sync/stage/FetchMetaGlobalStage.java index 967059d3ce4..20f7c5072ea 100644 --- a/mobile/android/base/sync/stage/FetchMetaGlobalStage.java +++ b/mobile/android/base/sync/stage/FetchMetaGlobalStage.java @@ -62,7 +62,7 @@ public class FetchMetaGlobalStage extends AbstractNonRepositorySyncStage { if (!infoCollections.updateNeeded(META_COLLECTION, lastModified)) { // Try to use our local collection keys for this session. Logger.info(LOG_TAG, "Trying to use persisted meta/global for this session."); - MetaGlobal global = session.config.persistedMetaGlobal().metaGlobal(session.config.metaURL(), session.getAuthHeaderProvider()); + MetaGlobal global = session.config.persistedMetaGlobal().metaGlobal(session.config.metaURL(), session.credentials()); if (global != null) { Logger.info(LOG_TAG, "Using persisted meta/global for this session."); session.processMetaGlobal(global); // Calls session.advance(). @@ -73,7 +73,7 @@ public class FetchMetaGlobalStage extends AbstractNonRepositorySyncStage { // We need an update: fetch or upload meta/global as necessary. Logger.info(LOG_TAG, "Fetching fresh meta/global for this session."); - MetaGlobal global = new MetaGlobal(session.config.metaURL(), session.getAuthHeaderProvider()); + MetaGlobal global = new MetaGlobal(session.config.metaURL(), session.credentials()); global.fetch(new StageMetaGlobalDelegate(session)); } } diff --git a/mobile/android/base/sync/stage/FormHistoryServerSyncStage.java b/mobile/android/base/sync/stage/FormHistoryServerSyncStage.java index 572ae16c3ef..7f23148136a 100644 --- a/mobile/android/base/sync/stage/FormHistoryServerSyncStage.java +++ b/mobile/android/base/sync/stage/FormHistoryServerSyncStage.java @@ -39,11 +39,10 @@ public class FormHistoryServerSyncStage extends ServerSyncStage { @Override protected Repository getRemoteRepository() throws URISyntaxException { - String collection = getCollection(); - return new ConstrainedServer11Repository( - collection, - session.config.storageURL(), - session.getAuthHeaderProvider(), + return new ConstrainedServer11Repository(session.config.getClusterURLString(), + session.config.username, + getCollection(), + session, FORM_HISTORY_REQUEST_LIMIT, FORM_HISTORY_SORT); } diff --git a/mobile/android/base/sync/stage/SafeConstrainedServer11Repository.java b/mobile/android/base/sync/stage/SafeConstrainedServer11Repository.java index 69736268bee..e3603db755f 100644 --- a/mobile/android/base/sync/stage/SafeConstrainedServer11Repository.java +++ b/mobile/android/base/sync/stage/SafeConstrainedServer11Repository.java @@ -7,9 +7,9 @@ package org.mozilla.gecko.sync.stage; import java.net.URISyntaxException; import org.mozilla.gecko.background.common.log.Logger; +import org.mozilla.gecko.sync.CredentialsSource; import org.mozilla.gecko.sync.InfoCounts; import org.mozilla.gecko.sync.JSONRecordFetcher; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; import org.mozilla.gecko.sync.repositories.ConstrainedServer11Repository; import org.mozilla.gecko.sync.repositories.Repository; import org.mozilla.gecko.sync.repositories.Server11RepositorySession; @@ -32,14 +32,15 @@ public class SafeConstrainedServer11Repository extends ConstrainedServer11Reposi // This can be lazily evaluated if we need it. private JSONRecordFetcher countFetcher; - public SafeConstrainedServer11Repository(String collection, - String storageURL, - AuthHeaderProvider authHeaderProvider, + public SafeConstrainedServer11Repository(String serverURI, + String username, + String collection, + CredentialsSource credentialsSource, long limit, String sort, JSONRecordFetcher countFetcher) throws URISyntaxException { - super(collection, storageURL, authHeaderProvider, limit, sort); + super(serverURI, username, collection, credentialsSource, limit, sort); this.countFetcher = countFetcher; } diff --git a/mobile/android/base/sync/stage/ServerSyncStage.java b/mobile/android/base/sync/stage/ServerSyncStage.java index f751b9db4d2..48628b022d8 100644 --- a/mobile/android/base/sync/stage/ServerSyncStage.java +++ b/mobile/android/base/sync/stage/ServerSyncStage.java @@ -11,6 +11,7 @@ import java.util.concurrent.ExecutorService; import org.json.simple.parser.ParseException; import org.mozilla.gecko.background.common.log.Logger; +import org.mozilla.gecko.sync.CredentialsSource; import org.mozilla.gecko.sync.EngineSettings; import org.mozilla.gecko.sync.GlobalSession; import org.mozilla.gecko.sync.HTTPFailureException; @@ -22,7 +23,6 @@ import org.mozilla.gecko.sync.Utils; import org.mozilla.gecko.sync.crypto.KeyBundle; import org.mozilla.gecko.sync.delegates.WipeServerDelegate; import org.mozilla.gecko.sync.middleware.Crypto5MiddlewareRepository; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; import org.mozilla.gecko.sync.net.BaseResource; import org.mozilla.gecko.sync.net.SyncStorageRequest; import org.mozilla.gecko.sync.net.SyncStorageRequestDelegate; @@ -145,10 +145,10 @@ public abstract class ServerSyncStage extends AbstractSessionManagingSyncStage i // Override this in subclasses. protected Repository getRemoteRepository() throws URISyntaxException { - String collection = getCollection(); - return new Server11Repository(collection, - session.config.storageURL(), - session.getAuthHeaderProvider()); + return new Server11Repository(session.config.getClusterURLString(), + session.config.username, + getCollection(), + session); } /** @@ -374,7 +374,7 @@ public abstract class ServerSyncStage extends AbstractSessionManagingSyncStage i /** * Asynchronously wipe collection on server. */ - protected void wipeServer(final AuthHeaderProvider authHeaderProvider, final WipeServerDelegate wipeDelegate) { + protected void wipeServer(final CredentialsSource credentials, final WipeServerDelegate wipeDelegate) { SyncStorageRequest request; try { @@ -415,8 +415,8 @@ public abstract class ServerSyncStage extends AbstractSessionManagingSyncStage i } @Override - public AuthHeaderProvider getAuthHeaderProvider() { - return authHeaderProvider; + public String credentials() { + return credentials.credentials(); } }; @@ -436,7 +436,7 @@ public abstract class ServerSyncStage extends AbstractSessionManagingSyncStage i final Runnable doWipe = new Runnable() { @Override public void run() { - wipeServer(session.getAuthHeaderProvider(), new WipeServerDelegate() { + wipeServer(session, new WipeServerDelegate() { @Override public void onWiped(long timestamp) { synchronized (monitor) { diff --git a/mobile/android/base/sync/stage/SyncClientsEngineStage.java b/mobile/android/base/sync/stage/SyncClientsEngineStage.java index 5627f688327..f6196d1026b 100644 --- a/mobile/android/base/sync/stage/SyncClientsEngineStage.java +++ b/mobile/android/base/sync/stage/SyncClientsEngineStage.java @@ -24,7 +24,6 @@ import org.mozilla.gecko.sync.Utils; import org.mozilla.gecko.sync.crypto.CryptoException; import org.mozilla.gecko.sync.crypto.KeyBundle; import org.mozilla.gecko.sync.delegates.ClientsDataDelegate; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; import org.mozilla.gecko.sync.net.BaseResource; import org.mozilla.gecko.sync.net.SyncStorageCollectionRequest; import org.mozilla.gecko.sync.net.SyncStorageRecordRequest; @@ -97,8 +96,8 @@ public class SyncClientsEngineStage extends AbstractSessionManagingSyncStage { boolean localAccountGUIDDownloaded = false; @Override - public AuthHeaderProvider getAuthHeaderProvider() { - return session.getAuthHeaderProvider(); + public String credentials() { + return session.credentials(); } @Override @@ -216,8 +215,8 @@ public class SyncClientsEngineStage extends AbstractSessionManagingSyncStage { public boolean currentlyUploadingLocalRecord; @Override - public AuthHeaderProvider getAuthHeaderProvider() { - return session.getAuthHeaderProvider(); + public String credentials() { + return session.credentials(); } private void setUploadDetails(boolean isLocalRecord) { diff --git a/mobile/android/base/sync/syncadapter/SyncAdapter.java b/mobile/android/base/sync/syncadapter/SyncAdapter.java index abe0785d27a..fa1232c6ae1 100644 --- a/mobile/android/base/sync/syncadapter/SyncAdapter.java +++ b/mobile/android/base/sync/syncadapter/SyncAdapter.java @@ -10,16 +10,16 @@ import java.security.NoSuchAlgorithmException; import java.util.concurrent.atomic.AtomicBoolean; import org.json.simple.parser.ParseException; -import org.mozilla.gecko.background.common.GlobalConstants; -import org.mozilla.gecko.background.common.log.Logger; import org.mozilla.gecko.db.BrowserContract; import org.mozilla.gecko.sync.AlreadySyncingException; import org.mozilla.gecko.sync.CredentialException; +import org.mozilla.gecko.background.common.GlobalConstants; +import org.mozilla.gecko.background.common.log.Logger; +import org.mozilla.gecko.sync.SyncConstants; import org.mozilla.gecko.sync.GlobalSession; import org.mozilla.gecko.sync.NonObjectJSONException; import org.mozilla.gecko.sync.SyncConfiguration; import org.mozilla.gecko.sync.SyncConfigurationException; -import org.mozilla.gecko.sync.SyncConstants; import org.mozilla.gecko.sync.SyncException; import org.mozilla.gecko.sync.ThreadPool; import org.mozilla.gecko.sync.Utils; @@ -28,8 +28,6 @@ import org.mozilla.gecko.sync.crypto.CryptoException; import org.mozilla.gecko.sync.crypto.KeyBundle; import org.mozilla.gecko.sync.delegates.ClientsDataDelegate; import org.mozilla.gecko.sync.delegates.GlobalSessionCallback; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; -import org.mozilla.gecko.sync.net.BasicAuthHeaderProvider; import org.mozilla.gecko.sync.net.ConnectionMonitorThread; import org.mozilla.gecko.sync.setup.Constants; import org.mozilla.gecko.sync.setup.SyncAccounts; @@ -504,8 +502,8 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter implements GlobalSe // TODO: default serverURL. final KeyBundle keyBundle = new KeyBundle(username, syncKey); - final AuthHeaderProvider authHeaderProvider = new BasicAuthHeaderProvider(username, password); - GlobalSession globalSession = new GlobalSession(serverURL, username, authHeaderProvider, prefsPath, + GlobalSession globalSession = new GlobalSession(SyncConfiguration.DEFAULT_USER_API, + serverURL, username, password, prefsPath, keyBundle, this, this.mContext, extras, this); globalSession.start(); diff --git a/mobile/android/tests/background/junit3/src/sync/TestClientsStage.java b/mobile/android/tests/background/junit3/src/sync/TestClientsStage.java index 337ad7edf9f..29e84bb949f 100644 --- a/mobile/android/tests/background/junit3/src/sync/TestClientsStage.java +++ b/mobile/android/tests/background/junit3/src/sync/TestClientsStage.java @@ -8,10 +8,10 @@ import org.mozilla.gecko.background.helpers.AndroidSyncTestCase; import org.mozilla.gecko.background.testhelpers.DefaultGlobalSessionCallback; import org.mozilla.gecko.background.testhelpers.MockClientsDataDelegate; import org.mozilla.gecko.sync.GlobalSession; +import org.mozilla.gecko.sync.SyncConfiguration; import org.mozilla.gecko.sync.crypto.KeyBundle; import org.mozilla.gecko.sync.delegates.ClientsDataDelegate; import org.mozilla.gecko.sync.delegates.GlobalSessionCallback; -import org.mozilla.gecko.sync.net.BasicAuthHeaderProvider; import org.mozilla.gecko.sync.repositories.android.ClientsDatabaseAccessor; import org.mozilla.gecko.sync.repositories.domain.ClientRecord; import org.mozilla.gecko.sync.stage.SyncClientsEngineStage; @@ -41,8 +41,9 @@ public class TestClientsStage extends AndroidSyncTestCase { final ClientsDataDelegate delegate = new MockClientsDataDelegate(); final GlobalSession session = new GlobalSession( + SyncConfiguration.DEFAULT_USER_API, null, - TEST_USERNAME, new BasicAuthHeaderProvider(TEST_USERNAME, TEST_PASSWORD), null, + TEST_USERNAME, TEST_PASSWORD, null, new KeyBundle(TEST_USERNAME, TEST_SYNC_KEY), callback, context, null, delegate); diff --git a/mobile/android/tests/background/junit3/src/sync/TestResetting.java b/mobile/android/tests/background/junit3/src/sync/TestResetting.java index 03961084b0c..4069e9ac5b1 100644 --- a/mobile/android/tests/background/junit3/src/sync/TestResetting.java +++ b/mobile/android/tests/background/junit3/src/sync/TestResetting.java @@ -16,12 +16,12 @@ import org.mozilla.gecko.sync.EngineSettings; import org.mozilla.gecko.sync.GlobalSession; import org.mozilla.gecko.sync.MetaGlobalException; import org.mozilla.gecko.sync.NonObjectJSONException; +import org.mozilla.gecko.sync.SyncConfiguration; import org.mozilla.gecko.sync.SyncConfigurationException; import org.mozilla.gecko.sync.SynchronizerConfiguration; import org.mozilla.gecko.sync.crypto.CryptoException; import org.mozilla.gecko.sync.crypto.KeyBundle; import org.mozilla.gecko.sync.delegates.GlobalSessionCallback; -import org.mozilla.gecko.sync.net.BasicAuthHeaderProvider; import org.mozilla.gecko.sync.repositories.domain.Record; import org.mozilla.gecko.sync.stage.NoSuchStageException; import org.mozilla.gecko.sync.synchronizer.Synchronizer; @@ -153,8 +153,9 @@ public class TestResetting extends AndroidSyncTestCase { private GlobalSession createDefaultGlobalSession(final GlobalSessionCallback callback) throws SyncConfigurationException, IllegalArgumentException, NonObjectJSONException, IOException, ParseException, CryptoException { return new GlobalSession( + SyncConfiguration.DEFAULT_USER_API, null, - TEST_USERNAME, new BasicAuthHeaderProvider(TEST_USERNAME, TEST_PASSWORD), null, + TEST_USERNAME, TEST_PASSWORD, null, new KeyBundle(TEST_USERNAME, TEST_SYNC_KEY), callback, getApplicationContext(), null, null) { diff --git a/mobile/android/tests/background/junit3/src/sync/TestSyncConfiguration.java b/mobile/android/tests/background/junit3/src/sync/TestSyncConfiguration.java index 6e7570ccb77..d382f0bdfbc 100644 --- a/mobile/android/tests/background/junit3/src/sync/TestSyncConfiguration.java +++ b/mobile/android/tests/background/junit3/src/sync/TestSyncConfiguration.java @@ -29,13 +29,13 @@ public class TestSyncConfiguration extends AndroidSyncTestCase implements PrefsS SyncConfiguration config = null; SharedPreferences prefs = getPrefs(TEST_PREFS_NAME, 0); - config = newSyncConfiguration(); + config = new SyncConfiguration(TEST_PREFS_NAME, this); config.enabledEngineNames = new HashSet(); config.enabledEngineNames.add("test1"); config.enabledEngineNames.add("test2"); config.persistToPrefs(); assertTrue(prefs.contains(SyncConfiguration.PREF_ENABLED_ENGINE_NAMES)); - config = newSyncConfiguration(); + config = new SyncConfiguration(TEST_PREFS_NAME, this); Set expected = new HashSet(); for (String name : new String[] { "test1", "test2" }) { expected.add(name); @@ -45,7 +45,7 @@ public class TestSyncConfiguration extends AndroidSyncTestCase implements PrefsS config.enabledEngineNames = null; config.persistToPrefs(); assertFalse(prefs.contains(SyncConfiguration.PREF_ENABLED_ENGINE_NAMES)); - config = newSyncConfiguration(); + config = new SyncConfiguration(TEST_PREFS_NAME, this); assertNull(config.enabledEngineNames); } @@ -53,11 +53,11 @@ public class TestSyncConfiguration extends AndroidSyncTestCase implements PrefsS SyncConfiguration config = null; SharedPreferences prefs = getPrefs(TEST_PREFS_NAME, 0); - config = newSyncConfiguration(); + config = new SyncConfiguration(TEST_PREFS_NAME, this); config.syncID = "test1"; config.persistToPrefs(); assertTrue(prefs.contains(SyncConfiguration.PREF_SYNC_ID)); - config = newSyncConfiguration(); + config = new SyncConfiguration(TEST_PREFS_NAME, this); assertEquals("test1", config.syncID); } @@ -74,7 +74,7 @@ public class TestSyncConfiguration extends AndroidSyncTestCase implements PrefsS // Read values from selectedEngines. assertTrue(prefs.contains(SyncConfiguration.PREF_USER_SELECTED_ENGINES_TO_SYNC)); SyncConfiguration config = null; - config = newSyncConfiguration(); + config = new SyncConfiguration(TEST_PREFS_NAME, this); config.loadFromPrefs(prefs); assertEquals(expectedEngines, config.userSelectedEngines); } @@ -95,7 +95,7 @@ public class TestSyncConfiguration extends AndroidSyncTestCase implements PrefsS // Read values from selectedEngines. assertTrue(prefs.contains(SyncConfiguration.PREF_USER_SELECTED_ENGINES_TO_SYNC)); SyncConfiguration config = null; - config = newSyncConfiguration(); + config = new SyncConfiguration(TEST_PREFS_NAME, this); config.loadFromPrefs(prefs); assertEquals(storedEngines, config.userSelectedEngines); } @@ -111,13 +111,9 @@ public class TestSyncConfiguration extends AndroidSyncTestCase implements PrefsS // Read values from selectedEngines. assertTrue(prefs.contains(SyncConfiguration.PREF_USER_SELECTED_ENGINES_TO_SYNC)); SyncConfiguration config = null; - config = newSyncConfiguration(); + config = new SyncConfiguration(TEST_PREFS_NAME, this); config.loadFromPrefs(prefs); // Forms should not be selected if history is not present. assertTrue(config.userSelectedEngines.isEmpty()); } - - protected SyncConfiguration newSyncConfiguration() { - return new SyncConfiguration(null, null, TEST_PREFS_NAME, this); - } } diff --git a/mobile/android/tests/background/junit3/src/testhelpers/MockGlobalSession.java b/mobile/android/tests/background/junit3/src/testhelpers/MockGlobalSession.java index c3c899ed681..35e30dac13a 100644 --- a/mobile/android/tests/background/junit3/src/testhelpers/MockGlobalSession.java +++ b/mobile/android/tests/background/junit3/src/testhelpers/MockGlobalSession.java @@ -9,6 +9,7 @@ import java.util.HashMap; import org.json.simple.parser.ParseException; import org.mozilla.gecko.sync.EngineSettings; import org.mozilla.gecko.sync.NonObjectJSONException; +import org.mozilla.gecko.sync.SyncConfiguration; import org.mozilla.gecko.sync.SyncConfigurationException; import org.mozilla.gecko.sync.crypto.KeyBundle; import org.mozilla.gecko.sync.delegates.GlobalSessionCallback; @@ -22,7 +23,7 @@ public class MockGlobalSession extends MockPrefsGlobalSession { public MockGlobalSession(String clusterURL, String username, String password, KeyBundle syncKeyBundle, GlobalSessionCallback callback) throws SyncConfigurationException, IllegalArgumentException, IOException, ParseException, NonObjectJSONException { - super(clusterURL, username, password, null, syncKeyBundle, callback, /* context */ null, null, null); + super(SyncConfiguration.DEFAULT_USER_API, clusterURL, username, password, null, syncKeyBundle, callback, /* context */ null, null, null); } @Override diff --git a/mobile/android/tests/background/junit3/src/testhelpers/MockPrefsGlobalSession.java b/mobile/android/tests/background/junit3/src/testhelpers/MockPrefsGlobalSession.java index 4c366f52551..2e91a183ebf 100644 --- a/mobile/android/tests/background/junit3/src/testhelpers/MockPrefsGlobalSession.java +++ b/mobile/android/tests/background/junit3/src/testhelpers/MockPrefsGlobalSession.java @@ -12,8 +12,6 @@ import org.mozilla.gecko.sync.SyncConfigurationException; import org.mozilla.gecko.sync.crypto.KeyBundle; import org.mozilla.gecko.sync.delegates.ClientsDataDelegate; import org.mozilla.gecko.sync.delegates.GlobalSessionCallback; -import org.mozilla.gecko.sync.net.AuthHeaderProvider; -import org.mozilla.gecko.sync.net.BasicAuthHeaderProvider; import android.content.Context; import android.content.SharedPreferences; @@ -26,22 +24,13 @@ public class MockPrefsGlobalSession extends GlobalSession { public MockSharedPreferences prefs; - public MockPrefsGlobalSession(String serverURL, + public MockPrefsGlobalSession(String userAPI, String serverURL, String username, String password, String prefsPath, KeyBundle syncKeyBundle, GlobalSessionCallback callback, Context context, Bundle extras, ClientsDataDelegate clientsDelegate) throws SyncConfigurationException, IllegalArgumentException, IOException, ParseException, NonObjectJSONException { - this(serverURL, username, new BasicAuthHeaderProvider(username, password), prefsPath, syncKeyBundle, callback, context, extras, clientsDelegate); - } - - public MockPrefsGlobalSession(String serverURL, - String username, AuthHeaderProvider authHeaderProvider, String prefsPath, - KeyBundle syncKeyBundle, GlobalSessionCallback callback, Context context, - Bundle extras, ClientsDataDelegate clientsDelegate) - throws SyncConfigurationException, IllegalArgumentException, IOException, - ParseException, NonObjectJSONException { - super(serverURL, username, authHeaderProvider, prefsPath, syncKeyBundle, + super(userAPI, serverURL, username, password, prefsPath, syncKeyBundle, callback, context, extras, clientsDelegate); } @@ -58,4 +47,4 @@ public class MockPrefsGlobalSession extends GlobalSession { return null; } -} +} \ No newline at end of file