@@ -53,10 +53,22 @@ namespace CefSharp
53
53
// For ServiceWorker browser and frame will be null
54
54
if (browser.get () && frame.get ())
55
55
{
56
- CefBrowserWrapper browserWrapper (browser) ;
56
+ IBrowser^ existingBrowserWrapper ;
57
57
CefFrameWrapper frameWrapper (frame);
58
58
59
- accessFilter = _handler->GetCookieAccessFilter (_browserControl, %browserWrapper, %frameWrapper, %requestWrapper);
59
+ // If we already have an IBrowser instance then use it, otherwise we'll pass in a scoped instance
60
+ // which cannot be accessed outside the scope of the method. We should under normal circumstanaces
61
+ // have a IBrowser reference already ready to use.
62
+ if (_browserControl->TryGetBrowserCoreById (browser->GetIdentifier (), existingBrowserWrapper))
63
+ {
64
+ accessFilter = _handler->GetCookieAccessFilter (_browserControl, existingBrowserWrapper, %frameWrapper, %requestWrapper);
65
+ }
66
+ else
67
+ {
68
+ CefBrowserWrapper browserWrapper (browser);
69
+
70
+ accessFilter = _handler->GetCookieAccessFilter (_browserControl, %browserWrapper, %frameWrapper, %requestWrapper);
71
+ }
60
72
}
61
73
else
62
74
{
@@ -76,14 +88,23 @@ namespace CefSharp
76
88
// For ServiceWorker browser and frame will be null
77
89
if (browser.get () && frame.get ())
78
90
{
79
- // TODO: We previously used GetBrowserWrapper - investigate passing in reference to this adapter
80
- CefBrowserWrapper browserWrapper (browser);
91
+ IBrowser^ existingBrowserWrapper;
81
92
// We pass the frame and request wrappers to CefRequestCallbackWrapper so they can be disposed of
82
93
// when the callback is executed
83
94
auto frameWrapper = gcnew CefFrameWrapper (frame);
84
95
auto requestWrapper = gcnew Request (request);
85
96
auto requestCallback = gcnew CefRequestCallbackWrapper (callback, frameWrapper, requestWrapper);
86
97
98
+ // If we already have an IBrowser instance then use it, otherwise we'll pass in a scoped instance
99
+ // which cannot be accessed outside the scope of the method. We should under normal circumstanaces
100
+ // have a IBrowser reference already ready to use.
101
+ if (_browserControl->TryGetBrowserCoreById (browser->GetIdentifier (), existingBrowserWrapper))
102
+ {
103
+ return (cef_return_value_t )_handler->OnBeforeResourceLoad (_browserControl, existingBrowserWrapper, frameWrapper, requestWrapper, requestCallback);
104
+ }
105
+
106
+ CefBrowserWrapper browserWrapper (browser);
107
+
87
108
return (cef_return_value_t )_handler->OnBeforeResourceLoad (_browserControl, %browserWrapper, frameWrapper, requestWrapper, requestCallback);
88
109
}
89
110
@@ -101,10 +122,22 @@ namespace CefSharp
101
122
// For ServiceWorker browser and frame will be null
102
123
if (browser.get () && frame.get ())
103
124
{
104
- CefBrowserWrapper browserWrapper (browser) ;
125
+ IBrowser^ existingBrowserWrapper ;
105
126
CefFrameWrapper frameWrapper (frame);
106
127
107
- resourceHandler = _handler->GetResourceHandler (_browserControl, %browserWrapper, %frameWrapper, %requestWrapper);
128
+ // If we already have an IBrowser instance then use it, otherwise we'll pass in a scoped instance
129
+ // which cannot be accessed outside the scope of the method. We should under normal circumstanaces
130
+ // have a IBrowser reference already ready to use.
131
+ if (_browserControl->TryGetBrowserCoreById (browser->GetIdentifier (), existingBrowserWrapper))
132
+ {
133
+ resourceHandler = _handler->GetResourceHandler (_browserControl, existingBrowserWrapper, %frameWrapper, %requestWrapper);
134
+ }
135
+ else
136
+ {
137
+ CefBrowserWrapper browserWrapper (browser);
138
+
139
+ resourceHandler = _handler->GetResourceHandler (_browserControl, %browserWrapper, %frameWrapper, %requestWrapper);
140
+ }
108
141
}
109
142
else
110
143
{
@@ -159,10 +192,22 @@ namespace CefSharp
159
192
// For ServiceWorker browser and frame will be null
160
193
if (browser.get () && frame.get ())
161
194
{
162
- CefBrowserWrapper browserWrapper (browser) ;
195
+ IBrowser^ existingBrowserWrapper ;
163
196
CefFrameWrapper frameWrapper (frame);
164
197
165
- _handler->OnResourceRedirect (_browserControl, %browserWrapper, %frameWrapper, %requestWrapper, %responseWrapper, managedNewUrl);
198
+ // If we already have an IBrowser instance then use it, otherwise we'll pass in a scoped instance
199
+ // which cannot be accessed outside the scope of the method. We should under normal circumstanaces
200
+ // have a IBrowser reference already ready to use.
201
+ if (_browserControl->TryGetBrowserCoreById (browser->GetIdentifier (), existingBrowserWrapper))
202
+ {
203
+ _handler->OnResourceRedirect (_browserControl, existingBrowserWrapper, %frameWrapper, %requestWrapper, %responseWrapper, managedNewUrl);
204
+ }
205
+ else
206
+ {
207
+ CefBrowserWrapper browserWrapper (browser);
208
+
209
+ _handler->OnResourceRedirect (_browserControl, %browserWrapper, %frameWrapper, %requestWrapper, %responseWrapper, managedNewUrl);
210
+ }
166
211
}
167
212
else
168
213
{
@@ -181,9 +226,18 @@ namespace CefSharp
181
226
// For ServiceWorker browser and frame will be null
182
227
if (browser.get () && frame.get ())
183
228
{
229
+ IBrowser^ existingBrowserWrapper;
230
+ CefFrameWrapper frameWrapper (frame);
231
+
232
+ // If we already have an IBrowser instance then use it, otherwise we'll pass in a scoped instance
233
+ // which cannot be accessed outside the scope of the method. We should under normal circumstanaces
234
+ // have a IBrowser reference already ready to use.
235
+ if (_browserControl->TryGetBrowserCoreById (browser->GetIdentifier (), existingBrowserWrapper))
236
+ {
237
+ return _handler->OnResourceResponse (_browserControl, existingBrowserWrapper, %frameWrapper, %requestWrapper, %responseWrapper);
238
+ }
184
239
185
240
CefBrowserWrapper browserWrapper (browser);
186
- CefFrameWrapper frameWrapper (frame);
187
241
188
242
return _handler->OnResourceResponse (_browserControl, %browserWrapper, %frameWrapper, %requestWrapper, %responseWrapper);
189
243
}
@@ -200,10 +254,22 @@ namespace CefSharp
200
254
// For ServiceWorker browser and frame will be null
201
255
if (browser.get () && frame.get ())
202
256
{
203
- CefBrowserWrapper browserWrapper (browser) ;
257
+ IBrowser^ existingBrowserWrapper ;
204
258
CefFrameWrapper frameWrapper (frame);
205
259
206
- responseFilter = _handler->GetResourceResponseFilter (_browserControl, %browserWrapper, %frameWrapper, %requestWrapper, %responseWrapper);
260
+ // If we already have an IBrowser instance then use it, otherwise we'll pass in a scoped instance
261
+ // which cannot be accessed outside the scope of the method. We should under normal circumstanaces
262
+ // have a IBrowser reference already ready to use.
263
+ if (_browserControl->TryGetBrowserCoreById (browser->GetIdentifier (), existingBrowserWrapper))
264
+ {
265
+ responseFilter = _handler->GetResourceResponseFilter (_browserControl, existingBrowserWrapper, %frameWrapper, %requestWrapper, %responseWrapper);
266
+ }
267
+ else
268
+ {
269
+ CefBrowserWrapper browserWrapper (browser);
270
+
271
+ responseFilter = _handler->GetResourceResponseFilter (_browserControl, %browserWrapper, %frameWrapper, %requestWrapper, %responseWrapper);
272
+ }
207
273
}
208
274
else
209
275
{
@@ -226,10 +292,22 @@ namespace CefSharp
226
292
// For ServiceWorker browser and frame will be null
227
293
if (browser.get () && frame.get ())
228
294
{
229
- CefBrowserWrapper browserWrapper (browser) ;
295
+ IBrowser^ existingBrowserWrapper ;
230
296
CefFrameWrapper frameWrapper (frame);
231
297
232
- _handler->OnResourceLoadComplete (_browserControl, %browserWrapper, %frameWrapper, %requestWrapper, %responseWrapper, (UrlRequestStatus)status, receivedContentLength);
298
+ // If we already have an IBrowser instance then use it, otherwise we'll pass in a scoped instance
299
+ // which cannot be accessed outside the scope of the method. We should under normal circumstanaces
300
+ // have a IBrowser reference already ready to use.
301
+ if (_browserControl->TryGetBrowserCoreById (browser->GetIdentifier (), existingBrowserWrapper))
302
+ {
303
+ _handler->OnResourceLoadComplete (_browserControl, existingBrowserWrapper, %frameWrapper, %requestWrapper, %responseWrapper, (UrlRequestStatus)status, receivedContentLength);
304
+ }
305
+ else
306
+ {
307
+ CefBrowserWrapper browserWrapper (browser);
308
+
309
+ _handler->OnResourceLoadComplete (_browserControl, %browserWrapper, %frameWrapper, %requestWrapper, %responseWrapper, (UrlRequestStatus)status, receivedContentLength);
310
+ }
233
311
}
234
312
else
235
313
{
@@ -244,11 +322,22 @@ namespace CefSharp
244
322
// For ServiceWorker browser and frame will be null
245
323
if (browser.get () && frame.get ())
246
324
{
247
- CefBrowserWrapper browserWrapper (browser) ;
325
+ IBrowser^ existingBrowserWrapper ;
248
326
CefFrameWrapper frameWrapper (frame);
249
327
328
+ // If we already have an IBrowser instance then use it, otherwise we'll pass in a scoped instance
329
+ // which cannot be accessed outside the scope of the method. We should under normal circumstanaces
330
+ // have a IBrowser reference already ready to use.
331
+ if (_browserControl->TryGetBrowserCoreById (browser->GetIdentifier (), existingBrowserWrapper))
332
+ {
333
+ allowOSExecution = _handler->OnProtocolExecution (_browserControl, existingBrowserWrapper, %frameWrapper, %requestWrapper);
334
+ }
335
+ else
336
+ {
337
+ CefBrowserWrapper browserWrapper (browser);
250
338
251
- allowOSExecution = _handler->OnProtocolExecution (_browserControl, %browserWrapper, %frameWrapper, %requestWrapper);
339
+ allowOSExecution = _handler->OnProtocolExecution (_browserControl, %browserWrapper, %frameWrapper, %requestWrapper);
340
+ }
252
341
}
253
342
else
254
343
{
0 commit comments