Connection management
Reviewed By: javache Differential Revision: D5171773 fbshipit-source-id: 6421739736f732e021e85474253ab0ddb3804b0a
This commit is contained in:
parent
a9e8b7bca5
commit
ba2e486b33
|
@ -0,0 +1,15 @@
|
||||||
|
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <JavaScriptCore/JSBase.h>
|
||||||
|
#import <React/RCTDefines.h>
|
||||||
|
|
||||||
|
#if RCT_DEV
|
||||||
|
|
||||||
|
@interface RCTInspectorDevServerHelper : NSObject
|
||||||
|
|
||||||
|
+ (void)connectForContext:(JSGlobalContextRef)context
|
||||||
|
withBundleURL:(NSURL *)bundleURL;
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,74 @@
|
||||||
|
#import "RCTInspectorDevServerHelper.h"
|
||||||
|
|
||||||
|
#if RCT_DEV
|
||||||
|
|
||||||
|
#import <jschelpers/JSCWrapper.h>
|
||||||
|
|
||||||
|
#import "RCTDefines.h"
|
||||||
|
#import "RCTInspectorPackagerConnection.h"
|
||||||
|
|
||||||
|
using namespace facebook::react;
|
||||||
|
|
||||||
|
static NSString *getDebugServerHost(NSURL *bundleURL)
|
||||||
|
{
|
||||||
|
NSString *host = [bundleURL host];
|
||||||
|
if (!host) {
|
||||||
|
host = @"localhost";
|
||||||
|
}
|
||||||
|
|
||||||
|
NSNumber *port = [bundleURL port];
|
||||||
|
if (!port) {
|
||||||
|
port = @8081; // Packager default port
|
||||||
|
}
|
||||||
|
|
||||||
|
// this is consistent with the Android implementation, where http:// is the
|
||||||
|
// hardcoded implicit scheme for the debug server. Note, packagerURL
|
||||||
|
// technically looks like it could handle schemes/protocols other than HTTP,
|
||||||
|
// so rather than force HTTP, leave it be for now, in case someone is relying
|
||||||
|
// on that ability when developing against iOS.
|
||||||
|
return [NSString stringWithFormat:@"%@:%@", host, port];
|
||||||
|
}
|
||||||
|
|
||||||
|
static NSURL *getInspectorDeviceUrl(NSURL *bundleURL)
|
||||||
|
{
|
||||||
|
// TODO: t19163919: figure out if there's a good way to get a friendly device
|
||||||
|
// name for the end user
|
||||||
|
return [NSURL URLWithString:[NSString stringWithFormat:@"http://%@/inspector/device?name=%@",
|
||||||
|
getDebugServerHost(bundleURL),
|
||||||
|
@""]];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@implementation RCTInspectorDevServerHelper
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(- (instancetype)init)
|
||||||
|
|
||||||
|
+ (void)connectForContext:(JSGlobalContextRef)context
|
||||||
|
withBundleURL:(NSURL *)bundleURL
|
||||||
|
{
|
||||||
|
if (!isCustomJSCPtr(context)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSURL *inspectorURL = getInspectorDeviceUrl(bundleURL);
|
||||||
|
|
||||||
|
// Note, using a static dictionary isn't really the greatest design, but
|
||||||
|
// the packager connection does the same thing, so it's at least consistent.
|
||||||
|
// This is a static map that holds different inspector clients per the inspectorURL
|
||||||
|
static NSMutableDictionary<NSString *, RCTInspectorPackagerConnection *> *socketConnections = nil;
|
||||||
|
if (socketConnections == nil) {
|
||||||
|
socketConnections = [NSMutableDictionary new];
|
||||||
|
}
|
||||||
|
|
||||||
|
NSString *key = [inspectorURL absoluteString];
|
||||||
|
RCTInspectorPackagerConnection *connection = socketConnections[key];
|
||||||
|
if (!connection) {
|
||||||
|
connection = [[RCTInspectorPackagerConnection alloc] initWithURL:inspectorURL];
|
||||||
|
socketConnections[key] = connection;
|
||||||
|
[connection connect];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,26 @@
|
||||||
|
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <React/RCTDefines.h>
|
||||||
|
|
||||||
|
#if RCT_DEV
|
||||||
|
|
||||||
|
@class RCTInspectorRemoteConnection;
|
||||||
|
|
||||||
|
@interface RCTInspectorLocalConnection : NSObject
|
||||||
|
- (void)sendMessage:(NSString *)message;
|
||||||
|
- (void)disconnect;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface RCTInspectorPage : NSObject
|
||||||
|
@property (nonatomic, readonly) NSInteger id;
|
||||||
|
@property (nonatomic, readonly) NSString *title;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface RCTInspector : NSObject
|
||||||
|
+ (NSArray<RCTInspectorPage *> *)pages;
|
||||||
|
+ (RCTInspectorLocalConnection *)connectPage:(NSInteger)pageId
|
||||||
|
forRemoteConnection:(RCTInspectorRemoteConnection *)remote;
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,131 @@
|
||||||
|
|
||||||
|
#import "RCTInspector.h"
|
||||||
|
|
||||||
|
#if RCT_DEV
|
||||||
|
|
||||||
|
#include <jschelpers/InspectorInterfaces.h>
|
||||||
|
#include <jschelpers/JavaScriptCore.h>
|
||||||
|
|
||||||
|
#import "RCTDefines.h"
|
||||||
|
#import "RCTInspectorPackagerConnection.h"
|
||||||
|
#import "RCTLog.h"
|
||||||
|
#import "RCTSRWebSocket.h"
|
||||||
|
#import "RCTUtils.h"
|
||||||
|
|
||||||
|
using namespace facebook::react;
|
||||||
|
|
||||||
|
// This is a port of the Android impl, at
|
||||||
|
// react-native-github/ReactAndroid/src/main/java/com/facebook/react/bridge/Inspector.java
|
||||||
|
// react-native-github/ReactAndroid/src/main/jni/xreact/jni/JInspector.cpp
|
||||||
|
// please keep consistent :)
|
||||||
|
|
||||||
|
class RemoteConnection : public IRemoteConnection {
|
||||||
|
public:
|
||||||
|
RemoteConnection(RCTInspectorRemoteConnection *connection) :
|
||||||
|
_connection(connection) {}
|
||||||
|
|
||||||
|
virtual void onMessage(std::string message) override {
|
||||||
|
[_connection onMessage:@(message.c_str())];
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void onDisconnect() override {
|
||||||
|
[_connection onDisconnect];
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
const RCTInspectorRemoteConnection *_connection;
|
||||||
|
};
|
||||||
|
|
||||||
|
@interface RCTInspectorPage () {
|
||||||
|
NSInteger _id;
|
||||||
|
NSString *_title;
|
||||||
|
}
|
||||||
|
- (instancetype)initWithId:(NSInteger)id
|
||||||
|
title:(NSString *)title;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface RCTInspectorLocalConnection () {
|
||||||
|
std::unique_ptr<ILocalConnection> _connection;
|
||||||
|
}
|
||||||
|
- (instancetype)initWithConnection:(std::unique_ptr<ILocalConnection>)connection;
|
||||||
|
@end
|
||||||
|
|
||||||
|
// Only safe to call with Custom JSC. Custom JSC check must occur earlier
|
||||||
|
// in the stack
|
||||||
|
static IInspector *getInstance()
|
||||||
|
{
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
static IInspector *s_inspector;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
s_inspector = customJSCWrapper()->JSInspectorGetInstance();
|
||||||
|
});
|
||||||
|
|
||||||
|
return s_inspector;
|
||||||
|
}
|
||||||
|
|
||||||
|
@implementation RCTInspector
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(- (instancetype)init)
|
||||||
|
|
||||||
|
+ (NSArray<RCTInspectorPage *> *)pages
|
||||||
|
{
|
||||||
|
std::vector<InspectorPage> pages = getInstance()->getPages();
|
||||||
|
NSMutableArray<RCTInspectorPage *> *array = [NSMutableArray arrayWithCapacity:pages.size()];
|
||||||
|
for (size_t i = 0; i < pages.size(); i++) {
|
||||||
|
RCTInspectorPage *pageWrapper = [[RCTInspectorPage alloc] initWithId:pages[i].id
|
||||||
|
title:@(pages[i].title.c_str())];
|
||||||
|
[array addObject:pageWrapper];
|
||||||
|
|
||||||
|
}
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (RCTInspectorLocalConnection *)connectPage:(NSInteger)pageId
|
||||||
|
forRemoteConnection:(RCTInspectorRemoteConnection *)remote
|
||||||
|
{
|
||||||
|
auto localConnection = getInstance()->connect(pageId, std::make_unique<RemoteConnection>(remote));
|
||||||
|
return [[RCTInspectorLocalConnection alloc] initWithConnection:std::move(localConnection)];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation RCTInspectorPage
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(- (instancetype)init)
|
||||||
|
|
||||||
|
- (instancetype)initWithId:(NSInteger)id
|
||||||
|
title:(NSString *)title
|
||||||
|
{
|
||||||
|
if (self = [super init]) {
|
||||||
|
_id = id;
|
||||||
|
_title = title;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation RCTInspectorLocalConnection
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(- (instancetype)init)
|
||||||
|
|
||||||
|
- (instancetype)initWithConnection:(std::unique_ptr<ILocalConnection>)connection
|
||||||
|
{
|
||||||
|
if (self = [super init]) {
|
||||||
|
_connection = std::move(connection);
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)sendMessage:(NSString *)message
|
||||||
|
{
|
||||||
|
_connection->sendMessage([message UTF8String]);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)disconnect
|
||||||
|
{
|
||||||
|
_connection->disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,21 @@
|
||||||
|
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <React/RCTDefines.h>
|
||||||
|
#import <React/RCTInspector.h>
|
||||||
|
|
||||||
|
#if RCT_DEV
|
||||||
|
|
||||||
|
@interface RCTInspectorPackagerConnection : NSObject
|
||||||
|
- (instancetype)initWithURL:(NSURL *)url;
|
||||||
|
- (void)connect;
|
||||||
|
- (void)closeQuietly;
|
||||||
|
- (void)sendOpenEvent:(NSString *)pageId;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface RCTInspectorRemoteConnection : NSObject
|
||||||
|
- (void)onMessage:(NSString *)message;
|
||||||
|
- (void)onDisconnect;
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,320 @@
|
||||||
|
#import "RCTInspectorPackagerConnection.h"
|
||||||
|
|
||||||
|
#if RCT_DEV
|
||||||
|
|
||||||
|
#import "RCTDefines.h"
|
||||||
|
#import "RCTInspector.h"
|
||||||
|
#import "RCTLog.h"
|
||||||
|
#import "RCTSRWebSocket.h"
|
||||||
|
#import "RCTUtils.h"
|
||||||
|
|
||||||
|
// This is a port of the Android impl, at
|
||||||
|
// ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorPackagerConnection.java
|
||||||
|
// please keep consistent :)
|
||||||
|
|
||||||
|
const int RECONNECT_DELAY_MS = 2000;
|
||||||
|
|
||||||
|
@interface RCTInspectorPackagerConnection () <RCTSRWebSocketDelegate> {
|
||||||
|
NSURL *_url;
|
||||||
|
NSMutableDictionary<NSString *, RCTInspectorLocalConnection *> *_inspectorConnections;
|
||||||
|
RCTSRWebSocket *_webSocket;
|
||||||
|
BOOL _closed;
|
||||||
|
BOOL _suppressConnectionErrors;
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface RCTInspectorRemoteConnection () {
|
||||||
|
__weak RCTInspectorPackagerConnection *_owningPackagerConnection;
|
||||||
|
NSString *_pageId;
|
||||||
|
}
|
||||||
|
- (instancetype)initWithPackagerConnection:(RCTInspectorPackagerConnection *)owningPackagerConnection
|
||||||
|
pageId:(NSString *)pageId;
|
||||||
|
@end
|
||||||
|
|
||||||
|
static NSDictionary<NSString *, id> *makePageIdPayload(NSString *pageId)
|
||||||
|
{
|
||||||
|
return @{ @"pageId": pageId };
|
||||||
|
}
|
||||||
|
|
||||||
|
@implementation RCTInspectorPackagerConnection
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(- (instancetype)init)
|
||||||
|
|
||||||
|
- (instancetype)initWithURL:(NSURL *)url
|
||||||
|
{
|
||||||
|
if (self = [super init]) {
|
||||||
|
_url = url;
|
||||||
|
_inspectorConnections = [NSMutableDictionary new];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)sendOpenEvent:(NSString *)pageId
|
||||||
|
{
|
||||||
|
NSDictionary<NSString *, id> *payload = makePageIdPayload(pageId);
|
||||||
|
[self sendEvent:@"open" payload:payload];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)handleProxyMessage:(NSDictionary<NSString *, id> *)message
|
||||||
|
{
|
||||||
|
NSString *event = message[@"event"];
|
||||||
|
NSDictionary *payload = message[@"payload"];
|
||||||
|
if ([@"getPages" isEqualToString:event]) {
|
||||||
|
[self sendEvent:event payload:[self pages]];
|
||||||
|
} else if ([@"wrappedEvent" isEqualToString:event]) {
|
||||||
|
[self handleWrappedEvent:payload];
|
||||||
|
} else if ([@"connect" isEqualToString:event]) {
|
||||||
|
[self handleConnect:payload];
|
||||||
|
} else if ([@"disconnect" isEqualToString:event]) {
|
||||||
|
[self handleDisconnect:payload];
|
||||||
|
} else {
|
||||||
|
RCTLogError(@"Unknown event: %@", event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)closeAllConnections
|
||||||
|
{
|
||||||
|
for (NSString *pageId in _inspectorConnections){
|
||||||
|
[[_inspectorConnections objectForKey:pageId] disconnect];
|
||||||
|
}
|
||||||
|
[_inspectorConnections removeAllObjects];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)handleConnect:(NSDictionary *)payload
|
||||||
|
{
|
||||||
|
NSString *pageId = payload[@"pageId"];
|
||||||
|
if (_inspectorConnections[pageId]) {
|
||||||
|
[_inspectorConnections removeObjectForKey:pageId];
|
||||||
|
RCTLogError(@"Already connected: %@", pageId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RCTInspectorRemoteConnection *remoteConnection =
|
||||||
|
[[RCTInspectorRemoteConnection alloc] initWithPackagerConnection:self
|
||||||
|
pageId:pageId];
|
||||||
|
|
||||||
|
RCTInspectorLocalConnection *inspectorConnection = [RCTInspector connectPage:[pageId integerValue]
|
||||||
|
forRemoteConnection:remoteConnection];
|
||||||
|
_inspectorConnections[pageId] = inspectorConnection;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)handleDisconnect:(NSDictionary *)payload
|
||||||
|
{
|
||||||
|
NSString *pageId = payload[@"pageId"];
|
||||||
|
RCTInspectorLocalConnection *inspectorConnection = _inspectorConnections[pageId];
|
||||||
|
if (inspectorConnection) {
|
||||||
|
[self removeConnectionForPage:pageId];
|
||||||
|
[inspectorConnection disconnect];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)removeConnectionForPage:(NSString *)pageId
|
||||||
|
{
|
||||||
|
[_inspectorConnections removeObjectForKey:pageId];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)handleWrappedEvent:(NSDictionary *)payload
|
||||||
|
{
|
||||||
|
NSString *pageId = payload[@"pageId"];
|
||||||
|
NSString *wrappedEvent = payload[@"wrappedEvent"];
|
||||||
|
RCTInspectorLocalConnection *inspectorConnection = _inspectorConnections[pageId];
|
||||||
|
if (!inspectorConnection) {
|
||||||
|
RCTLogError(@"Not connected: %@", pageId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
[inspectorConnection sendMessage:wrappedEvent];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray *)pages
|
||||||
|
{
|
||||||
|
NSArray<RCTInspectorPage *> *pages = [RCTInspector pages];
|
||||||
|
NSMutableArray *array = [NSMutableArray arrayWithCapacity:pages.count];
|
||||||
|
for (RCTInspectorPage *page in pages) {
|
||||||
|
NSDictionary *jsonPage = @{
|
||||||
|
@"id": [@(page.id) stringValue],
|
||||||
|
@"title": page.title,
|
||||||
|
};
|
||||||
|
[array addObject:jsonPage];
|
||||||
|
}
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)sendWrappedEvent:(NSString *)pageId
|
||||||
|
message:(NSString *)message
|
||||||
|
{
|
||||||
|
NSDictionary *payload = @{
|
||||||
|
@"pageId": pageId,
|
||||||
|
@"wrappedEvent": message,
|
||||||
|
};
|
||||||
|
[self sendEvent:@"wrappedEvent" payload:payload];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)sendEvent:(NSString *)name payload:(id)payload
|
||||||
|
{
|
||||||
|
NSDictionary *jsonMessage = @{
|
||||||
|
@"event": name,
|
||||||
|
@"payload": payload,
|
||||||
|
};
|
||||||
|
[self sendToPackager:jsonMessage];
|
||||||
|
}
|
||||||
|
|
||||||
|
// analogous to InspectorPackagerConnection.Connection.onFailure(...)
|
||||||
|
- (void)webSocket:(RCTSRWebSocket *)webSocket didFailWithError:(NSError *)error
|
||||||
|
{
|
||||||
|
if (_webSocket) {
|
||||||
|
[self abort:@"Websocket exception"
|
||||||
|
withCause:error];
|
||||||
|
}
|
||||||
|
if (!_closed) {
|
||||||
|
[self reconnect];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// analogous to InspectorPackagerConnection.Connection.onMessage(...)
|
||||||
|
- (void)webSocket:(RCTSRWebSocket *)webSocket didReceiveMessage:(id)opaqueMessage
|
||||||
|
{
|
||||||
|
// warn but don't die on unrecognized messages
|
||||||
|
if (![opaqueMessage isKindOfClass:[NSString class]]) {
|
||||||
|
RCTLogWarn(@"Unrecognized inspector message, object is of type: %@", [opaqueMessage class]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSString *messageText = opaqueMessage;
|
||||||
|
NSError *error = nil;
|
||||||
|
id parsedJSON = RCTJSONParse(messageText, &error);
|
||||||
|
if (error) {
|
||||||
|
RCTLogWarn(@"Unrecognized inspector message, string was not valid JSON: %@",
|
||||||
|
messageText);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
[self handleProxyMessage:parsedJSON];
|
||||||
|
}
|
||||||
|
|
||||||
|
// analogous to InspectorPackagerConnection.Connection.onClosed(...)
|
||||||
|
- (void)webSocket:(RCTSRWebSocket *)webSocket didCloseWithCode:(NSInteger)code
|
||||||
|
reason:(NSString *)reason
|
||||||
|
wasClean:(BOOL)wasClean
|
||||||
|
{
|
||||||
|
_webSocket = nil;
|
||||||
|
[self closeAllConnections];
|
||||||
|
if (!_closed) {
|
||||||
|
[self reconnect];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)connect
|
||||||
|
{
|
||||||
|
if (_closed) {
|
||||||
|
RCTLogError(@"Illegal state: Can't connect after having previously been closed.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The corresopnding android code has a lot of custom config options for
|
||||||
|
// timeouts, but it appears the iOS RCTSRWebSocket API doesn't have the same
|
||||||
|
// implemented options.
|
||||||
|
_webSocket = [[RCTSRWebSocket alloc] initWithURL:_url];
|
||||||
|
_webSocket.delegate = self;
|
||||||
|
[_webSocket open];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)reconnect
|
||||||
|
{
|
||||||
|
if (_closed) {
|
||||||
|
RCTLogError(@"Illegal state: Can't reconnect after having previously been closed.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_suppressConnectionErrors) {
|
||||||
|
RCTLogWarn(@"Couldn't connect to packager, will silently retry");
|
||||||
|
_suppressConnectionErrors = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
__weak RCTInspectorPackagerConnection *weakSelf = self;
|
||||||
|
dispatch_after(
|
||||||
|
dispatch_time(DISPATCH_TIME_NOW, RECONNECT_DELAY_MS *NSEC_PER_MSEC),
|
||||||
|
dispatch_get_main_queue(), ^{
|
||||||
|
RCTInspectorPackagerConnection *strongSelf = weakSelf;
|
||||||
|
if (strongSelf && !strongSelf->_closed) {
|
||||||
|
[strongSelf connect];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)closeQuietly
|
||||||
|
{
|
||||||
|
_closed = true;
|
||||||
|
[self disposeWebSocket];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)sendToPackager:(NSDictionary *)messageObject
|
||||||
|
{
|
||||||
|
__weak RCTInspectorPackagerConnection *weakSelf = self;
|
||||||
|
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||||
|
RCTInspectorPackagerConnection *strongSelf = weakSelf;
|
||||||
|
if (strongSelf && !strongSelf->_closed) {
|
||||||
|
NSError *error;
|
||||||
|
NSString *messageText = RCTJSONStringify(messageObject, &error);
|
||||||
|
if (error) {
|
||||||
|
RCTLogWarn(@"Couldn't send event to packager: %@", error);
|
||||||
|
} else {
|
||||||
|
[strongSelf->_webSocket send:messageText];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)abort:(NSString *)message
|
||||||
|
withCause:(NSError *)cause
|
||||||
|
{
|
||||||
|
RCTLogWarn(@"Error occurred, shutting down websocket connection: %@ %@", message, cause);
|
||||||
|
|
||||||
|
[self closeAllConnections];
|
||||||
|
[self disposeWebSocket];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)disposeWebSocket
|
||||||
|
{
|
||||||
|
if (_webSocket) {
|
||||||
|
[_webSocket closeWithCode:1000
|
||||||
|
reason:@"End of session"];
|
||||||
|
_webSocket.delegate = nil;
|
||||||
|
_webSocket = nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation RCTInspectorRemoteConnection
|
||||||
|
|
||||||
|
RCT_NOT_IMPLEMENTED(- (instancetype)init)
|
||||||
|
|
||||||
|
- (instancetype)initWithPackagerConnection:(RCTInspectorPackagerConnection *)owningPackagerConnection
|
||||||
|
pageId:(NSString *)pageId
|
||||||
|
{
|
||||||
|
if (self = [super init]) {
|
||||||
|
_owningPackagerConnection = owningPackagerConnection;
|
||||||
|
_pageId = pageId;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)onMessage:(NSString *)message
|
||||||
|
{
|
||||||
|
[_owningPackagerConnection sendWrappedEvent:_pageId
|
||||||
|
message:message];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)onDisconnect
|
||||||
|
{
|
||||||
|
RCTInspectorPackagerConnection *owningPackagerConnectionStrong = _owningPackagerConnection;
|
||||||
|
if (owningPackagerConnectionStrong) {
|
||||||
|
[owningPackagerConnectionStrong removeConnectionForPage:_pageId];
|
||||||
|
[owningPackagerConnectionStrong sendEvent:@"disconnect"
|
||||||
|
payload:makePageIdPayload(_pageId)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif
|
|
@ -19,6 +19,7 @@
|
||||||
#import "RCTBridge+Private.h"
|
#import "RCTBridge+Private.h"
|
||||||
#import "RCTBridgeModule.h"
|
#import "RCTBridgeModule.h"
|
||||||
#import "RCTEventDispatcher.h"
|
#import "RCTEventDispatcher.h"
|
||||||
|
#import "RCTInspectorDevServerHelper.h"
|
||||||
#import "RCTJSCSamplingProfiler.h"
|
#import "RCTJSCSamplingProfiler.h"
|
||||||
#import "RCTLog.h"
|
#import "RCTLog.h"
|
||||||
#import "RCTProfile.h"
|
#import "RCTProfile.h"
|
||||||
|
@ -160,6 +161,20 @@ RCT_EXPORT_MODULE()
|
||||||
RCTAssert(_bridge == nil, @"RCTDevSettings module should not be reused");
|
RCTAssert(_bridge == nil, @"RCTDevSettings module should not be reused");
|
||||||
_bridge = bridge;
|
_bridge = bridge;
|
||||||
[self _configurePackagerConnection];
|
[self _configurePackagerConnection];
|
||||||
|
|
||||||
|
#if RCT_DEV
|
||||||
|
// we need this dispatch back to the main thread because even though this
|
||||||
|
// is executed on the main thread, at this point the bridge is not yet
|
||||||
|
// finished with its initialisation. But it does finish by the time it
|
||||||
|
// relinquishes control of the main thread, so only queue on the JS thread
|
||||||
|
// after the current main thread operation is done.
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
[bridge dispatchBlock:^{
|
||||||
|
[RCTInspectorDevServerHelper connectForContext:bridge.jsContextRef
|
||||||
|
withBundleURL:bridge.bundleURL];
|
||||||
|
} queue:RCTJSThread];
|
||||||
|
});
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
- (dispatch_queue_t)methodQueue
|
- (dispatch_queue_t)methodQueue
|
||||||
|
|
|
@ -1023,6 +1023,24 @@
|
||||||
59FBEFB51E46D91C0095D885 /* RCTScrollContentViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59FBEFAE1E46D91C0095D885 /* RCTScrollContentViewManager.h */; };
|
59FBEFB51E46D91C0095D885 /* RCTScrollContentViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59FBEFAE1E46D91C0095D885 /* RCTScrollContentViewManager.h */; };
|
||||||
59FBEFB61E46D91C0095D885 /* RCTScrollContentViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59FBEFAF1E46D91C0095D885 /* RCTScrollContentViewManager.m */; };
|
59FBEFB61E46D91C0095D885 /* RCTScrollContentViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59FBEFAF1E46D91C0095D885 /* RCTScrollContentViewManager.m */; };
|
||||||
59FBEFB71E46D91C0095D885 /* RCTScrollContentViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59FBEFAF1E46D91C0095D885 /* RCTScrollContentViewManager.m */; };
|
59FBEFB71E46D91C0095D885 /* RCTScrollContentViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 59FBEFAF1E46D91C0095D885 /* RCTScrollContentViewManager.m */; };
|
||||||
|
652971251EE976BA003C8BD5 /* InspectorInterfaces.h in Headers */ = {isa = PBXBuildFile; fileRef = 652971241EE976BA003C8BD5 /* InspectorInterfaces.h */; };
|
||||||
|
652971261EE976BD003C8BD5 /* InspectorInterfaces.h in Headers */ = {isa = PBXBuildFile; fileRef = 652971241EE976BA003C8BD5 /* InspectorInterfaces.h */; };
|
||||||
|
652971271EE976EE003C8BD5 /* InspectorInterfaces.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 652971241EE976BA003C8BD5 /* InspectorInterfaces.h */; };
|
||||||
|
652971281EE97712003C8BD5 /* InspectorInterfaces.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 652971241EE976BA003C8BD5 /* InspectorInterfaces.h */; };
|
||||||
|
6529713A1EE97AA9003C8BD5 /* InspectorInterfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 652971391EE97AA9003C8BD5 /* InspectorInterfaces.cpp */; };
|
||||||
|
6529713B1EE97B2D003C8BD5 /* InspectorInterfaces.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 652971391EE97AA9003C8BD5 /* InspectorInterfaces.cpp */; };
|
||||||
|
657734841EE834C900A0E9EA /* RCTInspectorDevServerHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 657734821EE834C900A0E9EA /* RCTInspectorDevServerHelper.h */; };
|
||||||
|
657734851EE834C900A0E9EA /* RCTInspectorDevServerHelper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 657734831EE834C900A0E9EA /* RCTInspectorDevServerHelper.mm */; };
|
||||||
|
657734861EE834D900A0E9EA /* RCTInspectorDevServerHelper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 657734831EE834C900A0E9EA /* RCTInspectorDevServerHelper.mm */; };
|
||||||
|
657734871EE834E000A0E9EA /* RCTInspectorDevServerHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 657734821EE834C900A0E9EA /* RCTInspectorDevServerHelper.h */; };
|
||||||
|
6577348E1EE8354A00A0E9EA /* RCTInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = 6577348A1EE8354A00A0E9EA /* RCTInspector.h */; };
|
||||||
|
6577348F1EE8354A00A0E9EA /* RCTInspector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6577348B1EE8354A00A0E9EA /* RCTInspector.mm */; };
|
||||||
|
657734901EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 6577348C1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h */; };
|
||||||
|
657734911EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 6577348D1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m */; };
|
||||||
|
657734921EE8356100A0E9EA /* RCTInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = 6577348A1EE8354A00A0E9EA /* RCTInspector.h */; };
|
||||||
|
657734931EE8356100A0E9EA /* RCTInspector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6577348B1EE8354A00A0E9EA /* RCTInspector.mm */; };
|
||||||
|
657734941EE8356100A0E9EA /* RCTInspectorPackagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 6577348C1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h */; };
|
||||||
|
657734951EE8356100A0E9EA /* RCTInspectorPackagerConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 6577348D1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m */; };
|
||||||
68EFE4EE1CF6EB3900A1DE13 /* RCTBundleURLProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */; };
|
68EFE4EE1CF6EB3900A1DE13 /* RCTBundleURLProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */; };
|
||||||
830A229E1A66C68A008503DA /* RCTRootView.m in Sources */ = {isa = PBXBuildFile; fileRef = 830A229D1A66C68A008503DA /* RCTRootView.m */; };
|
830A229E1A66C68A008503DA /* RCTRootView.m in Sources */ = {isa = PBXBuildFile; fileRef = 830A229D1A66C68A008503DA /* RCTRootView.m */; };
|
||||||
83392EB31B6634E10013B15F /* RCTModalHostViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 83392EB21B6634E10013B15F /* RCTModalHostViewController.m */; };
|
83392EB31B6634E10013B15F /* RCTModalHostViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 83392EB21B6634E10013B15F /* RCTModalHostViewController.m */; };
|
||||||
|
@ -1331,6 +1349,7 @@
|
||||||
dstPath = include/jschelpers;
|
dstPath = include/jschelpers;
|
||||||
dstSubfolderSpec = 16;
|
dstSubfolderSpec = 16;
|
||||||
files = (
|
files = (
|
||||||
|
652971281EE97712003C8BD5 /* InspectorInterfaces.h in Copy Headers */,
|
||||||
3DA982601E5B1089004F2374 /* JSCHelpers.h in Copy Headers */,
|
3DA982601E5B1089004F2374 /* JSCHelpers.h in Copy Headers */,
|
||||||
3DA982611E5B1089004F2374 /* noncopyable.h in Copy Headers */,
|
3DA982611E5B1089004F2374 /* noncopyable.h in Copy Headers */,
|
||||||
3DA982621E5B1089004F2374 /* Unicode.h in Copy Headers */,
|
3DA982621E5B1089004F2374 /* Unicode.h in Copy Headers */,
|
||||||
|
@ -1546,6 +1565,7 @@
|
||||||
dstPath = include/jschelpers;
|
dstPath = include/jschelpers;
|
||||||
dstSubfolderSpec = 16;
|
dstSubfolderSpec = 16;
|
||||||
files = (
|
files = (
|
||||||
|
652971271EE976EE003C8BD5 /* InspectorInterfaces.h in Copy Headers */,
|
||||||
3DA9825A1E5B1079004F2374 /* JavaScriptCore.h in Copy Headers */,
|
3DA9825A1E5B1079004F2374 /* JavaScriptCore.h in Copy Headers */,
|
||||||
3DA9825B1E5B1079004F2374 /* JSCHelpers.h in Copy Headers */,
|
3DA9825B1E5B1079004F2374 /* JSCHelpers.h in Copy Headers */,
|
||||||
3DA9825C1E5B1079004F2374 /* JSCWrapper.h in Copy Headers */,
|
3DA9825C1E5B1079004F2374 /* JSCWrapper.h in Copy Headers */,
|
||||||
|
@ -1908,6 +1928,14 @@
|
||||||
59FBEFAD1E46D91C0095D885 /* RCTScrollContentShadowView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTScrollContentShadowView.m; sourceTree = "<group>"; };
|
59FBEFAD1E46D91C0095D885 /* RCTScrollContentShadowView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTScrollContentShadowView.m; sourceTree = "<group>"; };
|
||||||
59FBEFAE1E46D91C0095D885 /* RCTScrollContentViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTScrollContentViewManager.h; sourceTree = "<group>"; };
|
59FBEFAE1E46D91C0095D885 /* RCTScrollContentViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTScrollContentViewManager.h; sourceTree = "<group>"; };
|
||||||
59FBEFAF1E46D91C0095D885 /* RCTScrollContentViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTScrollContentViewManager.m; sourceTree = "<group>"; };
|
59FBEFAF1E46D91C0095D885 /* RCTScrollContentViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTScrollContentViewManager.m; sourceTree = "<group>"; };
|
||||||
|
652971241EE976BA003C8BD5 /* InspectorInterfaces.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorInterfaces.h; sourceTree = "<group>"; };
|
||||||
|
652971391EE97AA9003C8BD5 /* InspectorInterfaces.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorInterfaces.cpp; sourceTree = "<group>"; };
|
||||||
|
657734821EE834C900A0E9EA /* RCTInspectorDevServerHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTInspectorDevServerHelper.h; sourceTree = "<group>"; };
|
||||||
|
657734831EE834C900A0E9EA /* RCTInspectorDevServerHelper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RCTInspectorDevServerHelper.mm; sourceTree = "<group>"; };
|
||||||
|
6577348A1EE8354A00A0E9EA /* RCTInspector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTInspector.h; path = Inspector/RCTInspector.h; sourceTree = "<group>"; };
|
||||||
|
6577348B1EE8354A00A0E9EA /* RCTInspector.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = RCTInspector.mm; path = Inspector/RCTInspector.mm; sourceTree = "<group>"; };
|
||||||
|
6577348C1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTInspectorPackagerConnection.h; path = Inspector/RCTInspectorPackagerConnection.h; sourceTree = "<group>"; };
|
||||||
|
6577348D1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RCTInspectorPackagerConnection.m; path = Inspector/RCTInspectorPackagerConnection.m; sourceTree = "<group>"; };
|
||||||
68EFE4EC1CF6EB3000A1DE13 /* RCTBundleURLProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTBundleURLProvider.h; sourceTree = "<group>"; };
|
68EFE4EC1CF6EB3000A1DE13 /* RCTBundleURLProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTBundleURLProvider.h; sourceTree = "<group>"; };
|
||||||
68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTBundleURLProvider.m; sourceTree = "<group>"; };
|
68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTBundleURLProvider.m; sourceTree = "<group>"; };
|
||||||
6A15FB0C1BDF663500531DFB /* RCTRootViewInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRootViewInternal.h; sourceTree = "<group>"; };
|
6A15FB0C1BDF663500531DFB /* RCTRootViewInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTRootViewInternal.h; sourceTree = "<group>"; };
|
||||||
|
@ -2357,6 +2385,8 @@
|
||||||
3D4A621D1DDD3985001F41B4 /* jschelpers */ = {
|
3D4A621D1DDD3985001F41B4 /* jschelpers */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
652971391EE97AA9003C8BD5 /* InspectorInterfaces.cpp */,
|
||||||
|
652971241EE976BA003C8BD5 /* InspectorInterfaces.h */,
|
||||||
19DED2281E77E29200F089BB /* systemJSCWrapper.cpp */,
|
19DED2281E77E29200F089BB /* systemJSCWrapper.cpp */,
|
||||||
3D7A27DC1DE32541002E3F95 /* JavaScriptCore.h */,
|
3D7A27DC1DE32541002E3F95 /* JavaScriptCore.h */,
|
||||||
3D92B1071E0369AD0018521A /* JSCHelpers.cpp */,
|
3D92B1071E0369AD0018521A /* JSCHelpers.cpp */,
|
||||||
|
@ -2375,6 +2405,8 @@
|
||||||
3D7BFD0A1EA8E2D1008DFB7A /* DevSupport */ = {
|
3D7BFD0A1EA8E2D1008DFB7A /* DevSupport */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
657734821EE834C900A0E9EA /* RCTInspectorDevServerHelper.h */,
|
||||||
|
657734831EE834C900A0E9EA /* RCTInspectorDevServerHelper.mm */,
|
||||||
13A0C2851B74F71200B29F6F /* RCTDevLoadingView.h */,
|
13A0C2851B74F71200B29F6F /* RCTDevLoadingView.h */,
|
||||||
13A0C2861B74F71200B29F6F /* RCTDevLoadingView.m */,
|
13A0C2861B74F71200B29F6F /* RCTDevLoadingView.m */,
|
||||||
13A0C2871B74F71200B29F6F /* RCTDevMenu.h */,
|
13A0C2871B74F71200B29F6F /* RCTDevMenu.h */,
|
||||||
|
@ -2411,6 +2443,17 @@
|
||||||
path = "../third-party";
|
path = "../third-party";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
657734881EE8352500A0E9EA /* Inspector */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
6577348A1EE8354A00A0E9EA /* RCTInspector.h */,
|
||||||
|
6577348B1EE8354A00A0E9EA /* RCTInspector.mm */,
|
||||||
|
6577348C1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h */,
|
||||||
|
6577348D1EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m */,
|
||||||
|
);
|
||||||
|
name = Inspector;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
83CBB9F61A601CBA00E9B192 = {
|
83CBB9F61A601CBA00E9B192 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -2451,6 +2494,7 @@
|
||||||
13134C7D1E296B2A00B9F3CB /* CxxModule */,
|
13134C7D1E296B2A00B9F3CB /* CxxModule */,
|
||||||
1304439E1E3FEA8B00D93A67 /* CxxUtils */,
|
1304439E1E3FEA8B00D93A67 /* CxxUtils */,
|
||||||
3D7BFD0A1EA8E2D1008DFB7A /* DevSupport */,
|
3D7BFD0A1EA8E2D1008DFB7A /* DevSupport */,
|
||||||
|
657734881EE8352500A0E9EA /* Inspector */,
|
||||||
13B07FE01A69315300A75B9A /* Modules */,
|
13B07FE01A69315300A75B9A /* Modules */,
|
||||||
1450FF7F1BCFF28A00208362 /* Profiler */,
|
1450FF7F1BCFF28A00208362 /* Profiler */,
|
||||||
13B07FF31A6947C200A75B9A /* Views */,
|
13B07FF31A6947C200A75B9A /* Views */,
|
||||||
|
@ -2687,7 +2731,9 @@
|
||||||
3D302F5A1DF828F800D6DDAE /* RCTDevLoadingView.h in Headers */,
|
3D302F5A1DF828F800D6DDAE /* RCTDevLoadingView.h in Headers */,
|
||||||
3D0B842A1EC0B49400B2BD8E /* RCTTVRemoteHandler.h in Headers */,
|
3D0B842A1EC0B49400B2BD8E /* RCTTVRemoteHandler.h in Headers */,
|
||||||
3D302F5B1DF828F800D6DDAE /* RCTDevMenu.h in Headers */,
|
3D302F5B1DF828F800D6DDAE /* RCTDevMenu.h in Headers */,
|
||||||
|
657734921EE8356100A0E9EA /* RCTInspector.h in Headers */,
|
||||||
3D302F5C1DF828F800D6DDAE /* RCTEventEmitter.h in Headers */,
|
3D302F5C1DF828F800D6DDAE /* RCTEventEmitter.h in Headers */,
|
||||||
|
652971261EE976BD003C8BD5 /* InspectorInterfaces.h in Headers */,
|
||||||
3D302F5D1DF828F800D6DDAE /* RCTExceptionsManager.h in Headers */,
|
3D302F5D1DF828F800D6DDAE /* RCTExceptionsManager.h in Headers */,
|
||||||
3D302F5E1DF828F800D6DDAE /* RCTI18nManager.h in Headers */,
|
3D302F5E1DF828F800D6DDAE /* RCTI18nManager.h in Headers */,
|
||||||
3D302F5F1DF828F800D6DDAE /* RCTI18nUtil.h in Headers */,
|
3D302F5F1DF828F800D6DDAE /* RCTI18nUtil.h in Headers */,
|
||||||
|
@ -2705,6 +2751,7 @@
|
||||||
3D302F6B1DF828F800D6DDAE /* RCTActivityIndicatorViewManager.h in Headers */,
|
3D302F6B1DF828F800D6DDAE /* RCTActivityIndicatorViewManager.h in Headers */,
|
||||||
3D7BFD301EA8E3FA008DFB7A /* RCTSRWebSocket.h in Headers */,
|
3D7BFD301EA8E3FA008DFB7A /* RCTSRWebSocket.h in Headers */,
|
||||||
3D302F6C1DF828F800D6DDAE /* RCTAnimationType.h in Headers */,
|
3D302F6C1DF828F800D6DDAE /* RCTAnimationType.h in Headers */,
|
||||||
|
657734871EE834E000A0E9EA /* RCTInspectorDevServerHelper.h in Headers */,
|
||||||
3D302F6D1DF828F800D6DDAE /* RCTAutoInsetsProtocol.h in Headers */,
|
3D302F6D1DF828F800D6DDAE /* RCTAutoInsetsProtocol.h in Headers */,
|
||||||
3D302F6E1DF828F800D6DDAE /* RCTBorderDrawing.h in Headers */,
|
3D302F6E1DF828F800D6DDAE /* RCTBorderDrawing.h in Headers */,
|
||||||
3D302F6F1DF828F800D6DDAE /* RCTBorderStyle.h in Headers */,
|
3D302F6F1DF828F800D6DDAE /* RCTBorderStyle.h in Headers */,
|
||||||
|
@ -2724,6 +2771,7 @@
|
||||||
135A9C061E7B0F7800587AEB /* RCTJSCHelpers.h in Headers */,
|
135A9C061E7B0F7800587AEB /* RCTJSCHelpers.h in Headers */,
|
||||||
3D302F841DF828F800D6DDAE /* RCTPointerEvents.h in Headers */,
|
3D302F841DF828F800D6DDAE /* RCTPointerEvents.h in Headers */,
|
||||||
59EB6DBC1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h in Headers */,
|
59EB6DBC1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h in Headers */,
|
||||||
|
657734941EE8356100A0E9EA /* RCTInspectorPackagerConnection.h in Headers */,
|
||||||
3D302F851DF828F800D6DDAE /* RCTProgressViewManager.h in Headers */,
|
3D302F851DF828F800D6DDAE /* RCTProgressViewManager.h in Headers */,
|
||||||
3D302F861DF828F800D6DDAE /* RCTRefreshControl.h in Headers */,
|
3D302F861DF828F800D6DDAE /* RCTRefreshControl.h in Headers */,
|
||||||
3D302F871DF828F800D6DDAE /* RCTRefreshControlManager.h in Headers */,
|
3D302F871DF828F800D6DDAE /* RCTRefreshControlManager.h in Headers */,
|
||||||
|
@ -2902,6 +2950,7 @@
|
||||||
3D80DA1C1DF820620028D040 /* RCTLinkingManager.h in Headers */,
|
3D80DA1C1DF820620028D040 /* RCTLinkingManager.h in Headers */,
|
||||||
3D80DA1D1DF820620028D040 /* RCTNetworking.h in Headers */,
|
3D80DA1D1DF820620028D040 /* RCTNetworking.h in Headers */,
|
||||||
3D80DA1E1DF820620028D040 /* RCTNetworkTask.h in Headers */,
|
3D80DA1E1DF820620028D040 /* RCTNetworkTask.h in Headers */,
|
||||||
|
657734841EE834C900A0E9EA /* RCTInspectorDevServerHelper.h in Headers */,
|
||||||
3D80DA1F1DF820620028D040 /* RCTPushNotificationManager.h in Headers */,
|
3D80DA1F1DF820620028D040 /* RCTPushNotificationManager.h in Headers */,
|
||||||
3D80DA201DF820620028D040 /* RCTAssert.h in Headers */,
|
3D80DA201DF820620028D040 /* RCTAssert.h in Headers */,
|
||||||
3D80DA211DF820620028D040 /* RCTBridge.h in Headers */,
|
3D80DA211DF820620028D040 /* RCTBridge.h in Headers */,
|
||||||
|
@ -3009,6 +3058,7 @@
|
||||||
3D80DA7C1DF820620028D040 /* RCTRefreshControlManager.h in Headers */,
|
3D80DA7C1DF820620028D040 /* RCTRefreshControlManager.h in Headers */,
|
||||||
3D80DA7D1DF820620028D040 /* RCTRootShadowView.h in Headers */,
|
3D80DA7D1DF820620028D040 /* RCTRootShadowView.h in Headers */,
|
||||||
3D80DA7E1DF820620028D040 /* RCTScrollableProtocol.h in Headers */,
|
3D80DA7E1DF820620028D040 /* RCTScrollableProtocol.h in Headers */,
|
||||||
|
657734901EE8354A00A0E9EA /* RCTInspectorPackagerConnection.h in Headers */,
|
||||||
3D7BFD1D1EA8E351008DFB7A /* RCTPackagerConnection.h in Headers */,
|
3D7BFD1D1EA8E351008DFB7A /* RCTPackagerConnection.h in Headers */,
|
||||||
3D80DA7F1DF820620028D040 /* RCTScrollView.h in Headers */,
|
3D80DA7F1DF820620028D040 /* RCTScrollView.h in Headers */,
|
||||||
3D80DA801DF820620028D040 /* RCTScrollViewManager.h in Headers */,
|
3D80DA801DF820620028D040 /* RCTScrollViewManager.h in Headers */,
|
||||||
|
@ -3024,12 +3074,14 @@
|
||||||
3D80DA8A1DF820620028D040 /* RCTTabBarItemManager.h in Headers */,
|
3D80DA8A1DF820620028D040 /* RCTTabBarItemManager.h in Headers */,
|
||||||
3D80DA8B1DF820620028D040 /* RCTTabBarManager.h in Headers */,
|
3D80DA8B1DF820620028D040 /* RCTTabBarManager.h in Headers */,
|
||||||
3D80DA8C1DF820620028D040 /* RCTTextDecorationLineType.h in Headers */,
|
3D80DA8C1DF820620028D040 /* RCTTextDecorationLineType.h in Headers */,
|
||||||
|
6577348E1EE8354A00A0E9EA /* RCTInspector.h in Headers */,
|
||||||
3D80DA8D1DF820620028D040 /* RCTView.h in Headers */,
|
3D80DA8D1DF820620028D040 /* RCTView.h in Headers */,
|
||||||
3D80DA8E1DF820620028D040 /* RCTViewControllerProtocol.h in Headers */,
|
3D80DA8E1DF820620028D040 /* RCTViewControllerProtocol.h in Headers */,
|
||||||
590D7BFD1EBD458B00D8A370 /* RCTShadowView+Layout.h in Headers */,
|
590D7BFD1EBD458B00D8A370 /* RCTShadowView+Layout.h in Headers */,
|
||||||
3D80DA8F1DF820620028D040 /* RCTViewManager.h in Headers */,
|
3D80DA8F1DF820620028D040 /* RCTViewManager.h in Headers */,
|
||||||
13134CA01E296B2A00B9F3CB /* RCTCxxUtils.h in Headers */,
|
13134CA01E296B2A00B9F3CB /* RCTCxxUtils.h in Headers */,
|
||||||
3D80DA901DF820620028D040 /* RCTWebView.h in Headers */,
|
3D80DA901DF820620028D040 /* RCTWebView.h in Headers */,
|
||||||
|
652971251EE976BA003C8BD5 /* InspectorInterfaces.h in Headers */,
|
||||||
3D80DA911DF820620028D040 /* RCTWebViewManager.h in Headers */,
|
3D80DA911DF820620028D040 /* RCTWebViewManager.h in Headers */,
|
||||||
3D80DA921DF820620028D040 /* RCTWrapperViewController.h in Headers */,
|
3D80DA921DF820620028D040 /* RCTWrapperViewController.h in Headers */,
|
||||||
3D80DA931DF820620028D040 /* UIView+Private.h in Headers */,
|
3D80DA931DF820620028D040 /* UIView+Private.h in Headers */,
|
||||||
|
@ -3473,6 +3525,7 @@
|
||||||
2D3B5ECF1D9B096F00451313 /* RCTFont.mm in Sources */,
|
2D3B5ECF1D9B096F00451313 /* RCTFont.mm in Sources */,
|
||||||
2D3B5ED51D9B098000451313 /* RCTModalHostViewController.m in Sources */,
|
2D3B5ED51D9B098000451313 /* RCTModalHostViewController.m in Sources */,
|
||||||
2D3B5EBC1D9B092600451313 /* RCTKeyboardObserver.m in Sources */,
|
2D3B5EBC1D9B092600451313 /* RCTKeyboardObserver.m in Sources */,
|
||||||
|
657734931EE8356100A0E9EA /* RCTInspector.mm in Sources */,
|
||||||
59EB6DBE1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.m in Sources */,
|
59EB6DBE1EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.m in Sources */,
|
||||||
2D3B5E971D9B089000451313 /* RCTBridge.m in Sources */,
|
2D3B5E971D9B089000451313 /* RCTBridge.m in Sources */,
|
||||||
2D3B5EA21D9B08BA00451313 /* RCTModuleMethod.m in Sources */,
|
2D3B5EA21D9B08BA00451313 /* RCTModuleMethod.m in Sources */,
|
||||||
|
@ -3541,10 +3594,12 @@
|
||||||
3DDEC1521DDCE0CA0020BBDF /* RCTJSCSamplingProfiler.m in Sources */,
|
3DDEC1521DDCE0CA0020BBDF /* RCTJSCSamplingProfiler.m in Sources */,
|
||||||
2D3B5EC31D9B094800451313 /* RCTProfileTrampoline-arm.S in Sources */,
|
2D3B5EC31D9B094800451313 /* RCTProfileTrampoline-arm.S in Sources */,
|
||||||
3D0B842B1EC0B49400B2BD8E /* RCTTVRemoteHandler.m in Sources */,
|
3D0B842B1EC0B49400B2BD8E /* RCTTVRemoteHandler.m in Sources */,
|
||||||
|
657734861EE834D900A0E9EA /* RCTInspectorDevServerHelper.mm in Sources */,
|
||||||
59FBEFB31E46D91C0095D885 /* RCTScrollContentShadowView.m in Sources */,
|
59FBEFB31E46D91C0095D885 /* RCTScrollContentShadowView.m in Sources */,
|
||||||
2D3B5ED91D9B098E00451313 /* RCTNavItem.m in Sources */,
|
2D3B5ED91D9B098E00451313 /* RCTNavItem.m in Sources */,
|
||||||
2D74EAFA1DAE9590003B751B /* RCTMultipartDataTask.m in Sources */,
|
2D74EAFA1DAE9590003B751B /* RCTMultipartDataTask.m in Sources */,
|
||||||
2D3B5EC51D9B094D00451313 /* RCTProfileTrampoline-i386.S in Sources */,
|
2D3B5EC51D9B094D00451313 /* RCTProfileTrampoline-i386.S in Sources */,
|
||||||
|
657734951EE8356100A0E9EA /* RCTInspectorPackagerConnection.m in Sources */,
|
||||||
2D3B5EC41D9B094B00451313 /* RCTProfileTrampoline-arm64.S in Sources */,
|
2D3B5EC41D9B094B00451313 /* RCTProfileTrampoline-arm64.S in Sources */,
|
||||||
3D7BFD281EA8E351008DFB7A /* RCTSamplingProfilerPackagerMethod.mm in Sources */,
|
3D7BFD281EA8E351008DFB7A /* RCTSamplingProfilerPackagerMethod.mm in Sources */,
|
||||||
2D3B5EBB1D9B092300451313 /* RCTI18nManager.m in Sources */,
|
2D3B5EBB1D9B092300451313 /* RCTI18nManager.m in Sources */,
|
||||||
|
@ -3556,6 +3611,7 @@
|
||||||
2D3B5E9A1D9B089D00451313 /* RCTEventDispatcher.m in Sources */,
|
2D3B5E9A1D9B089D00451313 /* RCTEventDispatcher.m in Sources */,
|
||||||
2D3B5ED61D9B098400451313 /* RCTModalHostViewManager.m in Sources */,
|
2D3B5ED61D9B098400451313 /* RCTModalHostViewManager.m in Sources */,
|
||||||
2D3B5EE51D9B09BE00451313 /* RCTShadowView.m in Sources */,
|
2D3B5EE51D9B09BE00451313 /* RCTShadowView.m in Sources */,
|
||||||
|
6529713B1EE97B2D003C8BD5 /* InspectorInterfaces.cpp in Sources */,
|
||||||
135A9C051E7B0F7500587AEB /* RCTJSCHelpers.mm in Sources */,
|
135A9C051E7B0F7500587AEB /* RCTJSCHelpers.mm in Sources */,
|
||||||
2D3B5EC71D9B095600451313 /* RCTActivityIndicatorView.m in Sources */,
|
2D3B5EC71D9B095600451313 /* RCTActivityIndicatorView.m in Sources */,
|
||||||
2D3B5EB21D9B090300451313 /* RCTAsyncLocalStorage.m in Sources */,
|
2D3B5EB21D9B090300451313 /* RCTAsyncLocalStorage.m in Sources */,
|
||||||
|
@ -3728,6 +3784,7 @@
|
||||||
13AF20451AE707F9005F5298 /* RCTSlider.m in Sources */,
|
13AF20451AE707F9005F5298 /* RCTSlider.m in Sources */,
|
||||||
130443A21E3FEAA900D93A67 /* RCTFollyConvert.mm in Sources */,
|
130443A21E3FEAA900D93A67 /* RCTFollyConvert.mm in Sources */,
|
||||||
58114A501AAE93D500E7D092 /* RCTAsyncLocalStorage.m in Sources */,
|
58114A501AAE93D500E7D092 /* RCTAsyncLocalStorage.m in Sources */,
|
||||||
|
657734851EE834C900A0E9EA /* RCTInspectorDevServerHelper.mm in Sources */,
|
||||||
130E3D891E6A082100ACE484 /* RCTDevSettings.mm in Sources */,
|
130E3D891E6A082100ACE484 /* RCTDevSettings.mm in Sources */,
|
||||||
13513F3C1B1F43F400FCE529 /* RCTProgressViewManager.m in Sources */,
|
13513F3C1B1F43F400FCE529 /* RCTProgressViewManager.m in Sources */,
|
||||||
14F7A0F01BDA714B003C6C10 /* RCTFPSGraph.m in Sources */,
|
14F7A0F01BDA714B003C6C10 /* RCTFPSGraph.m in Sources */,
|
||||||
|
@ -3755,6 +3812,7 @@
|
||||||
13B080261A694A8400A75B9A /* RCTWrapperViewController.m in Sources */,
|
13B080261A694A8400A75B9A /* RCTWrapperViewController.m in Sources */,
|
||||||
13B080051A6947C200A75B9A /* RCTScrollView.m in Sources */,
|
13B080051A6947C200A75B9A /* RCTScrollView.m in Sources */,
|
||||||
A2440AA31DF8D854006E7BFC /* RCTReloadCommand.m in Sources */,
|
A2440AA31DF8D854006E7BFC /* RCTReloadCommand.m in Sources */,
|
||||||
|
6577348F1EE8354A00A0E9EA /* RCTInspector.mm in Sources */,
|
||||||
E9B20B7B1B500126007A2DA7 /* RCTAccessibilityManager.m in Sources */,
|
E9B20B7B1B500126007A2DA7 /* RCTAccessibilityManager.m in Sources */,
|
||||||
13A0C2891B74F71200B29F6F /* RCTDevLoadingView.m in Sources */,
|
13A0C2891B74F71200B29F6F /* RCTDevLoadingView.m in Sources */,
|
||||||
13B07FF21A69327A00A75B9A /* RCTTiming.m in Sources */,
|
13B07FF21A69327A00A75B9A /* RCTTiming.m in Sources */,
|
||||||
|
@ -3796,6 +3854,7 @@
|
||||||
131B6AF51AF1093D00FFC3E0 /* RCTSegmentedControlManager.m in Sources */,
|
131B6AF51AF1093D00FFC3E0 /* RCTSegmentedControlManager.m in Sources */,
|
||||||
58114A171AAE854800E7D092 /* RCTPickerManager.m in Sources */,
|
58114A171AAE854800E7D092 /* RCTPickerManager.m in Sources */,
|
||||||
191E3EBE1C29D9AF00C180A6 /* RCTRefreshControlManager.m in Sources */,
|
191E3EBE1C29D9AF00C180A6 /* RCTRefreshControlManager.m in Sources */,
|
||||||
|
657734911EE8354A00A0E9EA /* RCTInspectorPackagerConnection.m in Sources */,
|
||||||
68EFE4EE1CF6EB3900A1DE13 /* RCTBundleURLProvider.m in Sources */,
|
68EFE4EE1CF6EB3900A1DE13 /* RCTBundleURLProvider.m in Sources */,
|
||||||
B95154321D1B34B200FE7B80 /* RCTActivityIndicatorView.m in Sources */,
|
B95154321D1B34B200FE7B80 /* RCTActivityIndicatorView.m in Sources */,
|
||||||
59FBEFB21E46D91C0095D885 /* RCTScrollContentShadowView.m in Sources */,
|
59FBEFB21E46D91C0095D885 /* RCTScrollContentShadowView.m in Sources */,
|
||||||
|
@ -3803,6 +3862,7 @@
|
||||||
137327E71AA5CF210034F82E /* RCTTabBar.m in Sources */,
|
137327E71AA5CF210034F82E /* RCTTabBar.m in Sources */,
|
||||||
13F17A851B8493E5007D4C75 /* RCTRedBox.m in Sources */,
|
13F17A851B8493E5007D4C75 /* RCTRedBox.m in Sources */,
|
||||||
135A9BFC1E7B0EAE00587AEB /* RCTJSCErrorHandling.mm in Sources */,
|
135A9BFC1E7B0EAE00587AEB /* RCTJSCErrorHandling.mm in Sources */,
|
||||||
|
6529713A1EE97AA9003C8BD5 /* InspectorInterfaces.cpp in Sources */,
|
||||||
83392EB31B6634E10013B15F /* RCTModalHostViewController.m in Sources */,
|
83392EB31B6634E10013B15F /* RCTModalHostViewController.m in Sources */,
|
||||||
13B0801C1A69489C00A75B9A /* RCTNavItem.m in Sources */,
|
13B0801C1A69489C00A75B9A /* RCTNavItem.m in Sources */,
|
||||||
83CBBA691A601EF300E9B192 /* RCTEventDispatcher.m in Sources */,
|
83CBBA691A601EF300E9B192 /* RCTEventDispatcher.m in Sources */,
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2016-present, Facebook, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the BSD-style license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||||||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "InspectorInterfaces.h"
|
||||||
|
|
||||||
|
namespace facebook {
|
||||||
|
namespace react {
|
||||||
|
|
||||||
|
// pure destructors in C++ are odd. You would think they don't want an
|
||||||
|
// implementation, but in fact the linker requires one. Define them to be
|
||||||
|
// empty so that people don't count on them for any particular behaviour.
|
||||||
|
IDestructible::~IDestructible() { }
|
||||||
|
ILocalConnection::~ILocalConnection() { }
|
||||||
|
IRemoteConnection::~IRemoteConnection() { }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -185,7 +185,8 @@ jsc_poison(JSSamplingProfilerEnabled JSPokeSamplingProfiler
|
||||||
JSStartSamplingProfilingOnMainJSCThread)
|
JSStartSamplingProfilingOnMainJSCThread)
|
||||||
|
|
||||||
#define JSC_JSInspectorGetInstance(...) __jsc_bool_wrapper(JSInspectorGetInstance, __VA_ARGS__)
|
#define JSC_JSInspectorGetInstance(...) __jsc_bool_wrapper(JSInspectorGetInstance, __VA_ARGS__)
|
||||||
jsc_poison(JSInspectorGetInstance)
|
// no need to poison JSInspectorGetInstance because it's not defined for System JSC / standard SDK header
|
||||||
|
// jsc_poison(JSInspectorGetInstance)
|
||||||
|
|
||||||
|
|
||||||
#define JSC_configureJSCForIOS(...) __jsc_bool_wrapper(configureJSCForIOS, __VA_ARGS__)
|
#define JSC_configureJSCForIOS(...) __jsc_bool_wrapper(configureJSCForIOS, __VA_ARGS__)
|
||||||
|
|
Loading…
Reference in New Issue