@@ -63,10 +63,13 @@ class HostAgent::Impl final {
63
63
}
64
64
}
65
65
66
- void handleRequest (const cdp::PreparsedRequest& req) {
67
- bool shouldSendOKResponse = false ;
68
- bool isFinishedHandlingRequest = false ;
66
+ private:
67
+ struct RequestHandlingState {
68
+ bool isFinishedHandlingRequest{false };
69
+ bool shouldSendOKResponse{false };
70
+ };
69
71
72
+ RequestHandlingState tryHandleRequest (const cdp::PreparsedRequest& req) {
70
73
// Domain enable/disable requests: write to state (because we're the
71
74
// top-level Agent in the Session), trigger any side effects, and decide
72
75
// whether we are finished handling the request (or need to delegate to the
@@ -85,14 +88,20 @@ class HostAgent::Impl final {
85
88
*hostMetadata_.integrationName );
86
89
}
87
90
88
- shouldSendOKResponse = true ;
89
- isFinishedHandlingRequest = false ;
90
- } else if (req.method == " Log.disable" ) {
91
+ return {
92
+ .isFinishedHandlingRequest = false ,
93
+ .shouldSendOKResponse = true ,
94
+ };
95
+ }
96
+ if (req.method == " Log.disable" ) {
91
97
sessionState_.isLogDomainEnabled = false ;
92
98
93
- shouldSendOKResponse = true ;
94
- isFinishedHandlingRequest = false ;
95
- } else if (req.method == " Runtime.enable" ) {
99
+ return {
100
+ .isFinishedHandlingRequest = false ,
101
+ .shouldSendOKResponse = true ,
102
+ };
103
+ }
104
+ if (req.method == " Runtime.enable" ) {
96
105
sessionState_.isRuntimeDomainEnabled = true ;
97
106
98
107
if (fuseboxClientType_ == FuseboxClientType::Unknown) {
@@ -103,27 +112,39 @@ class HostAgent::Impl final {
103
112
sendNonFuseboxNotice ();
104
113
}
105
114
106
- shouldSendOKResponse = true ;
107
- isFinishedHandlingRequest = false ;
108
- } else if (req.method == " Runtime.disable" ) {
115
+ return {
116
+ .isFinishedHandlingRequest = false ,
117
+ .shouldSendOKResponse = true ,
118
+ };
119
+ }
120
+ if (req.method == " Runtime.disable" ) {
109
121
sessionState_.isRuntimeDomainEnabled = false ;
110
122
111
- shouldSendOKResponse = true ;
112
- isFinishedHandlingRequest = false ;
113
- } else if (req.method == " Debugger.enable" ) {
123
+ return {
124
+ .isFinishedHandlingRequest = false ,
125
+ .shouldSendOKResponse = true ,
126
+ };
127
+ }
128
+ if (req.method == " Debugger.enable" ) {
114
129
sessionState_.isDebuggerDomainEnabled = true ;
115
130
116
- shouldSendOKResponse = true ;
117
- isFinishedHandlingRequest = false ;
118
- } else if (req.method == " Debugger.disable" ) {
131
+ return {
132
+ .isFinishedHandlingRequest = false ,
133
+ .shouldSendOKResponse = true ,
134
+ };
135
+ }
136
+ if (req.method == " Debugger.disable" ) {
119
137
sessionState_.isDebuggerDomainEnabled = false ;
120
138
121
- shouldSendOKResponse = true ;
122
- isFinishedHandlingRequest = false ;
139
+ return {
140
+ .isFinishedHandlingRequest = false ,
141
+ .shouldSendOKResponse = true ,
142
+ };
123
143
}
124
144
// Methods other than domain enables/disables: handle anything we know how
125
145
// to handle, and delegate to the InstanceAgent otherwise.
126
- else if (req.method == " Page.reload" ) {
146
+
147
+ if (req.method == " Page.reload" ) {
127
148
targetController_.getDelegate ().onReload ({
128
149
.ignoreCache =
129
150
req.params .isObject () && (req.params .count (" ignoreCache" ) != 0u )
@@ -136,9 +157,12 @@ class HostAgent::Impl final {
136
157
: std::nullopt,
137
158
});
138
159
139
- shouldSendOKResponse = true ;
140
- isFinishedHandlingRequest = true ;
141
- } else if (req.method == " Overlay.setPausedInDebuggerMessage" ) {
160
+ return {
161
+ .isFinishedHandlingRequest = true ,
162
+ .shouldSendOKResponse = true ,
163
+ };
164
+ }
165
+ if (req.method == " Overlay.setPausedInDebuggerMessage" ) {
142
166
auto message =
143
167
req.params .isObject () && (req.params .count (" message" ) != 0u )
144
168
? std::optional (req.params .at (" message" ).asString ())
@@ -153,9 +177,12 @@ class HostAgent::Impl final {
153
177
.message = message,
154
178
});
155
179
156
- shouldSendOKResponse = true ;
157
- isFinishedHandlingRequest = true ;
158
- } else if (req.method == " ReactNativeApplication.enable" ) {
180
+ return {
181
+ .isFinishedHandlingRequest = true ,
182
+ .shouldSendOKResponse = true ,
183
+ };
184
+ }
185
+ if (req.method == " ReactNativeApplication.enable" ) {
159
186
sessionState_.isReactNativeApplicationDomainEnabled = true ;
160
187
fuseboxClientType_ = FuseboxClientType::Fusebox;
161
188
@@ -167,44 +194,66 @@ class HostAgent::Impl final {
167
194
" ReactNativeApplication.metadataUpdated" ,
168
195
createHostMetadataPayload (hostMetadata_)));
169
196
170
- shouldSendOKResponse = true ;
171
- isFinishedHandlingRequest = true ;
172
- } else if (req.method == " ReactNativeApplication.disable" ) {
197
+ return {
198
+ .isFinishedHandlingRequest = true ,
199
+ .shouldSendOKResponse = true ,
200
+ };
201
+ }
202
+ if (req.method == " ReactNativeApplication.disable" ) {
173
203
sessionState_.isReactNativeApplicationDomainEnabled = false ;
174
204
175
- shouldSendOKResponse = true ;
176
- isFinishedHandlingRequest = true ;
177
- } else if (req.method == " Tracing.start" ) {
205
+ return {
206
+ .isFinishedHandlingRequest = true ,
207
+ .shouldSendOKResponse = true ,
208
+ };
209
+ }
210
+ if (req.method == " Tracing.start" ) {
178
211
if (sessionState_.isDebuggerDomainEnabled ) {
179
212
frontendChannel_ (cdp::jsonError (
180
213
req.id ,
181
214
cdp::ErrorCode::InternalError,
182
215
" Debugger domain is expected to be disabled before starting Tracing" ));
183
216
184
- return ;
217
+ return {
218
+ .isFinishedHandlingRequest = true ,
219
+ .shouldSendOKResponse = false ,
220
+ };
185
221
}
186
222
187
223
// We delegate handling of this request to TracingAgent. If not handled,
188
224
// then something unexpected happened - don't send an OK response.
189
- shouldSendOKResponse = false ;
190
- isFinishedHandlingRequest = false ;
225
+ return {
226
+ .isFinishedHandlingRequest = false ,
227
+ .shouldSendOKResponse = false ,
228
+ };
191
229
}
192
230
193
- if (!isFinishedHandlingRequest &&
231
+ return {
232
+ .isFinishedHandlingRequest = false ,
233
+ .shouldSendOKResponse = false ,
234
+ };
235
+ }
236
+
237
+ public:
238
+ void handleRequest (const cdp::PreparsedRequest& req) {
239
+ const RequestHandlingState requestState = tryHandleRequest (req);
240
+
241
+ if (!requestState.isFinishedHandlingRequest &&
194
242
networkIOAgent_.handleRequest (req, targetController_.getDelegate ())) {
195
243
return ;
196
244
}
197
245
198
- if (!isFinishedHandlingRequest && tracingAgent_.handleRequest (req)) {
246
+ if (!requestState.isFinishedHandlingRequest &&
247
+ tracingAgent_.handleRequest (req)) {
199
248
return ;
200
249
}
201
250
202
- if (!isFinishedHandlingRequest && instanceAgent_ &&
251
+ if (!requestState. isFinishedHandlingRequest && instanceAgent_ &&
203
252
instanceAgent_->handleRequest (req)) {
204
253
return ;
205
254
}
206
255
207
- if (shouldSendOKResponse) {
256
+ if (requestState. shouldSendOKResponse ) {
208
257
frontendChannel_ (cdp::jsonResult (req.id ));
209
258
return ;
210
259
}
0 commit comments