diff --git a/React/Base/RCTBridge.h b/React/Base/RCTBridge.h index 51b2ec0cb..889c4b3e5 100644 --- a/React/Base/RCTBridge.h +++ b/React/Base/RCTBridge.h @@ -44,6 +44,24 @@ RCT_EXTERN NSString *const RCTJavaScriptDidFailToLoadNotification; */ RCT_EXTERN NSString *const RCTDidInitializeModuleNotification; +/** + * This notification fires just before the bridge starts processing a request to + * reload. + */ +RCT_EXTERN NSString *const RCTBridgeWillReloadNotification; + +/** + * This notification fires just before the bridge begins downloading a script + * from the packager. + */ +RCT_EXTERN NSString *const RCTBridgeWillDownloadScriptNotification; + +/** + * This notification fires just after the bridge finishes downloading a script + * from the packager. + */ +RCT_EXTERN NSString *const RCTBridgeDidDownloadScriptNotification; + /** * This block can be used to instantiate modules that require additional * init parameters, or additional configuration prior to being used. diff --git a/React/Base/RCTBridge.m b/React/Base/RCTBridge.m index c769a3664..85ee29802 100644 --- a/React/Base/RCTBridge.m +++ b/React/Base/RCTBridge.m @@ -29,6 +29,9 @@ NSString *const RCTJavaScriptWillStartLoadingNotification = @"RCTJavaScriptWillS NSString *const RCTJavaScriptDidLoadNotification = @"RCTJavaScriptDidLoadNotification"; NSString *const RCTJavaScriptDidFailToLoadNotification = @"RCTJavaScriptDidFailToLoadNotification"; NSString *const RCTDidInitializeModuleNotification = @"RCTDidInitializeModuleNotification"; +NSString *const RCTBridgeWillReloadNotification = @"RCTBridgeWillReloadNotification"; +NSString *const RCTBridgeWillDownloadScriptNotification = @"RCTBridgeWillDownloadScriptNotification"; +NSString *const RCTBridgeDidDownloadScriptNotification = @"RCTBridgeDidDownloadScriptNotification"; static NSMutableArray *RCTModuleClasses; NSArray *RCTGetModuleClasses(void) @@ -260,6 +263,8 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init) [RCTInspectorDevServerHelper disableDebugger]; #endif + [[NSNotificationCenter defaultCenter] postNotificationName:RCTBridgeWillReloadNotification object:self]; + /** * Any thread */ diff --git a/React/CxxBridge/RCTCxxBridge.mm b/React/CxxBridge/RCTCxxBridge.mm index 9d24ebb31..fd0346a74 100644 --- a/React/CxxBridge/RCTCxxBridge.mm +++ b/React/CxxBridge/RCTCxxBridge.mm @@ -377,6 +377,8 @@ struct RCTInstanceCallback : public InstanceCallback { - (void)loadSource:(RCTSourceLoadBlock)_onSourceLoad onProgress:(RCTSourceLoadProgressBlock)onProgress { + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center postNotificationName:RCTBridgeWillDownloadScriptNotification object:_parentBridge]; [_performanceLogger markStartForTag:RCTPLScriptDownload]; NSUInteger cookie = RCTProfileBeginAsyncEvent(0, @"JavaScript download", nil); @@ -388,6 +390,8 @@ struct RCTInstanceCallback : public InstanceCallback { RCTProfileEndAsyncEvent(0, @"native", cookie, @"JavaScript download", @"JS async"); [performanceLogger markStopForTag:RCTPLScriptDownload]; [performanceLogger setValue:sourceLength forTag:RCTPLBundleSize]; + [center postNotificationName:RCTBridgeDidDownloadScriptNotification object:self->_parentBridge]; + _onSourceLoad(error, source, sourceLength); };