Skip to content

Commit 5767b98

Browse files
javachefacebook-github-bot
authored andcommitted
Add JSC utility header to RCTBridge
Reviewed By: shergin Differential Revision: D4823509 fbshipit-source-id: 79c96d3bc183d89a5dec7da06b0a0a710d8c7dea
1 parent 76b93e1 commit 5767b98

File tree

11 files changed

+94
-18
lines changed

11 files changed

+94
-18
lines changed

React/Base/RCTBatchedBridge.m

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,4 +1100,20 @@ - (BOOL)isBatchActive
11001100
return _wasBatchActive;
11011101
}
11021102

1103+
#pragma mark - JavaScriptCore
1104+
1105+
- (JSGlobalContextRef)jsContextRef
1106+
{
1107+
return [self.jsContext JSGlobalContextRef];
1108+
}
1109+
1110+
- (JSContext *)jsContext
1111+
{
1112+
if ([_javaScriptExecutor isKindOfClass:[RCTJSCExecutor class]]) {
1113+
return [(RCTJSCExecutor *)_javaScriptExecutor jsContext];
1114+
} else {
1115+
return nil;
1116+
}
1117+
}
1118+
11031119
@end
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* Copyright (c) 2015-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*/
9+
10+
#import <JavaScriptCore/JavaScriptCore.h>
11+
12+
#import <React/RCTBridge.h>
13+
14+
@interface RCTBridge (JavaScriptCore)
15+
16+
/**
17+
* The JSContext used by the bridge.
18+
*/
19+
@property (nonatomic, readonly, strong) JSContext *jsContext;
20+
21+
/**
22+
* The raw JSGlobalContextRef used by the bridge.
23+
*/
24+
@property (nonatomic, readonly, assign) JSGlobalContextRef jsContextRef;
25+
26+
@end

React/Base/RCTBridge.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#import <React/RCTFrameUpdate.h>
1616
#import <React/RCTInvalidating.h>
1717

18-
@class JSContext;
1918
@class JSValue;
2019
@class RCTBridge;
2120
@class RCTEventDispatcher;
@@ -185,11 +184,6 @@ RCT_EXTERN NSString *RCTBridgeModuleNameForClass(Class bridgeModuleClass);
185184
*/
186185
@property (nonatomic, readonly, getter=isValid) BOOL valid;
187186

188-
/**
189-
* The JSContext used by the bridge.
190-
*/
191-
@property (nonatomic, readonly, weak) JSContext *jsContext;
192-
193187
/**
194188
* Link to the Performance Logger that logs React Native perf events.
195189
*/

React/Base/RCTBridge.m

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#import <objc/runtime.h>
1414

15+
#import "RCTBridge+JavaScriptCore.h"
1516
#import "RCTConvert.h"
1617
#import "RCTEventDispatcher.h"
1718
#import "RCTLog.h"
@@ -378,5 +379,18 @@ - (JSValue *)callFunctionOnModule:(NSString *)module
378379
return [self.batchedBridge callFunctionOnModule:module method:method arguments:arguments error:error];
379380
}
380381

382+
@end
383+
384+
@implementation RCTBridge (JavaScriptCore)
385+
386+
- (JSContext *)jsContext
387+
{
388+
return [self.batchedBridge jsContext];
389+
}
390+
391+
- (JSGlobalContextRef)jsContextRef
392+
{
393+
return [self.batchedBridge jsContextRef];
394+
}
381395

382396
@end

React/CxxBridge/RCTCxxBridge.mm

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,12 @@ + (void)initialize
138138

139139
- (JSContext *)jsContext
140140
{
141-
return contextForGlobalContextRef((JSGlobalContextRef) self->_reactInstance->getJavaScriptContext());
141+
return contextForGlobalContextRef([self jsContextRef]);
142+
}
143+
144+
- (JSGlobalContextRef)jsContextRef
145+
{
146+
return (JSGlobalContextRef)self->_reactInstance->getJavaScriptContext();
142147
}
143148

144149
- (instancetype)initWithParentBridge:(RCTBridge *)bridge

React/DevSupport/RCTSamplingProfilerPackagerMethod.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
* of patent rights can be found in the PATENTS file in the same directory.
88
*/
99

10-
#import <React/RCTBridge.h>
1110
#import <React/RCTPackagerClient.h>
1211

12+
@class RCTBridge;
13+
1314
#if RCT_DEV // Only supported in dev mode
1415

15-
@interface RCTSamplingProfilerPackagerMethod : NSObject<RCTPackagerClientMethod>
16+
@interface RCTSamplingProfilerPackagerMethod : NSObject <RCTPackagerClientMethod>
1617

1718
- (instancetype)initWithBridge:(RCTBridge *)bridge;
1819

React/DevSupport/RCTSamplingProfilerPackagerMethod.mm

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#import <JavaScriptCore/JavaScriptCore.h>
1313

14+
#import <React/RCTBridge+JavaScriptCore.h>
1415
#import <jschelpers/JavaScriptCore.h>
1516

1617
#import "RCTLog.h"
@@ -31,8 +32,7 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge
3132

