From f24ccb3ce617eabdd2d6c873d113dfe18a10f467 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 10 Oct 2018 17:36:41 -0400 Subject: [PATCH] Hang more singletons on SSKEnv. --- Signal/test/mocks/MockEnvironment.m | 3 ++ SignalMessaging/environment/AppSetup.m | 18 ++++++++++- .../src/Contacts/ContactDiscoveryService.h | 2 ++ .../src/Contacts/ContactDiscoveryService.m | 11 +++---- .../src/Messages/OWSDisappearingMessagesJob.h | 2 ++ .../src/Messages/OWSDisappearingMessagesJob.m | 10 +++---- SignalServiceKit/src/SSKEnvironment.h | 17 ++++++++++- SignalServiceKit/src/SSKEnvironment.m | 21 ++++++++++++- .../src/Tests/MockSSKEnvironment.m | 18 ++++++++++- SignalServiceKit/src/Util/AppReadiness.h | 2 ++ SignalServiceKit/src/Util/AppReadiness.m | 10 +++---- SignalServiceKit/src/Util/AppVersion.h | 2 -- SignalServiceKit/src/Util/AppVersion.m | 13 ++++---- SignalServiceKit/src/Util/OWS2FAManager.h | 4 +++ SignalServiceKit/src/Util/OWS2FAManager.m | 30 ++++++++----------- 15 files changed, 113 insertions(+), 50 deletions(-) diff --git a/Signal/test/mocks/MockEnvironment.m b/Signal/test/mocks/MockEnvironment.m index badf2198d..0f178cd90 100644 --- a/Signal/test/mocks/MockEnvironment.m +++ b/Signal/test/mocks/MockEnvironment.m @@ -3,6 +3,9 @@ // #import "MockEnvironment.h" +#import "OWSBackup.h" +#import "OWSContactsSyncing.h" +#import "OWSWindowManager.h" #import NS_ASSUME_NONNULL_BEGIN diff --git a/SignalMessaging/environment/AppSetup.m b/SignalMessaging/environment/AppSetup.m index 3e951ba88..dfe143bd0 100644 --- a/SignalMessaging/environment/AppSetup.m +++ b/SignalMessaging/environment/AppSetup.m @@ -9,9 +9,14 @@ #import #import #import +#import +#import +#import +#import #import #import #import +#import #import #import #import @@ -65,6 +70,12 @@ NS_ASSUME_NONNULL_BEGIN OWSMessageReceiver *messageReceiver = [[OWSMessageReceiver alloc] initWithPrimaryStorage:primaryStorage]; TSSocketManager *socketManager = [[TSSocketManager alloc] init]; TSAccountManager *tsAccountManager = [[TSAccountManager alloc] initWithPrimaryStorage:primaryStorage]; + OWS2FAManager *ows2FAManager = [[OWS2FAManager alloc] initWithPrimaryStorage:primaryStorage]; + AppVersion *appVersion = [[AppVersion alloc] init]; + AppReadiness *appReadiness = [[AppReadiness alloc] initDefault]; + OWSDisappearingMessagesJob *disappearingMessagesJob = + [[OWSDisappearingMessagesJob alloc] initWithPrimaryStorage:primaryStorage]; + ContactDiscoveryService *contactDiscoveryService = [[ContactDiscoveryService alloc] initDefault]; [Environment setShared:[[Environment alloc] initWithPreferences:preferences]]; @@ -82,7 +93,12 @@ NS_ASSUME_NONNULL_BEGIN batchMessageProcessor:batchMessageProcessor messageReceiver:messageReceiver socketManager:socketManager - tsAccountManager:tsAccountManager]]; + tsAccountManager:tsAccountManager + ows2FAManager:ows2FAManager + appVersion:appVersion + appReadiness:appReadiness + disappearingMessagesJob:disappearingMessagesJob + contactDiscoveryService:contactDiscoveryService]]; appSpecificSingletonBlock(); diff --git a/SignalServiceKit/src/Contacts/ContactDiscoveryService.h b/SignalServiceKit/src/Contacts/ContactDiscoveryService.h index 58952bb27..0b2e911e2 100644 --- a/SignalServiceKit/src/Contacts/ContactDiscoveryService.h +++ b/SignalServiceKit/src/Contacts/ContactDiscoveryService.h @@ -45,6 +45,8 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)init NS_UNAVAILABLE; +- (instancetype)initDefault NS_DESIGNATED_INITIALIZER; + + (instancetype)shared; - (void)testService; diff --git a/SignalServiceKit/src/Contacts/ContactDiscoveryService.m b/SignalServiceKit/src/Contacts/ContactDiscoveryService.m index 9ef5af5a1..032e0f4ff 100644 --- a/SignalServiceKit/src/Contacts/ContactDiscoveryService.m +++ b/SignalServiceKit/src/Contacts/ContactDiscoveryService.m @@ -7,6 +7,7 @@ #import "CDSSigningCertificate.h" #import "OWSError.h" #import "OWSRequestFactory.h" +#import "SSKEnvironment.h" #import "TSNetworkManager.h" #import #import @@ -240,14 +241,10 @@ NS_ASSUME_NONNULL_BEGIN + (instancetype)shared { - static dispatch_once_t onceToken; - static id sharedInstance = nil; - dispatch_once(&onceToken, ^{ - sharedInstance = [[ContactDiscoveryService alloc] initDefault]; - }); - return sharedInstance; -} + OWSAssertDebug(SSKEnvironment.shared.contactDiscoveryService); + return SSKEnvironment.shared.contactDiscoveryService; +} - (instancetype)initDefault { diff --git a/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.h b/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.h index af70638e3..bbcd54260 100644 --- a/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.h +++ b/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.h @@ -17,6 +17,8 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage NS_DESIGNATED_INITIALIZER; + - (void)startAnyExpirationForMessage:(TSMessage *)message expirationStartedAt:(uint64_t)expirationStartedAt transaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction; diff --git a/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.m b/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.m index 2015195be..4e0a15de5 100644 --- a/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.m +++ b/SignalServiceKit/src/Messages/OWSDisappearingMessagesJob.m @@ -12,6 +12,7 @@ #import "OWSDisappearingMessagesConfiguration.h" #import "OWSDisappearingMessagesFinder.h" #import "OWSPrimaryStorage.h" +#import "SSKEnvironment.h" #import "TSIncomingMessage.h" #import "TSMessage.h" #import "TSThread.h" @@ -51,12 +52,9 @@ void AssertIsOnDisappearingMessagesQueue() + (instancetype)sharedJob { - static OWSDisappearingMessagesJob *sharedJob = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedJob = [[self alloc] initWithPrimaryStorage:[OWSPrimaryStorage sharedManager]]; - }); - return sharedJob; + OWSAssertDebug(SSKEnvironment.shared.disappearingMessagesJob); + + return SSKEnvironment.shared.disappearingMessagesJob; } - (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage diff --git a/SignalServiceKit/src/SSKEnvironment.h b/SignalServiceKit/src/SSKEnvironment.h index 94db2fd7d..b0f4517d7 100644 --- a/SignalServiceKit/src/SSKEnvironment.h +++ b/SignalServiceKit/src/SSKEnvironment.h @@ -4,9 +4,14 @@ NS_ASSUME_NONNULL_BEGIN +@class AppReadiness; +@class AppVersion; +@class ContactDiscoveryService; @class ContactsUpdater; +@class OWS2FAManager; @class OWSBatchMessageProcessor; @class OWSBlockingManager; +@class OWSDisappearingMessagesJob; @class OWSIdentityManager; @class OWSMessageDecrypter; @class OWSMessageManager; @@ -40,7 +45,12 @@ NS_ASSUME_NONNULL_BEGIN batchMessageProcessor:(OWSBatchMessageProcessor *)batchMessageProcessor messageReceiver:(OWSMessageReceiver *)messageReceiver socketManager:(TSSocketManager *)socketManager - tsAccountManager:(TSAccountManager *)tsAccountManager NS_DESIGNATED_INITIALIZER; + tsAccountManager:(TSAccountManager *)tsAccountManager + ows2FAManager:(OWS2FAManager *)ows2FAManager + appVersion:(AppVersion *)appVersion + appReadiness:(AppReadiness *)appReadiness + disappearingMessagesJob:(OWSDisappearingMessagesJob *)disappearingMessagesJob + contactDiscoveryService:(ContactDiscoveryService *)contactDiscoveryService NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE; @@ -68,6 +78,11 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) OWSMessageReceiver *messageReceiver; @property (nonatomic, readonly) TSSocketManager *socketManager; @property (nonatomic, readonly) TSAccountManager *tsAccountManager; +@property (nonatomic, readonly) OWS2FAManager *ows2FAManager; +@property (nonatomic, readonly) AppVersion *appVersion; +@property (nonatomic, readonly) AppReadiness *appReadiness; +@property (nonatomic, readonly) OWSDisappearingMessagesJob *disappearingMessagesJob; +@property (nonatomic, readonly) ContactDiscoveryService *contactDiscoveryService; // This property is configured after Environment is created. @property (atomic, nullable) id callMessageHandler; diff --git a/SignalServiceKit/src/SSKEnvironment.m b/SignalServiceKit/src/SSKEnvironment.m index 094ecd42b..e163eb85b 100644 --- a/SignalServiceKit/src/SSKEnvironment.m +++ b/SignalServiceKit/src/SSKEnvironment.m @@ -27,6 +27,11 @@ static SSKEnvironment *sharedSSKEnvironment; @property (nonatomic) OWSMessageReceiver *messageReceiver; @property (nonatomic) TSSocketManager *socketManager; @property (nonatomic) TSAccountManager *tsAccountManager; +@property (nonatomic) OWS2FAManager *ows2FAManager; +@property (nonatomic) AppVersion *appVersion; +@property (nonatomic) AppReadiness *appReadiness; +@property (nonatomic) OWSDisappearingMessagesJob *disappearingMessagesJob; +@property (nonatomic) ContactDiscoveryService *contactDiscoveryService; @end @@ -53,7 +58,11 @@ static SSKEnvironment *sharedSSKEnvironment; messageReceiver:(OWSMessageReceiver *)messageReceiver socketManager:(TSSocketManager *)socketManager tsAccountManager:(TSAccountManager *)tsAccountManager -{ + ows2FAManager:(OWS2FAManager *)ows2FAManager + appVersion:(AppVersion *)appVersion + appReadiness:(AppReadiness *)appReadiness + disappearingMessagesJob:(OWSDisappearingMessagesJob *)disappearingMessagesJob + contactDiscoveryService:(ContactDiscoveryService *)contactDiscoveryService { self = [super init]; if (!self) { return self; @@ -74,6 +83,11 @@ static SSKEnvironment *sharedSSKEnvironment; OWSAssertDebug(messageReceiver); OWSAssertDebug(socketManager); OWSAssertDebug(tsAccountManager); + OWSAssertDebug(ows2FAManager); + OWSAssertDebug(appVersion); + OWSAssertDebug(appReadiness); + OWSAssertDebug(disappearingMessagesJob); + OWSAssertDebug(contactDiscoveryService); _contactsManager = contactsManager; _messageSender = messageSender; @@ -90,6 +104,11 @@ static SSKEnvironment *sharedSSKEnvironment; _messageReceiver = messageReceiver; _socketManager = socketManager; _tsAccountManager = tsAccountManager; + _ows2FAManager = ows2FAManager; + _appVersion = appVersion; + _appReadiness = appReadiness; + _disappearingMessagesJob = disappearingMessagesJob; + _contactDiscoveryService = contactDiscoveryService; return self; } diff --git a/SignalServiceKit/src/Tests/MockSSKEnvironment.m b/SignalServiceKit/src/Tests/MockSSKEnvironment.m index 0b2efc20e..098a761a3 100644 --- a/SignalServiceKit/src/Tests/MockSSKEnvironment.m +++ b/SignalServiceKit/src/Tests/MockSSKEnvironment.m @@ -3,8 +3,13 @@ // #import "MockSSKEnvironment.h" +#import "AppReadiness.h" +#import "AppVersion.h" +#import "ContactDiscoveryService.h" +#import "OWS2FAManager.h" #import "OWSBatchMessageProcessor.h" #import "OWSBlockingManager.h" +#import "OWSDisappearingMessagesJob.h" #import "OWSFakeCallMessageHandler.h" #import "OWSFakeContactsManager.h" #import "OWSFakeContactsUpdater.h" @@ -60,6 +65,12 @@ NS_ASSUME_NONNULL_BEGIN OWSMessageReceiver *messageReceiver = [[OWSMessageReceiver alloc] initWithPrimaryStorage:primaryStorage]; TSSocketManager *socketManager = [[TSSocketManager alloc] init]; TSAccountManager *tsAccountManager = [[TSAccountManager alloc] initWithPrimaryStorage:primaryStorage]; + OWS2FAManager *ows2FAManager = [[OWS2FAManager alloc] initWithPrimaryStorage:primaryStorage]; + AppVersion *appVersion = [[AppVersion alloc] init]; + AppReadiness *appReadiness = [[AppReadiness alloc] initDefault]; + OWSDisappearingMessagesJob *disappearingMessagesJob = + [[OWSDisappearingMessagesJob alloc] initWithPrimaryStorage:primaryStorage]; + ContactDiscoveryService *contactDiscoveryService = [[ContactDiscoveryService alloc] initDefault]; self = [super initWithContactsManager:contactsManager messageSender:messageSender @@ -75,7 +86,12 @@ NS_ASSUME_NONNULL_BEGIN batchMessageProcessor:batchMessageProcessor messageReceiver:messageReceiver socketManager:socketManager - tsAccountManager:tsAccountManager]; + tsAccountManager:tsAccountManager + ows2FAManager:ows2FAManager + appVersion:appVersion + appReadiness:appReadiness + disappearingMessagesJob:disappearingMessagesJob + contactDiscoveryService:contactDiscoveryService]; if (!self) { return nil; } diff --git a/SignalServiceKit/src/Util/AppReadiness.h b/SignalServiceKit/src/Util/AppReadiness.h index 8a446fe93..6d086e071 100755 --- a/SignalServiceKit/src/Util/AppReadiness.h +++ b/SignalServiceKit/src/Util/AppReadiness.h @@ -10,6 +10,8 @@ typedef void (^AppReadyBlock)(void); - (instancetype)init NS_UNAVAILABLE; +- (instancetype)initDefault NS_DESIGNATED_INITIALIZER; + // This method can be called on any thread. + (BOOL)isAppReady; diff --git a/SignalServiceKit/src/Util/AppReadiness.m b/SignalServiceKit/src/Util/AppReadiness.m index 33b799179..22a9cb3b7 100755 --- a/SignalServiceKit/src/Util/AppReadiness.m +++ b/SignalServiceKit/src/Util/AppReadiness.m @@ -3,6 +3,7 @@ // #import "AppReadiness.h" +#import "SSKEnvironment.h" #import NS_ASSUME_NONNULL_BEGIN @@ -21,12 +22,9 @@ NS_ASSUME_NONNULL_BEGIN + (instancetype)sharedManager { - static AppReadiness *sharedMyManager = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedMyManager = [[self alloc] initDefault]; - }); - return sharedMyManager; + OWSAssertDebug(SSKEnvironment.shared.appReadiness); + + return SSKEnvironment.shared.appReadiness; } - (instancetype)initDefault diff --git a/SignalServiceKit/src/Util/AppVersion.h b/SignalServiceKit/src/Util/AppVersion.h index 02699caf5..697adc1a2 100755 --- a/SignalServiceKit/src/Util/AppVersion.h +++ b/SignalServiceKit/src/Util/AppVersion.h @@ -14,8 +14,6 @@ @property (atomic, readonly) NSString *lastCompletedLaunchMainAppVersion; @property (atomic, readonly) NSString *lastCompletedLaunchSAEAppVersion; -- (instancetype)init NS_UNAVAILABLE; - + (instancetype)sharedInstance; - (void)mainAppLaunchDidComplete; diff --git a/SignalServiceKit/src/Util/AppVersion.m b/SignalServiceKit/src/Util/AppVersion.m index faef959ac..1841b616a 100755 --- a/SignalServiceKit/src/Util/AppVersion.m +++ b/SignalServiceKit/src/Util/AppVersion.m @@ -3,7 +3,8 @@ // #import "AppVersion.h" -#import +#import "NSUserDefaults+OWS.h" +#import "SSKEnvironment.h" NSString *const kNSUserDefaults_FirstAppVersion = @"kNSUserDefaults_FirstAppVersion"; NSString *const kNSUserDefaults_LastAppVersion = @"kNSUserDefaults_LastVersion"; @@ -31,13 +32,9 @@ NSString *const kNSUserDefaults_LastCompletedLaunchAppVersion_SAE + (instancetype)sharedInstance { - static AppVersion *instance = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - instance = [AppVersion new]; - [instance configure]; - }); - return instance; + OWSAssertDebug(SSKEnvironment.shared.appVersion); + + return SSKEnvironment.shared.appVersion; } - (void)configure { diff --git a/SignalServiceKit/src/Util/OWS2FAManager.h b/SignalServiceKit/src/Util/OWS2FAManager.h index 950fc568c..e1a334ad9 100644 --- a/SignalServiceKit/src/Util/OWS2FAManager.h +++ b/SignalServiceKit/src/Util/OWS2FAManager.h @@ -9,11 +9,15 @@ extern NSString *const NSNotificationName_2FAStateDidChange; typedef void (^OWS2FASuccess)(void); typedef void (^OWS2FAFailure)(NSError *error); +@class OWSPrimaryStorage; + // This class can be safely accessed and used from any thread. @interface OWS2FAManager : NSObject - (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage NS_DESIGNATED_INITIALIZER; + + (instancetype)sharedManager; @property (nullable, nonatomic, readonly) NSString *pinCode; diff --git a/SignalServiceKit/src/Util/OWS2FAManager.m b/SignalServiceKit/src/Util/OWS2FAManager.m index 98fa4d14e..d7b88f497 100644 --- a/SignalServiceKit/src/Util/OWS2FAManager.m +++ b/SignalServiceKit/src/Util/OWS2FAManager.m @@ -6,6 +6,7 @@ #import "NSNotificationCenter+OWS.h" #import "OWSPrimaryStorage.h" #import "OWSRequestFactory.h" +#import "SSKEnvironment.h" #import "TSNetworkManager.h" #import "YapDatabaseConnection+OWS.h" @@ -24,7 +25,6 @@ const NSUInteger kDaySecs = kHourSecs * 24; @interface OWS2FAManager () @property (nonatomic, readonly) YapDatabaseConnection *dbConnection; -@property (nonatomic, readonly) TSNetworkManager *networkManager; @end @@ -34,24 +34,12 @@ const NSUInteger kDaySecs = kHourSecs * 24; + (instancetype)sharedManager { - static OWS2FAManager *sharedMyManager = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedMyManager = [[self alloc] initDefault]; - }); - return sharedMyManager; -} - -- (instancetype)initDefault -{ - OWSPrimaryStorage *primaryStorage = [OWSPrimaryStorage sharedManager]; - TSNetworkManager *networkManager = [TSNetworkManager sharedManager]; + OWSAssertDebug(SSKEnvironment.shared.ows2FAManager); - return [self initWithPrimaryStorage:primaryStorage networkManager:networkManager]; + return SSKEnvironment.shared.ows2FAManager; } - (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage - networkManager:(TSNetworkManager *)networkManager { self = [super init]; @@ -60,16 +48,24 @@ const NSUInteger kDaySecs = kHourSecs * 24; } OWSAssertDebug(primaryStorage); - OWSAssertDebug(networkManager); _dbConnection = primaryStorage.newDatabaseConnection; - _networkManager = networkManager; OWSSingletonAssert(); return self; } +#pragma mark - Dependencies + +- (TSNetworkManager *)networkManager { + OWSAssertDebug(SSKEnvironment.shared.networkManager); + + return SSKEnvironment.shared.networkManager; +} + +#pragma mark - + - (nullable NSString *)pinCode { return [self.dbConnection objectForKey:kOWS2FAManager_PinCode inCollection:kOWS2FAManager_Collection];