Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 25 additions & 38 deletions packages/react-native/Libraries/Network/RCTNetworking.mm
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
#import <React/RCTUtils.h>

#import <React/RCTHTTPRequestHandler.h>
#import <react/featureflags/ReactNativeFeatureFlags.h>

#import "RCTInspectorNetworkReporter.h"
#import "RCTNetworkPlugins.h"
Expand Down Expand Up @@ -452,9 +451,7 @@ - (BOOL)canHandleRequest:(NSURLRequest *)request
__weak RCTNetworkTask *weakTask = task;
return ^{
[weakTask cancel];
if (facebook::react::ReactNativeFeatureFlags::enableNetworkEventReporting()) {
[RCTInspectorNetworkReporter reportRequestFailed:devToolsRequestId cancelled:YES];
}
[RCTInspectorNetworkReporter reportRequestFailed:devToolsRequestId cancelled:YES];
if (cancellationBlock) {
cancellationBlock();
}
Expand Down Expand Up @@ -574,19 +571,17 @@ - (void)sendData:(NSData *)data
}
}

if (facebook::react::ReactNativeFeatureFlags::enableNetworkEventReporting()) {
id responseDataForPreview;
if ([responseType isEqualToString:@"blob"]) {
responseDataForPreview = data;
} else if ([responseData isKindOfClass:[NSString class]]) {
responseDataForPreview = responseData;
}
bool base64Encoded = [responseType isEqualToString:@"base64"] || [responseType isEqualToString:@"blob"];

[RCTInspectorNetworkReporter maybeStoreResponseBody:task.devToolsRequestId
data:responseDataForPreview
base64Encoded:base64Encoded];
id responseDataForPreview;
if ([responseType isEqualToString:@"blob"]) {
responseDataForPreview = data;
} else if ([responseData isKindOfClass:[NSString class]]) {
responseDataForPreview = responseData;
}
bool base64Encoded = [responseType isEqualToString:@"base64"] || [responseType isEqualToString:@"blob"];

[RCTInspectorNetworkReporter maybeStoreResponseBody:task.devToolsRequestId
data:responseDataForPreview
base64Encoded:base64Encoded];

[self sendEventWithName:@"didReceiveNetworkData" body:@[ task.requestID, responseData ]];
}
Expand Down Expand Up @@ -620,12 +615,10 @@ - (void)sendRequest:(NSURLRequest *)request
id responseURL = response.URL ? response.URL.absoluteString : [NSNull null];
NSArray<id> *responseJSON = @[ task.requestID, @(status), headers, responseURL ];

if (facebook::react::ReactNativeFeatureFlags::enableNetworkEventReporting()) {
[RCTInspectorNetworkReporter reportResponseStart:task.devToolsRequestId
response:response
statusCode:status
headers:headers];
}
[RCTInspectorNetworkReporter reportResponseStart:task.devToolsRequestId
response:response
statusCode:status
headers:headers];
[weakSelf sendEventWithName:@"didReceiveNetworkResponse" body:responseJSON];
};

Expand Down Expand Up @@ -660,10 +653,8 @@ - (void)sendRequest:(NSURLRequest *)request
@(total)
];

if (facebook::react::ReactNativeFeatureFlags::enableNetworkEventReporting()) {
[RCTInspectorNetworkReporter reportDataReceived:task.devToolsRequestId data:data];
[RCTInspectorNetworkReporter maybeStoreResponseBodyIncremental:task.devToolsRequestId data:responseString];
}
[RCTInspectorNetworkReporter reportDataReceived:task.devToolsRequestId data:data];
[RCTInspectorNetworkReporter maybeStoreResponseBodyIncremental:task.devToolsRequestId data:responseString];
[weakSelf sendEventWithName:@"didReceiveNetworkIncrementalData" body:responseJSON];
};
} else {
Expand Down Expand Up @@ -700,12 +691,10 @@ - (void)sendRequest:(NSURLRequest *)request
NSArray *responseJSON =
@[ task.requestID, RCTNullIfNil(error.localizedDescription), error.code == kCFURLErrorTimedOut ? @YES : @NO ];

if (facebook::react::ReactNativeFeatureFlags::enableNetworkEventReporting()) {
if (error != nullptr) {
[RCTInspectorNetworkReporter reportRequestFailed:task.devToolsRequestId cancelled:NO];
} else {
[RCTInspectorNetworkReporter reportResponseEnd:task.devToolsRequestId encodedDataLength:data.length];
}
if (error != nullptr) {
[RCTInspectorNetworkReporter reportRequestFailed:task.devToolsRequestId cancelled:NO];
} else {
[RCTInspectorNetworkReporter reportResponseEnd:task.devToolsRequestId encodedDataLength:data.length];
}
[strongSelf sendEventWithName:@"didCompleteNetworkResponse" body:responseJSON];
[strongSelf->_tasksByRequestID removeObjectForKey:task.requestID];
Expand All @@ -723,12 +712,10 @@ - (void)sendRequest:(NSURLRequest *)request
}
_tasksByRequestID[task.requestID] = task;
responseSender(@[ task.requestID ]);
if (facebook::react::ReactNativeFeatureFlags::enableNetworkEventReporting()) {
[RCTInspectorNetworkReporter reportRequestStart:task.devToolsRequestId
request:request
encodedDataLength:task.response.expectedContentLength];
[RCTInspectorNetworkReporter reportConnectionTiming:task.devToolsRequestId request:task.request];
}
[RCTInspectorNetworkReporter reportRequestStart:task.devToolsRequestId
request:request
encodedDataLength:task.response.expectedContentLength];
[RCTInspectorNetworkReporter reportConnectionTiming:task.devToolsRequestId request:task.request];
}

