This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch upstream/28.5.0 in repository pale-moon. commit af7e140d4ed8f5bc9a69da2f0338ad3cb1319dec Merge: 40fc723 51722cd Author: Ascrod <32915892+Ascrod@users.noreply.github.com> Date: Thu Apr 18 20:35:10 2019 -0400 Merge branch 'master' into default-pref application/basilisk/app/profile/basilisk.js | 42 - .../base/content/aboutaccounts/aboutaccounts.css | 24 - .../base/content/aboutaccounts/aboutaccounts.js | 538 ------ .../base/content/aboutaccounts/aboutaccounts.xhtml | 112 -- .../base/content/aboutaccounts/images/fox.png | Bin 1951 -> 0 bytes .../aboutaccounts/images/graphic_sync_intro.png | Bin 6441 -> 0 bytes .../aboutaccounts/images/graphic_sync_intro@2x.png | Bin 12852 -> 0 bytes .../basilisk/base/content/aboutaccounts/main.css | 166 -- .../base/content/aboutaccounts/normalize.css | 402 ----- .../basilisk/base/content/abouthome/aboutHome.css | 4 + .../base/content/abouthome/aboutHome.xhtml | 2 + .../basilisk/base/content/browser-context.inc | 14 - .../basilisk/base/content/browser-doctype.inc | 2 + .../basilisk/base/content/browser-fxaccounts.js | 314 ---- .../basilisk/base/content/browser-menubar.inc | 34 +- .../basilisk/base/content/browser-places.js | 13 +- application/basilisk/base/content/browser-sets.inc | 7 +- .../basilisk/base/content/browser-syncui.js | 586 +++---- application/basilisk/base/content/browser.css | 12 + application/basilisk/base/content/browser.js | 37 +- application/basilisk/base/content/browser.xul | 70 +- .../basilisk/base/content/global-scripts.inc | 2 - application/basilisk/base/content/nsContextMenu.js | 5 - .../basilisk/base/content/sync/customize.css | 28 - .../basilisk/base/content/sync/customize.js | 25 - .../basilisk/base/content/sync/customize.xul | 62 - application/basilisk/base/content/web-panels.xul | 1 - application/basilisk/base/jar.mn | 35 +- .../basilisk/components/about/AboutRedirector.cpp | 10 +- application/basilisk/components/build/nsModule.cpp | 4 +- .../components/customizableui/CustomizableUI.jsm | 1 - .../customizableui/CustomizableWidgets.jsm | 138 -- .../customizableui/content/panelUI.inc.xul | 110 -- .../basilisk/components/customizableui/moz.build | 5 +- application/basilisk/components/moz.build | 7 +- application/basilisk/components/nsBrowserGlue.js | 119 +- .../basilisk/components/places/PlacesUIUtils.jsm | 6 +- application/basilisk/components/places/moz.build | 2 +- .../components/preferences/in-content/jar.mn | 4 +- .../preferences/in-content/preferences.js | 2 + .../preferences/in-content/preferences.xul | 8 + .../components/preferences/in-content/sync.js | 442 +---- .../components/preferences/in-content/sync.xul | 327 +--- .../sync/aboutSyncTabs-bindings.xml | 0 .../content => components}/sync/aboutSyncTabs.css | 0 .../content => components}/sync/aboutSyncTabs.js | 113 +- .../content => components}/sync/aboutSyncTabs.xul | 0 .../{base/content => components}/sync/addDevice.js | 0 .../content => components}/sync/addDevice.xul | 2 +- .../content => components}/sync/genericChange.js | 15 +- .../content => components}/sync/genericChange.xul | 4 +- application/basilisk/components/sync/jar.mn | 22 + .../{base/content => components}/sync/key.xhtml | 2 +- .../basilisk/components/sync}/moz.build | 7 +- .../basilisk/components/sync/notification.xml | 129 ++ application/basilisk/components/sync/progress.js | 71 + .../basilisk/components/sync/progress.xhtml | 55 + .../{base/content => components}/sync/quota.js | 0 .../{base/content => components}/sync/quota.xul | 0 .../{base/content => components}/sync/setup.js | 35 +- .../{base/content => components}/sync/setup.xul | 15 +- .../{base/content => components}/sync/utils.js | 29 +- .../components/syncedtabs/EventEmitter.jsm | 45 - .../syncedtabs/SyncedTabsDeckComponent.js | 169 -- .../components/syncedtabs/SyncedTabsDeckStore.js | 60 - .../components/syncedtabs/SyncedTabsDeckView.js | 116 -- .../components/syncedtabs/SyncedTabsListStore.js | 235 --- .../components/syncedtabs/TabListComponent.js | 138 -- .../basilisk/components/syncedtabs/TabListView.js | 568 ------- application/basilisk/components/syncedtabs/jar.mn | 7 - .../basilisk/components/syncedtabs/moz.build | 17 - .../basilisk/components/syncedtabs/sidebar.js | 30 - .../basilisk/components/syncedtabs/sidebar.xhtml | 114 -- application/basilisk/components/syncedtabs/util.js | 23 - application/basilisk/configure.in | 7 + application/basilisk/installer/allowed-dupes.mn | 2 - application/basilisk/installer/package-manifest.in | 2 - .../locales/en-US/chrome/browser/aboutAccounts.dtd | 16 - .../locales/en-US/chrome/browser/aboutHome.dtd | 4 + .../locales/en-US/chrome/browser/browser.dtd | 66 +- .../en-US/chrome/browser/preferences/sync.dtd | 73 +- .../locales/en-US/chrome/browser/syncBrand.dtd | 1 - .../locales/en-US/chrome/browser/syncKey.dtd | 8 +- .../locales/en-US/chrome/browser/syncProgress.dtd | 15 + .../en-US/chrome/browser/syncQuota.properties | 2 +- .../locales/en-US/chrome/browser/syncSetup.dtd | 18 +- .../en-US/chrome/browser/syncSetup.properties | 28 +- application/basilisk/locales/jar.mn | 12 +- application/basilisk/modules/AboutHome.jsm | 2 - application/basilisk/themes/linux/jar.mn | 6 +- application/basilisk/themes/linux/syncProgress.css | 46 + .../basilisk/themes/linux/syncedtabs/sidebar.css | 69 - application/basilisk/themes/osx/jar.mn | 10 +- application/basilisk/themes/osx/syncProgress.css | 46 + .../basilisk/themes/osx/syncedtabs/sidebar.css | 154 -- application/basilisk/themes/shared/browser.inc | 2 +- .../themes/shared/customizableui/panelUI.inc.css | 276 +--- .../basilisk/themes/shared/menupanel.inc.css | 19 + .../themes/shared/syncedtabs/sidebar.inc.css | 234 --- .../basilisk/themes/shared/toolbarbuttons.inc.css | 46 + application/basilisk/themes/windows/jar.mn | 8 +- .../basilisk/themes/windows/syncProgress.css | 46 + .../basilisk/themes/windows/syncedtabs/sidebar.css | 132 -- application/palemoon/configure.in | 4 - mobile/android/app/mobile.js | 12 - mobile/android/base/android-services.mozbuild | 61 - .../java/org/mozilla/gecko/push/PushService.java | 24 +- .../android/base/resources/values-v21/themes.xml | 5 - mobile/android/chrome/content/aboutAccounts.js | 351 ---- mobile/android/chrome/content/aboutAccounts.xhtml | 83 - mobile/android/chrome/content/browser.js | 14 - mobile/android/chrome/jar.mn | 2 - mobile/android/components/FxAccountsPush.js | 164 -- .../android/components/MobileComponents.manifest | 5 - mobile/android/components/moz.build | 1 - mobile/android/config/proguard/proguard.cfg | 2 - mobile/android/confvars.sh | 2 +- mobile/android/installer/package-manifest.in | 1 - mobile/android/modules/Accounts.jsm | 105 +- mobile/android/modules/FxAccountsWebChannel.jsm | 394 ----- mobile/android/modules/moz.build | 1 - mobile/android/services/README.txt | 1 - .../FxAccountAndroidManifest_activities.xml.in | 63 - .../FxAccountAndroidManifest_permissions.xml.in | 18 - .../FxAccountAndroidManifest_services.xml.in | 34 - .../gecko/background/ReadingListConstants.java | 23 - .../gecko/background/common/EditorBranch.java | 82 - .../gecko/background/common/GlobalConstants.java | 90 - .../gecko/background/common/PrefsBranch.java | 83 - .../gecko/background/common/log/Logger.java | 232 --- .../log/writers/AndroidLevelCachingLogWriter.java | 132 -- .../common/log/writers/AndroidLogWriter.java | 46 - .../log/writers/LevelFilteringLogWriter.java | 67 - .../background/common/log/writers/LogWriter.java | 29 - .../common/log/writers/PrintLogWriter.java | 77 - .../common/log/writers/SimpleTagLogWriter.java | 21 - .../common/log/writers/StringLogWriter.java | 57 - .../common/log/writers/TagLogWriter.java | 55 - .../log/writers/ThreadLocalTagLogWriter.java | 25 - .../common/telemetry/TelemetryWrapper.java | 56 - .../mozilla/gecko/background/db/CursorDumper.java | 99 -- .../java/org/mozilla/gecko/background/db/Tab.java | 86 - .../background/fxa/FxAccount20CreateDelegate.java | 52 - .../background/fxa/FxAccount20LoginDelegate.java | 36 - .../gecko/background/fxa/FxAccountClient.java | 24 - .../gecko/background/fxa/FxAccountClient20.java | 914 ----------- .../background/fxa/FxAccountClientException.java | 133 -- .../gecko/background/fxa/FxAccountRemoteError.java | 33 - .../gecko/background/fxa/FxAccountUtils.java | 217 --- .../gecko/background/fxa/PasswordStretcher.java | 12 - .../background/fxa/QuickPasswordStretcher.java | 35 - .../mozilla/gecko/background/fxa/SkewHandler.java | 111 -- .../fxa/oauth/FxAccountAbstractClient.java | 224 --- .../oauth/FxAccountAbstractClientException.java | 68 - .../fxa/oauth/FxAccountOAuthClient10.java | 129 -- .../fxa/oauth/FxAccountOAuthRemoteError.java | 19 - .../fxa/profile/FxAccountProfileClient10.java | 59 - .../gecko/background/nativecode/NativeCrypto.java | 60 - .../background/preferences/PreferenceFragment.java | 326 ---- .../preferences/PreferenceManagerCompat.java | 226 --- .../java/org/mozilla/gecko/browserid/ASNUtils.java | 82 - .../mozilla/gecko/browserid/BrowserIDKeyPair.java | 35 - .../gecko/browserid/DSACryptoImplementation.java | 255 --- .../mozilla/gecko/browserid/JSONWebTokenUtils.java | 245 --- .../gecko/browserid/MockMyIDTokenFactory.java | 128 -- .../gecko/browserid/RSACryptoImplementation.java | 182 --- .../mozilla/gecko/browserid/SigningPrivateKey.java | 41 - .../gecko/browserid/VerifyingPublicKey.java | 34 - .../AbstractBrowserIDRemoteVerifierClient.java | 95 -- .../verifier/BrowserIDRemoteVerifierClient10.java | 62 - .../verifier/BrowserIDRemoteVerifierClient20.java | 58 - .../verifier/BrowserIDVerifierClient.java | 9 - .../verifier/BrowserIDVerifierDelegate.java | 13 - .../verifier/BrowserIDVerifierException.java | 41 - .../java/org/mozilla/gecko/fxa/AccountLoader.java | 227 --- .../org/mozilla/gecko/fxa/FirefoxAccounts.java | 222 --- .../org/mozilla/gecko/fxa/FxAccountConstants.java | 75 - .../org/mozilla/gecko/fxa/FxAccountDevice.java | 81 - .../gecko/fxa/FxAccountDeviceRegistrator.java | 282 ---- .../mozilla/gecko/fxa/FxAccountPushHandler.java | 95 -- .../org/mozilla/gecko/fxa/SyncStatusListener.java | 31 - .../fxa/activities/CustomColorPreference.java | 52 - .../fxa/activities/FxAccountAbstractActivity.java | 80 - .../FxAccountConfirmAccountActivityWeb.java | 11 - .../FxAccountFinishMigratingActivityWeb.java | 11 - .../activities/FxAccountGetStartedActivityWeb.java | 11 - .../fxa/activities/FxAccountStatusActivity.java | 228 --- .../fxa/activities/FxAccountStatusFragment.java | 949 ----------- .../FxAccountUpdateCredentialsActivityWeb.java | 11 - .../fxa/activities/FxAccountWebFlowActivity.java | 91 -- .../activities/PicassoPreferenceIconTarget.java | 63 - .../gecko/fxa/authenticator/AccountPickler.java | 362 ---- .../gecko/fxa/authenticator/AndroidFxAccount.java | 929 ----------- .../FxADefaultLoginStateMachineDelegate.java | 84 - .../fxa/authenticator/FxAccountAuthenticator.java | 385 ----- .../FxAccountAuthenticatorService.java | 55 - .../fxa/authenticator/FxAccountLoginDelegate.java | 26 - .../fxa/authenticator/FxAccountLoginException.java | 33 - .../gecko/fxa/login/BaseRequestDelegate.java | 49 - .../org/mozilla/gecko/fxa/login/Cohabiting.java | 50 - .../java/org/mozilla/gecko/fxa/login/Doghouse.java | 25 - .../java/org/mozilla/gecko/fxa/login/Engaged.java | 91 -- .../fxa/login/FxAccountLoginStateMachine.java | 84 - .../gecko/fxa/login/FxAccountLoginTransition.java | 68 - .../java/org/mozilla/gecko/fxa/login/Married.java | 117 -- .../gecko/fxa/login/MigratedFromSync11.java | 28 - .../org/mozilla/gecko/fxa/login/Separated.java | 25 - .../java/org/mozilla/gecko/fxa/login/State.java | 72 - .../org/mozilla/gecko/fxa/login/StateFactory.java | 206 --- .../gecko/fxa/login/TokensAndKeysState.java | 45 - .../fxa/receivers/FxAccountDeletedService.java | 154 -- .../fxa/receivers/FxAccountUpgradeReceiver.java | 133 -- .../fxa/sync/FxAccountNotificationManager.java | 114 -- .../gecko/fxa/sync/FxAccountProfileService.java | 107 -- .../gecko/fxa/sync/FxAccountSchedulePolicy.java | 178 -- .../gecko/fxa/sync/FxAccountSyncAdapter.java | 568 ------- .../gecko/fxa/sync/FxAccountSyncDelegate.java | 110 -- .../gecko/fxa/sync/FxAccountSyncService.java | 28 - .../gecko/fxa/sync/FxAccountSyncStatusHelper.java | 113 -- .../org/mozilla/gecko/fxa/sync/SchedulePolicy.java | 43 - .../gecko/push/RegisterUserAgentResponse.java | 19 - .../gecko/push/SubscribeChannelResponse.java | 19 - .../gecko/push/autopush/AutopushClient.java | 410 ----- .../push/autopush/AutopushClientException.java | 81 - .../gecko/sync/AlreadySyncingException.java | 22 - .../org/mozilla/gecko/sync/BackoffHandler.java | 34 - .../gecko/sync/BadRequiredFieldJSONException.java | 5 - .../org/mozilla/gecko/sync/CollectionKeys.java | 199 --- .../org/mozilla/gecko/sync/CommandProcessor.java | 261 --- .../java/org/mozilla/gecko/sync/CommandRunner.java | 22 - .../mozilla/gecko/sync/CredentialException.java | 56 - .../java/org/mozilla/gecko/sync/CryptoRecord.java | 255 --- .../org/mozilla/gecko/sync/DelayedWorkTracker.java | 69 - .../org/mozilla/gecko/sync/EngineSettings.java | 31 - .../org/mozilla/gecko/sync/ExtendedJSONObject.java | 426 ----- .../java/org/mozilla/gecko/sync/GlobalSession.java | 1167 ------------- .../mozilla/gecko/sync/HTTPFailureException.java | 47 - .../org/mozilla/gecko/sync/InfoCollections.java | 103 -- .../org/mozilla/gecko/sync/InfoConfiguration.java | 93 -- .../java/org/mozilla/gecko/sync/InfoCounts.java | 67 - .../org/mozilla/gecko/sync/JSONRecordFetcher.java | 145 -- .../org/mozilla/gecko/sync/KeyBundleProvider.java | 11 - .../java/org/mozilla/gecko/sync/MetaGlobal.java | 372 ----- .../mozilla/gecko/sync/MetaGlobalException.java | 45 - .../sync/MetaGlobalMissingEnginesException.java | 9 - .../gecko/sync/MetaGlobalNotSetException.java | 9 - .../gecko/sync/NoCollectionKeysSetException.java | 16 - .../gecko/sync/NodeAuthenticationException.java | 16 - .../mozilla/gecko/sync/NonArrayJSONException.java | 17 - .../mozilla/gecko/sync/NonObjectJSONException.java | 17 - .../gecko/sync/NullClusterURLException.java | 16 - .../mozilla/gecko/sync/PersistedMetaGlobal.java | 86 - .../mozilla/gecko/sync/PrefsBackoffHandler.java | 59 - .../main/java/org/mozilla/gecko/sync/README.txt | 1 - .../sync/Server11PreviousPostFailedException.java | 12 - .../sync/Server11RecordPostFailedException.java | 12 - .../sync/SharedPreferencesClientsDataDelegate.java | 121 -- .../mozilla/gecko/sync/Sync11Configuration.java | 84 - .../org/mozilla/gecko/sync/SyncConfiguration.java | 480 ------ .../gecko/sync/SyncConfigurationException.java | 16 - .../java/org/mozilla/gecko/sync/SyncConstants.java | 20 - .../java/org/mozilla/gecko/sync/SyncException.java | 34 - .../gecko/sync/SynchronizerConfiguration.java | 68 - .../java/org/mozilla/gecko/sync/ThreadPool.java | 15 - .../gecko/sync/UnexpectedJSONException.java | 25 - ...nSynchronizerConfigurationVersionException.java | 16 - .../main/java/org/mozilla/gecko/sync/Utils.java | 575 ------- .../mozilla/gecko/sync/crypto/CryptoException.java | 19 - .../org/mozilla/gecko/sync/crypto/CryptoInfo.java | 232 --- .../java/org/mozilla/gecko/sync/crypto/HKDF.java | 128 -- .../sync/crypto/HMACVerificationException.java | 12 - .../org/mozilla/gecko/sync/crypto/KeyBundle.java | 135 -- .../sync/crypto/MissingCryptoInputException.java | 9 - .../gecko/sync/crypto/NoKeyBundleException.java | 9 - .../java/org/mozilla/gecko/sync/crypto/PBKDF2.java | 78 - .../gecko/sync/crypto/PersistedCrypto5Keys.java | 103 -- .../gecko/sync/delegates/ClientsDataDelegate.java | 28 - .../gecko/sync/delegates/FreshStartDelegate.java | 10 - .../sync/delegates/GlobalSessionCallback.java | 49 - .../sync/delegates/JSONRecordFetchDelegate.java | 19 - .../gecko/sync/delegates/KeyUploadDelegate.java | 21 - .../gecko/sync/delegates/MetaGlobalDelegate.java | 15 - .../gecko/sync/delegates/WipeServerDelegate.java | 10 - .../middleware/Crypto5MiddlewareRepository.java | 76 - .../Crypto5MiddlewareRepositorySession.java | 172 -- .../sync/middleware/MiddlewareRepository.java | 22 - .../middleware/MiddlewareRepositorySession.java | 185 --- .../net/AbstractBearerTokenAuthHeaderProvider.java | 34 - .../mozilla/gecko/sync/net/AuthHeaderProvider.java | 30 - .../org/mozilla/gecko/sync/net/BaseResource.java | 565 ------- .../gecko/sync/net/BaseResourceDelegate.java | 44 - .../gecko/sync/net/BasicAuthHeaderProvider.java | 51 - .../gecko/sync/net/BearerAuthHeaderProvider.java | 22 - .../sync/net/BrowserIDAuthHeaderProvider.java | 23 - .../gecko/sync/net/ConnectionMonitorThread.java | 44 - .../sync/net/GzipNonChunkedCompressingEntity.java | 92 -- .../gecko/sync/net/HMACAuthHeaderProvider.java | 257 --- .../gecko/sync/net/HandleProgressException.java | 15 - .../gecko/sync/net/HawkAuthHeaderProvider.java | 403 ----- .../gecko/sync/net/HttpResponseObserver.java | 20 - .../org/mozilla/gecko/sync/net/MozResponse.java | 225 --- .../java/org/mozilla/gecko/sync/net/Resource.java | 20 - .../mozilla/gecko/sync/net/ResourceDelegate.java | 55 - .../org/mozilla/gecko/sync/net/SRPConstants.java | 174 -- .../org/mozilla/gecko/sync/net/SyncResponse.java | 157 -- .../sync/net/SyncStorageCollectionRequest.java | 145 -- .../net/SyncStorageCollectionRequestDelegate.java | 9 - .../gecko/sync/net/SyncStorageRecordRequest.java | 95 -- .../mozilla/gecko/sync/net/SyncStorageRequest.java | 204 --- .../gecko/sync/net/SyncStorageRequestDelegate.java | 38 - .../net/SyncStorageRequestIncrementalDelegate.java | 9 - .../gecko/sync/net/SyncStorageResponse.java | 85 - .../mozilla/gecko/sync/net/TLSSocketFactory.java | 62 - .../sync/net/WBOCollectionRequestDelegate.java | 35 - .../mozilla/gecko/sync/net/WBORequestDelegate.java | 14 - .../BookmarkNeedsReparentingException.java | 17 - .../sync/repositories/BookmarksRepository.java | 16 - .../ConstrainedServer11Repository.java | 51 - .../sync/repositories/FetchFailedException.java | 11 - .../sync/repositories/HashSetStoreTracker.java | 61 - .../gecko/sync/repositories/HistoryRepository.java | 16 - .../sync/repositories/IdentityRecordFactory.java | 15 - .../repositories/InactiveSessionException.java | 17 - .../repositories/InvalidBookmarkTypeException.java | 17 - .../sync/repositories/InvalidRequestException.java | 16 - .../InvalidSessionTransitionException.java | 17 - .../MultipleRecordsForGuidException.java | 16 - .../repositories/NoContentProviderException.java | 25 - .../sync/repositories/NoGuidForIdException.java | 16 - .../repositories/NoStoreDelegateException.java | 11 - .../sync/repositories/NullCursorException.java | 17 - .../sync/repositories/ParentNotFoundException.java | 17 - .../repositories/ProfileDatabaseException.java | 17 - .../gecko/sync/repositories/RecordFactory.java | 13 - .../gecko/sync/repositories/RecordFilter.java | 11 - .../gecko/sync/repositories/Repository.java | 18 - .../gecko/sync/repositories/RepositorySession.java | 384 ----- .../sync/repositories/RepositorySessionBundle.java | 55 - .../sync/repositories/Server11Repository.java | 144 -- .../repositories/Server11RepositorySession.java | 104 -- .../sync/repositories/StoreFailedException.java | 11 - .../gecko/sync/repositories/StoreTracker.java | 82 - .../StoreTrackingRepositorySession.java | 102 -- .../AndroidBrowserBookmarksDataAccessor.java | 326 ---- .../android/AndroidBrowserBookmarksRepository.java | 25 - .../AndroidBrowserBookmarksRepositorySession.java | 1107 ------------- .../android/AndroidBrowserHistoryDataAccessor.java | 188 --- .../android/AndroidBrowserHistoryRepository.java | 25 - .../AndroidBrowserHistoryRepositorySession.java | 208 --- .../android/AndroidBrowserRepository.java | 74 - .../AndroidBrowserRepositoryDataAccessor.java | 232 --- .../android/AndroidBrowserRepositorySession.java | 792 --------- .../android/BookmarksDeletionManager.java | 239 --- .../android/BookmarksInsertionManager.java | 298 ---- .../android/BrowserContractHelpers.java | 154 -- .../android/CachedSQLiteOpenHelper.java | 62 - .../sync/repositories/android/ClientsDatabase.java | 252 --- .../android/ClientsDatabaseAccessor.java | 178 -- .../repositories/android/FennecTabsRepository.java | 383 ----- .../android/FormHistoryRepositorySession.java | 723 -------- .../android/PasswordsRepositorySession.java | 725 -------- .../gecko/sync/repositories/android/RepoUtils.java | 290 ---- .../sync/repositories/android/VisitsHelper.java | 130 -- ...eferrableRepositorySessionCreationDelegate.java | 41 - .../DeferredRepositorySessionBeginDelegate.java | 46 - ...erredRepositorySessionFetchRecordsDelegate.java | 56 - .../DeferredRepositorySessionFinishDelegate.java | 51 - .../DeferredRepositorySessionStoreDelegate.java | 57 - .../delegates/RepositorySessionBeginDelegate.java | 23 - .../delegates/RepositorySessionCleanDelegate.java | 12 - .../RepositorySessionCreationDelegate.java | 15 - .../RepositorySessionFetchRecordsDelegate.java | 27 - .../delegates/RepositorySessionFinishDelegate.java | 16 - .../RepositorySessionGuidsSinceDelegate.java | 10 - .../delegates/RepositorySessionStoreDelegate.java | 23 - .../delegates/RepositorySessionWipeDelegate.java | 13 - .../sync/repositories/domain/BookmarkRecord.java | 488 ------ .../repositories/domain/BookmarkRecordFactory.java | 25 - .../sync/repositories/domain/ClientRecord.java | 231 --- .../repositories/domain/ClientRecordFactory.java | 17 - .../repositories/domain/FormHistoryRecord.java | 139 -- .../sync/repositories/domain/HistoryRecord.java | 217 --- .../repositories/domain/HistoryRecordFactory.java | 25 - .../sync/repositories/domain/PasswordRecord.java | 205 --- .../repositories/domain/PasswordRecordFactory.java | 19 - .../gecko/sync/repositories/domain/Record.java | 308 ---- .../repositories/domain/RecordParseException.java | 14 - .../gecko/sync/repositories/domain/TabsRecord.java | 153 -- .../repositories/domain/TabsRecordFactory.java | 17 - .../sync/repositories/domain/VersionConstants.java | 14 - .../downloaders/BatchingDownloader.java | 310 ---- .../downloaders/BatchingDownloaderDelegate.java | 91 -- .../sync/repositories/uploaders/BatchMeta.java | 165 -- .../repositories/uploaders/BatchingUploader.java | 344 ---- .../repositories/uploaders/BufferSizeTracker.java | 103 -- .../repositories/uploaders/MayUploadProvider.java | 9 - .../gecko/sync/repositories/uploaders/Payload.java | 66 - .../uploaders/PayloadUploadDelegate.java | 185 --- .../uploaders/RecordUploadRunnable.java | 176 -- .../org/mozilla/gecko/sync/setup/Constants.java | 29 - .../gecko/sync/setup/InvalidSyncKeyException.java | 9 - .../gecko/sync/setup/activities/ActivityUtils.java | 34 - .../gecko/sync/setup/activities/WebURLFinder.java | 161 -- .../sync/stage/AbstractNonRepositorySyncStage.java | 26 - .../stage/AbstractSessionManagingSyncStage.java | 43 - .../AndroidBrowserBookmarksServerSyncStage.java | 80 - .../AndroidBrowserHistoryServerSyncStage.java | 74 - .../gecko/sync/stage/CheckPreconditionsStage.java | 13 - .../mozilla/gecko/sync/stage/CompletedStage.java | 16 - .../gecko/sync/stage/EnsureCrypto5KeysStage.java | 192 --- .../sync/stage/FennecTabsServerSyncStage.java | 40 - .../sync/stage/FetchInfoCollectionsStage.java | 44 - .../sync/stage/FetchInfoConfigurationStage.java | 59 - .../gecko/sync/stage/FetchMetaGlobalStage.java | 79 - .../sync/stage/FormHistoryServerSyncStage.java | 76 - .../mozilla/gecko/sync/stage/GlobalSyncStage.java | 93 -- .../gecko/sync/stage/NoSuchStageException.java | 13 - .../gecko/sync/stage/PasswordsServerSyncStage.java | 38 - .../stage/SafeConstrainedServer11Repository.java | 110 -- .../mozilla/gecko/sync/stage/ServerSyncStage.java | 627 ------- .../gecko/sync/stage/SyncClientsEngineStage.java | 691 -------- .../gecko/sync/stage/UploadMetaGlobalStage.java | 18 - .../synchronizer/ConcurrentRecordConsumer.java | 122 -- .../gecko/sync/synchronizer/RecordConsumer.java | 26 - .../gecko/sync/synchronizer/RecordsChannel.java | 292 ---- .../sync/synchronizer/RecordsChannelDelegate.java | 13 - .../sync/synchronizer/RecordsConsumerDelegate.java | 23 - .../sync/synchronizer/SerialRecordConsumer.java | 131 -- .../sync/synchronizer/ServerLocalSynchronizer.java | 18 - .../ServerLocalSynchronizerSession.java | 78 - .../synchronizer/SessionNotBegunException.java | 19 - .../gecko/sync/synchronizer/Synchronizer.java | 105 -- .../sync/synchronizer/SynchronizerDelegate.java | 10 - .../sync/synchronizer/SynchronizerSession.java | 425 ----- .../synchronizer/SynchronizerSessionDelegate.java | 13 - .../gecko/sync/synchronizer/UnbundleError.java | 19 - .../synchronizer/UnexpectedSessionException.java | 26 - .../gecko/sync/telemetry/TelemetryContract.java | 56 - .../gecko/tokenserver/TokenServerClient.java | 330 ---- .../tokenserver/TokenServerClientDelegate.java | 19 - .../gecko/tokenserver/TokenServerException.java | 89 - .../gecko/tokenserver/TokenServerToken.java | 19 - .../java/org/mozilla/gecko/util/PRNGFixes.java | 339 ---- .../res/drawable-hdpi/fxaccount_sync_error.png | Bin 543 -> 0 bytes .../main/res/drawable-hdpi/sync_avatar_default.png | Bin 5146 -> 0 bytes .../src/main/res/drawable-hdpi/sync_desktop.png | Bin 196 -> 0 bytes .../res/drawable-hdpi/sync_desktop_inactive.png | Bin 211 -> 0 bytes .../src/main/res/drawable-hdpi/sync_mobile.png | Bin 163 -> 0 bytes .../res/drawable-hdpi/sync_mobile_inactive.png | Bin 165 -> 0 bytes .../src/main/res/drawable-hdpi/sync_promo.png | Bin 994 -> 0 bytes .../res/drawable-xhdpi/fxaccount_sync_error.png | Bin 716 -> 0 bytes .../src/main/res/drawable-xhdpi/sync_desktop.png | Bin 229 -> 0 bytes .../res/drawable-xhdpi/sync_desktop_inactive.png | Bin 244 -> 0 bytes .../src/main/res/drawable-xhdpi/sync_mobile.png | Bin 210 -> 0 bytes .../res/drawable-xhdpi/sync_mobile_inactive.png | Bin 215 -> 0 bytes .../src/main/res/drawable-xhdpi/sync_promo.png | Bin 1236 -> 0 bytes .../res/drawable-xxhdpi/fxaccount_sync_error.png | Bin 1070 -> 0 bytes .../res/drawable-xxhdpi/sync_avatar_default.png | Bin 11124 -> 0 bytes .../src/main/res/drawable-xxhdpi/sync_desktop.png | Bin 339 -> 0 bytes .../res/drawable-xxhdpi/sync_desktop_inactive.png | Bin 363 -> 0 bytes .../src/main/res/drawable-xxhdpi/sync_mobile.png | Bin 246 -> 0 bytes .../res/drawable-xxhdpi/sync_mobile_inactive.png | Bin 249 -> 0 bytes .../layout/fxaccount_preference_list_fragment.xml | 40 - .../layout/fxaccount_status_error_preference.xml | 66 - .../src/main/res/layout/homescreen_prompt.xml | 92 -- .../src/main/res/layout/simple_helper_ui.xml | 61 - .../src/main/res/menu/fxaccount_status_menu.xml | 8 - .../src/main/res/values-v11/fxaccount_styles.xml | 21 - .../src/main/res/values/fxaccount_colors.xml | 9 - .../src/main/res/values/fxaccount_dimens.xml | 18 - .../src/main/res/values/fxaccount_styles.xml | 27 - .../src/main/res/xml/fxaccount_authenticator.xml | 11 - .../src/main/res/xml/fxaccount_options.xml | 18 - .../main/res/xml/fxaccount_status_prefscreen.xml | 142 -- .../src/main/res/xml/fxaccount_syncadapter.xml | 12 - mobile/android/services/strings.xml.in | 86 - modules/libpref/Preferences.cpp | 2 - modules/libpref/init/all.js | 3 - netwerk/base/nsFileStreams.cpp | 6 +- old-configure.in | 7 - services/cloudsync/CloudSync.jsm | 89 - services/cloudsync/CloudSyncAdapters.jsm | 88 - services/cloudsync/CloudSyncBookmarks.jsm | 795 --------- .../cloudsync/CloudSyncBookmarksFolderCache.jsm | 105 -- services/cloudsync/CloudSyncEventSource.jsm | 65 - services/cloudsync/CloudSyncLocal.jsm | 87 - services/cloudsync/CloudSyncPlacesWrapper.jsm | 375 ----- services/cloudsync/CloudSyncTabs.jsm | 318 ---- services/cloudsync/docs/api.md | 234 --- services/cloudsync/docs/architecture.rst | 54 - services/cloudsync/docs/dataformat.rst | 77 - services/cloudsync/docs/example.rst | 132 -- services/cloudsync/docs/index.rst | 19 - services/cloudsync/moz.build | 21 - services/cloudsync/tests/mochitest/browser.ini | 5 - .../cloudsync/tests/mochitest/browser_tabEvents.js | 79 - .../cloudsync/tests/mochitest/other_window.html | 7 - services/cloudsync/tests/xpcshell/head.js | 10 - .../cloudsync/tests/xpcshell/test_bookmarks.js | 73 - services/cloudsync/tests/xpcshell/test_lazyload.js | 18 - services/cloudsync/tests/xpcshell/test_module.js | 19 - services/cloudsync/tests/xpcshell/test_tabs.js | 29 - services/cloudsync/tests/xpcshell/xpcshell.ini | 10 - services/fxaccounts/Credentials.jsm | 136 -- services/fxaccounts/FxAccounts.jsm | 1725 -------------------- services/fxaccounts/FxAccountsClient.jsm | 623 ------- services/fxaccounts/FxAccountsCommon.js | 368 ----- services/fxaccounts/FxAccountsComponents.manifest | 4 - services/fxaccounts/FxAccountsConfig.jsm | 179 -- services/fxaccounts/FxAccountsOAuthClient.jsm | 269 --- services/fxaccounts/FxAccountsOAuthGrantClient.jsm | 241 --- services/fxaccounts/FxAccountsProfile.jsm | 191 --- services/fxaccounts/FxAccountsProfileClient.jsm | 260 --- services/fxaccounts/FxAccountsPush.js | 240 --- services/fxaccounts/FxAccountsStorage.jsm | 606 ------- services/fxaccounts/FxAccountsWebChannel.jsm | 474 ------ .../fxaccounts/interfaces/nsIFxAccountsUIGlue.idl | 15 - services/fxaccounts/moz.build | 32 - services/fxaccounts/tests/mochitest/chrome.ini | 7 - .../tests/mochitest/file_invalidEmailCase.sjs | 80 - .../tests/mochitest/test_invalidEmailCase.html | 131 -- services/fxaccounts/tests/xpcshell/head.js | 18 - .../fxaccounts/tests/xpcshell/test_accounts.js | 1531 ----------------- .../xpcshell/test_accounts_device_registration.js | 526 ------ services/fxaccounts/tests/xpcshell/test_client.js | 917 ----------- .../fxaccounts/tests/xpcshell/test_credentials.js | 110 -- .../tests/xpcshell/test_loginmgr_storage.js | 214 --- .../fxaccounts/tests/xpcshell/test_oauth_client.js | 55 - .../tests/xpcshell/test_oauth_grant_client.js | 292 ---- .../xpcshell/test_oauth_grant_client_server.js | 73 - .../tests/xpcshell/test_oauth_token_storage.js | 165 -- .../fxaccounts/tests/xpcshell/test_oauth_tokens.js | 251 --- services/fxaccounts/tests/xpcshell/test_profile.js | 409 ----- .../tests/xpcshell/test_profile_client.js | 411 ----- .../fxaccounts/tests/xpcshell/test_push_service.js | 236 --- .../tests/xpcshell/test_storage_manager.js | 477 ------ .../fxaccounts/tests/xpcshell/test_web_channel.js | 499 ------ services/fxaccounts/tests/xpcshell/xpcshell.ini | 23 - services/moz.build | 6 - services/sync/modules-testing/fxa_utils.js | 58 - services/sync/modules-testing/utils.js | 85 +- services/sync/modules/util.js | 40 - services/sync/moz.build | 1 - .../sync/tests/unit/test_browserid_identity.js | 682 -------- services/sync/tests/unit/test_errorhandler.js | 4 - .../sync/tests/unit/test_fxa_node_reassignment.js | 321 ---- .../sync/tests/unit/test_fxa_service_cluster.js | 68 - services/sync/tests/unit/test_fxa_startOver.js | 63 - services/sync/tests/unit/test_load_modules.js | 1 - services/sync/tests/unit/xpcshell.ini | 6 - .../extensions/tps/resource/auth/fxaccounts.jsm | 96 -- services/sync/tps/extensions/tps/resource/tps.jsm | 4 +- testing/profiles/prefs_general.js | 15 - .../mochitest-browser-chrome-e10s.runtimes.json | 1 - .../mochitest-browser-chrome.runtimes.json | 1 - testing/talos/talos/config.py | 2 - toolkit/components/passwordmgr/LoginHelper.jsm | 6 +- .../components/passwordmgr/storage-mozStorage.js | 2 +- toolkit/identity/FirefoxAccounts.jsm | 313 ---- toolkit/identity/moz.build | 4 - toolkit/identity/tests/unit/head_identity.js | 8 - .../identity/tests/unit/test_firefox_accounts.js | 270 --- toolkit/identity/tests/unit/xpcshell.ini | 1 - toolkit/modules/AppConstants.jsm | 7 - toolkit/modules/moz.build | 3 +- toolkit/xre/nsAppRunner.cpp | 2 +- .../lib/rules/import-browserjs-globals.js | 3 +- tools/lint/eslint/modules.json | 11 +- widget/cocoa/nsNativeThemeCocoa.mm | 3 +- 569 files changed, 1179 insertions(+), 62592 deletions(-) diff --cc application/basilisk/base/content/browser-syncui.js index 7a80be8,67056e2..d0f4624 --- a/application/basilisk/base/content/browser-syncui.js +++ b/application/basilisk/base/content/browser-syncui.js @@@ -94,101 -64,54 +64,51 @@@ var gSyncUI = this.updateUI(); }, + initNotifications: function SUI_initNotifications() { + const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + let notificationbox = document.createElementNS(XULNS, "notificationbox"); + notificationbox.id = "sync-notifications"; + notificationbox.setAttribute("flex", "1"); - // Returns a promise that resolves with true if Sync needs to be configured, - // false otherwise. - _needsSetup() { - // If Sync is configured for FxAccounts then we do that promise-dance. - if (this.weaveService.fxAccountsEnabled) { - return fxAccounts.getSignedInUser().then(user => { - // We want to treat "account needs verification" as "needs setup". - return !(user && user.verified); - }); - } - // We are using legacy sync - check that. - let firstSync = Services.prefs.getCharPref("services.sync.firstSync", ""); + let bottombox = document.getElementById("browser-bottombox"); + bottombox.insertBefore(notificationbox, bottombox.firstChild); - return Promise.resolve(Weave.Status.checkSetup() == Weave.CLIENT_NOT_CONFIGURED || - firstSync == "notReady"); + // Force a style flush to ensure that our binding is attached. + notificationbox.clientTop; + + // notificationbox will listen to observers from now on. + Services.obs.removeObserver(this, "weave:notification:added"); }, - // Returns a promise that resolves with true if the user currently signed in - // to Sync needs to be verified, false otherwise. - _needsVerification() { - // For callers who care about the distinction between "needs setup" and - // "needs verification" - if (this.weaveService.fxAccountsEnabled) { - return fxAccounts.getSignedInUser().then(user => { - // If there is no user, they can't be in a "needs verification" state. - if (!user) { - return false; - } - return !user.verified; - }); - } + _wasDelayed: false, - // Otherwise we are configured for legacy Sync, which has no verification - // concept. - return Promise.resolve(false); + _needsSetup: function SUI__needsSetup() { - let firstSync = ""; - try { - firstSync = Services.prefs.getCharPref("services.sync.firstSync"); - } catch (e) { } ++ let firstSync = Services.prefs.getCharPref("services.sync.firstSync", ""); + return Weave.Status.checkSetup() == Weave.CLIENT_NOT_CONFIGURED || + firstSync == "notReady"; }, - // Note that we don't show login errors in a notification bar here, but do - // still need to track a login-failed state so the "Tools" menu updates - // with the correct state. - _loginFailed: function () { - // If Sync isn't already ready, we don't want to force it to initialize - // by referencing Weave.Status - and it isn't going to be accurate before - // Sync is ready anyway. - if (!this.weaveService.ready) { - this.log.debug("_loginFailed has sync not ready, so returning false"); - return false; - } - this.log.debug("_loginFailed has sync state=${sync}", - { sync: Weave.Status.login}); - return Weave.Status.login == Weave.LOGIN_FAILED_LOGIN_REJECTED; - }, + updateUI: function SUI_updateUI() { + let needsSetup = this._needsSetup(); + document.getElementById("sync-setup-state").hidden = !needsSetup; + document.getElementById("sync-syncnow-state").hidden = needsSetup; - // Kick off an update of the UI - does *not* return a promise. - updateUI() { - this._promiseUpdateUI().catch(err => { - this.log.error("updateUI failed", err); - }) - }, + if (!gBrowser) + return; - // Updates the UI - returns a promise. - _promiseUpdateUI() { - return this._needsSetup().then(needsSetup => { - if (!gBrowser) - return Promise.resolve(); - - let loginFailed = this._loginFailed(); - - // Start off with a clean slate - document.getElementById("sync-reauth-state").hidden = true; - document.getElementById("sync-setup-state").hidden = true; - document.getElementById("sync-syncnow-state").hidden = true; - - #ifdef MOZ_SERVICES_CLOUDSYNC - if (CloudSync && CloudSync.ready && CloudSync().adapters.count) { - document.getElementById("sync-syncnow-state").hidden = false; - } else if (loginFailed) { - #else - if (loginFailed) { - #endif - // unhiding this element makes the menubar show the login failure state. - document.getElementById("sync-reauth-state").hidden = false; - } else if (needsSetup) { - document.getElementById("sync-setup-state").hidden = false; - } else { - document.getElementById("sync-syncnow-state").hidden = false; - } + let button = document.getElementById("sync-button"); + if (!button) + return; - return this._updateSyncButtonsTooltip(); - }); + button.removeAttribute("status"); + this._updateLastSyncTime(); + if (needsSetup) + button.removeAttribute("tooltiptext"); }, + // Functions called by observers - onActivityStart() { + onActivityStart: function SUI_onActivityStart() { if (!gBrowser) return; @@@ -329,119 -261,63 +258,62 @@@ "syncAddDevice", "centerscreen,chrome,resizable=no"); }, - openPrefs: function (entryPoint) { - openPreferences("paneSync", { urlParams: { entrypoint: entryPoint } }); + openQuotaDialog: function SUI_openQuotaDialog() { + let win = Services.wm.getMostRecentWindow("Sync:ViewQuota"); + if (win) + win.focus(); + else + Services.ww.activeWindow.openDialog( + "chrome://browser/content/sync/quota.xul", "", + "centerscreen,chrome,dialog,modal"); }, - openSignInAgainPage: function (entryPoint = "syncbutton") { - gFxAccounts.openSignInAgainPage(entryPoint); + openPrefs: function SUI_openPrefs() { + openPreferences("paneSync"); }, - /* After Sync is initialized we perform a once-only check for the sync - button being in "customize purgatory" and if so, move it to the panel. - This is done primarily for profiles created before SyncedTabs landed, - where the button defaulted to being in that purgatory. - We use a preference to ensure we only do it once, so people can still - customize it away and have it stick. - */ - maybeMoveSyncedTabsButton() { - const prefName = "browser.migrated-sync-button"; - let migrated = Services.prefs.getBoolPref(prefName, false); - if (migrated) { - + // Helpers + _updateLastSyncTime: function SUI__updateLastSyncTime() { + if (!gBrowser) return; - } - if (!CustomizableUI.getPlacementOfWidget("sync-button")) { - CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_PANEL); - } - Services.prefs.setBoolPref(prefName, true); - }, - /* Update the tooltip for the sync-status broadcaster (which will update the - Sync Toolbar button and the Sync spinner in the FxA hamburger area.) - If Sync is configured, the tooltip is when the last sync occurred, - otherwise the tooltip reflects the fact that Sync needs to be - (re-)configured. - */ - _updateSyncButtonsTooltip: Task.async(function* () { - if (!gBrowser) + let syncButton = document.getElementById("sync-button"); + if (!syncButton) return; - let email; + let lastSync; try { - email = Services.prefs.getCharPref("services.sync.username"); - } catch (ex) {} - - let needsSetup = yield this._needsSetup(); - let needsVerification = yield this._needsVerification(); - let loginFailed = this._loginFailed(); - // This is a little messy as the Sync buttons are 1/2 Sync related and - // 1/2 FxA related - so for some strings we use Sync strings, but for - // others we reach into gFxAccounts for strings. - let tooltiptext; - if (needsVerification) { - // "needs verification" - tooltiptext = gFxAccounts.strings.formatStringFromName("verifyDescription", [email], 1); - } else if (needsSetup) { - // "needs setup". - tooltiptext = this._stringBundle.GetStringFromName("signInToSync.description"); - } else if (loginFailed) { - // "need to reconnect/re-enter your password" - tooltiptext = gFxAccounts.strings.formatStringFromName("reconnectDescription", [email], 1); - } else { - // Sync appears configured - format the "last synced at" time. - try { - let lastSync = new Date(Services.prefs.getCharPref("services.sync.lastSync")); - tooltiptext = this.formatLastSyncDate(lastSync); - } - catch (e) { - // pref doesn't exist (which will be the case until we've seen the - // first successful sync) or is invalid (which should be impossible!) - // Just leave tooltiptext as the empty string in these cases, which - // will cause the tooltip to be removed below. - } + lastSync = Services.prefs.getCharPref("services.sync.lastSync"); } - - // We've done all our promise-y work and ready to update the UI - make - // sure it hasn't been torn down since we started. - if (!gBrowser) + catch (e) { }; + if (!lastSync || this._needsSetup()) { + syncButton.removeAttribute("tooltiptext"); return; - - let broadcaster = document.getElementById("sync-status"); - if (broadcaster) { - if (tooltiptext) { - broadcaster.setAttribute("tooltiptext", tooltiptext); - } else { - broadcaster.removeAttribute("tooltiptext"); - } - } - }), - - formatLastSyncDate: function(date) { - let dateFormat; - let sixDaysAgo = (() => { - let date = new Date(); - date.setDate(date.getDate() - 6); - date.setHours(0, 0, 0, 0); - return date; - })(); - // It may be confusing for the user to see "Last Sync: Monday" when the last sync was a indeed a Monday but 3 weeks ago - if (date < sixDaysAgo) { - dateFormat = {month: 'long', day: 'numeric'}; - } else { - dateFormat = {weekday: 'long', hour: 'numeric', minute: 'numeric'}; } - let lastSyncDateString = date.toLocaleDateString(undefined, dateFormat); - return this._stringBundle.formatStringFromName("lastSync2.label", [lastSyncDateString], 1); + + // Show the day-of-week and time (HH:MM) of last sync + let lastSyncDate = new Date(lastSync).toLocaleFormat("%a %H:%M"); + let lastSyncLabel = + this._stringBundle.formatStringFromName("lastSync2.label", [lastSyncDate], 1); + + syncButton.setAttribute("tooltiptext", lastSyncLabel); }, - onClientsSynced: function() { - let broadcaster = document.getElementById("sync-syncnow-state"); - if (broadcaster) { - if (Weave.Service.clientsEngine.stats.numClients > 1) { - broadcaster.setAttribute("devices-status", "multi"); - } else { - broadcaster.setAttribute("devices-status", "single"); - } + clearError: function SUI_clearError(errorString) { + Weave.Notifications.removeAll(errorString); + this.updateUI(); + }, + + onSyncFinish: function SUI_onSyncFinish() { + let title = this._stringBundle.GetStringFromName("error.sync.title"); + + // Clear out sync failures on a successful sync + this.clearError(title); + + if (this._wasDelayed && Weave.Status.sync != Weave.NO_SYNC_NODE_FOUND) { + title = this._stringBundle.GetStringFromName("error.sync.no_node_found.title"); + this.clearError(title); + this._wasDelayed = false; } }, diff --cc application/basilisk/components/sync/aboutSyncTabs.js index 69ec71e,410494b..4808c05 --- a/application/basilisk/components/sync/aboutSyncTabs.js +++ b/application/basilisk/components/sync/aboutSyncTabs.js @@@ -303,10 -251,16 +251,10 @@@ var RemoteTabViewer = } }, - _refetchTabs: function (force) { + _refetchTabs: function(force) { if (!force) { // Don't bother refetching tabs if we already did so recently - let lastFetch = 0; - try { - lastFetch = Services.prefs.getIntPref("services.sync.lastTabFetch"); - } - catch (e) { - /* Just use the default value of 0 */ - } + lastFetch = Services.prefs.getIntPref("services.sync.lastTabFetch", 0); let now = Math.floor(Date.now() / 1000); if (now - lastFetch < 30) { -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/pale-moon.git