3233
- (void)handleRequest:(__unused id)params withResponder:(RCTPackagerClientResponder *)responder
3334
{
34-
JSContext *context = _bridge.jsContext;
35-
JSGlobalContextRef globalContext = context.JSGlobalContextRef;
35+
JSGlobalContextRef globalContext = [_bridge jsContextRef];
3636
if (!JSC_JSSamplingProfilerEnabled(globalContext)) {
3737
[responder respondWithError:@"The JSSamplingProfiler is disabled. See 'iOS specific setup' section here https://fburl.com/u4lw7xeq for some help"];
3838
return;
@@ -43,6 +43,7 @@ - (void)handleRequest:(__unused id)params withResponder:(RCTPackagerClientRespon
4343
if (JSC_JSValueGetType(globalContext, jsResult) == kJSTypeNull) {
4444
[responder respondWithResult:@"started"];
4545
} else {
46+
JSContext *context = [_bridge jsContext];
4647
NSString *results = [[JSC_JSValue(globalContext) valueWithJSValueRef:jsResult inContext:context] toObject];
4748
[responder respondWithResult:results];
4849
}

React/Executors/RCTJSCExecutor.mm

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,11 +282,9 @@ - (NSError *)synchronouslyExecuteApplicationScript:(NSData *)script
282282

283283
- (RCTJavaScriptContext *)context
284284
{
285-
RCTAssertThread(_javaScriptThread, @"Must be called on JS thread.");
286285
if (!self.isValid) {
287286
return nil;
288287
}
289-
RCTAssert(_context != nil, @"Fetching context while valid, but before it is created");
290288
return _context;
291289
}
292290

React/Modules/RCTDevSettings.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#import <jschelpers/JavaScriptCore.h>
1717

1818
#import "JSCSamplingProfiler.h"
19+
#import "RCTBridge+JavaScriptCore.h"
1920
#import "RCTBridge+Private.h"
2021
#import "RCTBridgeModule.h"
2122
#import "RCTEventDispatcher.h"
@@ -188,7 +189,7 @@ - (BOOL)isLiveReloadAvailable
188189

189190
- (BOOL)isJSCSamplingProfilerAvailable
190191
{
191-
return JSC_JSSamplingProfilerEnabled(_bridge.jsContext.JSGlobalContextRef);
192+
return JSC_JSSamplingProfilerEnabled(_bridge.jsContextRef);
192193
}
193194

194195
RCT_EXPORT_METHOD(reload)

React/React.xcodeproj/project.pbxproj

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,10 @@
165165
369123E11DDC75850095B341 /* JSCSamplingProfiler.m in Sources */ = {isa = PBXBuildFile; fileRef = 369123E01DDC75850095B341 /* JSCSamplingProfiler.m */; };
166166
391E86A41C623EC800009732 /* RCTTouchEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 391E86A21C623EC800009732 /* RCTTouchEvent.m */; };
167167
3D05745A1DE5FFF500184BB4 /* RCTJavaScriptLoader.mm in Sources */ = {isa = PBXBuildFile; fileRef = AC70D2E81DE489E4002E6351 /* RCTJavaScriptLoader.mm */; };
168+
3D0976C11E97399A00B9C6DD /* RCTBridge+JavaScriptCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0976C01E97399A00B9C6DD /* RCTBridge+JavaScriptCore.h */; };
169+
3D0976C21E9739A100B9C6DD /* RCTBridge+JavaScriptCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0976C01E97399A00B9C6DD /* RCTBridge+JavaScriptCore.h */; };
170+
3D0976C31E9739AE00B9C6DD /* RCTBridge+JavaScriptCore.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D0976C01E97399A00B9C6DD /* RCTBridge+JavaScriptCore.h */; };
171+
3D0976C41E9739B400B9C6DD /* RCTBridge+JavaScriptCore.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D0976C01E97399A00B9C6DD /* RCTBridge+JavaScriptCore.h */; };
168172
3D1E68DB1CABD13900DD7465 /* RCTDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1E68D91CABD13900DD7465 /* RCTDisplayLink.m */; };
169173
3D302F1C1DF8264000D6DDAE /* JSBundleType.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D3CD8F51DE5FB2300167DC4 /* JSBundleType.h */; };
170174
3D302F1E1DF8265A00D6DDAE /* JavaScriptCore.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D7A27DC1DE32541002E3F95 /* JavaScriptCore.h */; };
@@ -804,6 +808,7 @@
804808
dstPath = include/React;
805809
dstSubfolderSpec = 16;
806810
files = (
811+
3D0976C31E9739AE00B9C6DD /* RCTBridge+JavaScriptCore.h in Copy Headers */,
807812
3D6B76D51E83DD3A008FA614 /* RCTDevSettings.h in Copy Headers */,
808813
3D6B76D61E83DD3A008FA614 /* RCTConvert+Transform.h in Copy Headers */,
809814
A12E9E211E5DEAFB0029001B /* RCTPackagerClient.h in Copy Headers */,
@@ -965,6 +970,7 @@
965970
dstPath = include/React;
966971
dstSubfolderSpec = 16;
967972
files = (
973+
3D0976C41E9739B400B9C6DD /* RCTBridge+JavaScriptCore.h in Copy Headers */,
968974
A12E9E1F1E5DEAEF0029001B /* RCTPackagerClient.h in Copy Headers */,
969975
A12E9E201E5DEAEF0029001B /* RCTPackagerClientResponder.h in Copy Headers */,
970976
3D80D91F1DF6FA890028D040 /* RCTImageLoader.h in Copy Headers */,
@@ -1281,6 +1287,7 @@
12811287
369123E01DDC75850095B341 /* JSCSamplingProfiler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSCSamplingProfiler.m; sourceTree = "<group>"; };
12821288
391E86A21C623EC800009732 /* RCTTouchEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTouchEvent.m; sourceTree = "<group>"; };
12831289
391E86A31C623EC800009732 /* RCTTouchEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTouchEvent.h; sourceTree = "<group>"; };
1290+
3D0976C01E97399A00B9C6DD /* RCTBridge+JavaScriptCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTBridge+JavaScriptCore.h"; sourceTree = "<group>"; };
12841291
3D1E68D81CABD13900DD7465 /* RCTDisplayLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTDisplayLink.h; sourceTree = "<group>"; };
12851292
3D1E68D91CABD13900DD7465 /* RCTDisplayLink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTDisplayLink.m; sourceTree = "<group>"; };
12861293
3D1FA07A1DE4F2EA00E03CC6 /* RCTNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTNetworking.h; sourceTree = "<group>"; };
@@ -1724,13 +1731,12 @@
17241731
83CBBA491A601E3B00E9B192 /* Base */ = {
17251732
isa = PBXGroup;
17261733
children = (
1727-
139324FC1E70B069009FD7E0 /* RCTJSCErrorHandling.h */,
1728-
139324FD1E70B069009FD7E0 /* RCTJSCErrorHandling.mm */,
17291734
83CBBA4A1A601E3B00E9B192 /* RCTAssert.h */,
17301735
83CBBA4B1A601E3B00E9B192 /* RCTAssert.m */,
17311736
14C2CA771B3ACB0400E6CBB2 /* RCTBatchedBridge.m */,
17321737
83CBBA5E1A601EAA00E9B192 /* RCTBridge.h */,
17331738
83CBBA5F1A601EAA00E9B192 /* RCTBridge.m */,
1739+
3D0976C01E97399A00B9C6DD /* RCTBridge+JavaScriptCore.h */,
17341740
14A43DB81C1F849600794BC8 /* RCTBridge+Private.h */,
17351741
1482F9E61B55B927000ADFF3 /* RCTBridgeDelegate.h */,
17361742
13AFBCA11C07287B00BBAEAA /* RCTBridgeMethod.h */,
@@ -1755,6 +1761,8 @@
17551761
83CBBA631A601ECA00E9B192 /* RCTJavaScriptExecutor.h */,
17561762
14200DA81AC179B3008EE6BA /* RCTJavaScriptLoader.h */,
17571763
AC70D2E81DE489E4002E6351 /* RCTJavaScriptLoader.mm */,
1764+
139324FC1E70B069009FD7E0 /* RCTJSCErrorHandling.h */,
1765+
139324FD1E70B069009FD7E0 /* RCTJSCErrorHandling.mm */,
17581766
008341F51D1DB34400876D9A /* RCTJSStackFrame.h */,
17591767
008341F41D1DB34400876D9A /* RCTJSStackFrame.m */,
17601768
13A1F71C1A75392D00D3D453 /* RCTKeyCommands.h */,
@@ -1876,6 +1884,7 @@
18761884
3D302F3B1DF828F800D6DDAE /* RCTJavaScriptExecutor.h in Headers */,
18771885
3D302F3C1DF828F800D6DDAE /* RCTJavaScriptLoader.h in Headers */,
18781886
3D302F3D1DF828F800D6DDAE /* RCTJSStackFrame.h in Headers */,
1887+
3D0976C21E9739A100B9C6DD /* RCTBridge+JavaScriptCore.h in Headers */,
18791888
3D302F3E1DF828F800D6DDAE /* RCTKeyCommands.h in Headers */,
18801889
3D302F3F1DF828F800D6DDAE /* RCTLog.h in Headers */,
18811890
3D302F401DF828F800D6DDAE /* RCTModuleData.h in Headers */,
@@ -2087,6 +2096,7 @@
20872096
3D80DA451DF820620028D040 /* RCTWebSocketObserverProtocol.h in Headers */,
20882097
3D80DA481DF820620028D040 /* RCTJSCExecutor.h in Headers */,
20892098
3D80DA491DF820620028D040 /* JSCSamplingProfiler.h in Headers */,
2099+
3D0976C11E97399A00B9C6DD /* RCTBridge+JavaScriptCore.h in Headers */,
20902100
3D80DA4A1DF820620028D040 /* RCTAccessibilityManager.h in Headers */,
20912101
3D80DA4B1DF820620028D040 /* RCTAlertManager.h in Headers */,
20922102
3D80DA4C1DF820620028D040 /* RCTAppState.h in Headers */,

0 commit comments

Comments
 (0)