[task start];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<c9e8eeefc709e1246577d67155300906>>
* @generated SignedSource<<9affe13f4391aa0e445770498894a85b>>
*/

/**
Expand Down Expand Up @@ -264,12 +264,6 @@ public object ReactNativeFeatureFlags {
@JvmStatic
public fun enableNativeCSSParsing(): Boolean = accessor.enableNativeCSSParsing()

/**
* Enable network event reporting hooks in each native platform through `NetworkReporter` (Web Perf APIs + CDP). This flag should be combined with `fuseboxNetworkInspectionEnabled` to enable Network CDP debugging.
*/
@JvmStatic
public fun enableNetworkEventReporting(): Boolean = accessor.enableNetworkEventReporting()

/**
* Enables caching text layout artifacts for later reuse
*/
Expand Down Expand Up @@ -378,12 +372,6 @@ public object ReactNativeFeatureFlags {
@JvmStatic
public fun fuseboxFrameRecordingEnabled(): Boolean = accessor.fuseboxFrameRecordingEnabled()

/**
* Enable network inspection support in the React Native DevTools CDP backend. Requires `enableBridgelessArchitecture`. This flag is global and should not be changed across React Host lifetimes.
*/
@JvmStatic
public fun fuseboxNetworkInspectionEnabled(): Boolean = accessor.fuseboxNetworkInspectionEnabled()

/**
* Enable Page.captureScreenshot CDP method support in the React Native DevTools CDP backend. This flag is global and should not be changed across React Host lifetimes.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<5ae6b1a0bfa9d680aa61685dbacd69d2>>
* @generated SignedSource<<bf6ed9b11dc77a753fe6af823a33bed6>>
*/

/**
Expand Down Expand Up @@ -59,7 +59,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
private var enableModuleArgumentNSNullConversionIOSCache: Boolean? = null
private var enableMutationObserverByDefaultCache: Boolean? = null
private var enableNativeCSSParsingCache: Boolean? = null
private var enableNetworkEventReportingCache: Boolean? = null
private var enablePreparedTextLayoutCache: Boolean? = null
private var enablePropsUpdateReconciliationAndroidCache: Boolean? = null
private var enableRuntimeSchedulerQueueClearingOnErrorCache: Boolean? = null
Expand All @@ -78,7 +77,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
private var fuseboxAssertSingleHostStateCache: Boolean? = null
private var fuseboxEnabledReleaseCache: Boolean? = null
private var fuseboxFrameRecordingEnabledCache: Boolean? = null
private var fuseboxNetworkInspectionEnabledCache: Boolean? = null
private var fuseboxScreenshotCaptureEnabledCache: Boolean? = null
private var optimizedAnimatedPropUpdatesCache: Boolean? = null
private var overrideBySynchronousMountPropsAtMountingAndroidCache: Boolean? = null
Expand Down Expand Up @@ -458,15 +456,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
return cached
}

override fun enableNetworkEventReporting(): Boolean {
var cached = enableNetworkEventReportingCache
if (cached == null) {
cached = ReactNativeFeatureFlagsCxxInterop.enableNetworkEventReporting()
enableNetworkEventReportingCache = cached
}
return cached
}

override fun enablePreparedTextLayout(): Boolean {
var cached = enablePreparedTextLayoutCache
if (cached == null) {
Expand Down Expand Up @@ -629,15 +618,6 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
return cached
}

override fun fuseboxNetworkInspectionEnabled(): Boolean {
var cached = fuseboxNetworkInspectionEnabledCache
if (cached == null) {
cached = ReactNativeFeatureFlagsCxxInterop.fuseboxNetworkInspectionEnabled()
fuseboxNetworkInspectionEnabledCache = cached
}
return cached
}

override fun fuseboxScreenshotCaptureEnabled(): Boolean {
var cached = fuseboxScreenshotCaptureEnabledCache
if (cached == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<8b1c3206f7e63790e411f57c2dd64076>>
* @generated SignedSource<<4020237259428ba43c7356eed4cd0daa>>
*/

/**
Expand Down Expand Up @@ -106,8 +106,6 @@ public object ReactNativeFeatureFlagsCxxInterop {

@DoNotStrip @JvmStatic public external fun enableNativeCSSParsing(): Boolean

@DoNotStrip @JvmStatic public external fun enableNetworkEventReporting(): Boolean

@DoNotStrip @JvmStatic public external fun enablePreparedTextLayout(): Boolean

@DoNotStrip @JvmStatic public external fun enablePropsUpdateReconciliationAndroid(): Boolean
Expand Down Expand Up @@ -144,8 +142,6 @@ public object ReactNativeFeatureFlagsCxxInterop {

@DoNotStrip @JvmStatic public external fun fuseboxFrameRecordingEnabled(): Boolean

@DoNotStrip @JvmStatic public external fun fuseboxNetworkInspectionEnabled(): Boolean

@DoNotStrip @JvmStatic public external fun fuseboxScreenshotCaptureEnabled(): Boolean

@DoNotStrip @JvmStatic public external fun optimizedAnimatedPropUpdates(): Boolean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<5c36c0a5e9e67b43016ab02eab0ecd8f>>
* @generated SignedSource<<7f92f286423bf5ca463a29f95184dab3>>
*/

/**
Expand Down Expand Up @@ -101,8 +101,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi

override fun enableNativeCSSParsing(): Boolean = false

override fun enableNetworkEventReporting(): Boolean = true

override fun enablePreparedTextLayout(): Boolean = false

override fun enablePropsUpdateReconciliationAndroid(): Boolean = false
Expand Down Expand Up @@ -139,8 +137,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi

override fun fuseboxFrameRecordingEnabled(): Boolean = false

override fun fuseboxNetworkInspectionEnabled(): Boolean = true

override fun fuseboxScreenshotCaptureEnabled(): Boolean = false

override fun optimizedAnimatedPropUpdates(): Boolean = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<98a6085638c86aaa012c8bd972627ad4>>
* @generated SignedSource<<f9f09ebe26b59a2ab92b95cce89aa20c>>
*/

/**
Expand Down Expand Up @@ -63,7 +63,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
private var enableModuleArgumentNSNullConversionIOSCache: Boolean? = null
private var enableMutationObserverByDefaultCache: Boolean? = null
private var enableNativeCSSParsingCache: Boolean? = null
private var enableNetworkEventReportingCache: Boolean? = null
private var enablePreparedTextLayoutCache: Boolean? = null
private var enablePropsUpdateReconciliationAndroidCache: Boolean? = null
private var enableRuntimeSchedulerQueueClearingOnErrorCache: Boolean? = null
Expand All @@ -82,7 +81,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
private var fuseboxAssertSingleHostStateCache: Boolean? = null
private var fuseboxEnabledReleaseCache: Boolean? = null
private var fuseboxFrameRecordingEnabledCache: Boolean? = null
private var fuseboxNetworkInspectionEnabledCache: Boolean? = null
private var fuseboxScreenshotCaptureEnabledCache: Boolean? = null
private var optimizedAnimatedPropUpdatesCache: Boolean? = null
private var overrideBySynchronousMountPropsAtMountingAndroidCache: Boolean? = null
Expand Down Expand Up @@ -501,16 +499,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
return cached
}

override fun enableNetworkEventReporting(): Boolean {
var cached = enableNetworkEventReportingCache
if (cached == null) {
cached = currentProvider.enableNetworkEventReporting()
accessedFeatureFlags.add("enableNetworkEventReporting")
enableNetworkEventReportingCache = cached
}
return cached
}

override fun enablePreparedTextLayout(): Boolean {
var cached = enablePreparedTextLayoutCache
if (cached == null) {
Expand Down Expand Up @@ -691,16 +679,6 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
return cached
}

override fun fuseboxNetworkInspectionEnabled(): Boolean {
var cached = fuseboxNetworkInspectionEnabledCache
if (cached == null) {
cached = currentProvider.fuseboxNetworkInspectionEnabled()
accessedFeatureFlags.add("fuseboxNetworkInspectionEnabled")
fuseboxNetworkInspectionEnabledCache = cached
}
return cached
}

override fun fuseboxScreenshotCaptureEnabled(): Boolean {
var cached = fuseboxScreenshotCaptureEnabledCache
if (cached == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<8b5a9f8966d9f096b7fa4f7020db1f34>>
* @generated SignedSource<<cdc618302ded47c9d0c2211bc9080188>>
*/

/**
Expand Down Expand Up @@ -101,8 +101,6 @@ public interface ReactNativeFeatureFlagsProvider {

@DoNotStrip public fun enableNativeCSSParsing(): Boolean

@DoNotStrip public fun enableNetworkEventReporting(): Boolean

@DoNotStrip public fun enablePreparedTextLayout(): Boolean

@DoNotStrip public fun enablePropsUpdateReconciliationAndroid(): Boolean
Expand Down Expand Up @@ -139,8 +137,6 @@ public interface ReactNativeFeatureFlagsProvider {

@DoNotStrip public fun fuseboxFrameRecordingEnabled(): Boolean

@DoNotStrip public fun fuseboxNetworkInspectionEnabled(): Boolean

@DoNotStrip public fun fuseboxScreenshotCaptureEnabled(): Boolean

@DoNotStrip public fun optimizedAnimatedPropUpdates(): Boolean
Expand Down
Loading
Loading