65
65
66
66
#include < bitset>
67
67
68
- Q_GLOBAL_STATIC (UserResourceController, qt_webengine_userResourceController)
69
-
70
68
static content::RenderView *const globalScriptsIndex = nullptr ;
71
69
72
70
// Scripts meant to run after the load event will be run 500ms after DOMContentLoaded if the load event doesn't come within that delay.
@@ -142,7 +140,8 @@ class UserResourceController::RenderFrameObserverHelper
142
140
public qtwebengine::mojom::UserResourceControllerRenderFrame
143
141
{
144
142
public:
145
- RenderFrameObserverHelper (content::RenderFrame *render_frame);
143
+ RenderFrameObserverHelper (content::RenderFrame *render_frame,
144
+ UserResourceController *controller);
146
145
void BindReceiver (
147
146
mojo::PendingAssociatedReceiver<qtwebengine::mojom::UserResourceControllerRenderFrame>
148
147
receiver);
@@ -161,38 +160,44 @@ class UserResourceController::RenderFrameObserverHelper
161
160
class Runner ;
162
161
QScopedPointer<Runner> m_runner;
163
162
mojo::AssociatedReceiver<qtwebengine::mojom::UserResourceControllerRenderFrame> m_binding;
163
+ UserResourceController *m_userResourceController;
164
164
};
165
165
166
166
// Helper class to create WeakPtrs so the AfterLoad tasks can be canceled and to
167
167
// avoid running scripts more than once per injection point.
168
168
class UserResourceController ::RenderFrameObserverHelper::Runner : public base::SupportsWeakPtr<Runner>
169
169
{
170
170
public:
171
- explicit Runner (blink::WebLocalFrame *frame) : m_frame(frame) {}
171
+ explicit Runner (blink::WebLocalFrame *frame, UserResourceController *controller)
172
+ : m_frame(frame), m_userResourceController(controller)
173
+ {
174
+ }
172
175
173
176
void run (QtWebEngineCore::UserScriptData::InjectionPoint p)
174
177
{
175
178
DCHECK_LT (p, m_ran.size ());
176
179
if (!m_ran[p]) {
177
- UserResourceController::instance () ->runScripts (p, m_frame);
180
+ m_userResourceController ->runScripts (p, m_frame);
178
181
m_ran[p] = true ;
179
182
}
180
183
}
181
184
182
185
private:
183
186
blink::WebLocalFrame *m_frame;
184
187
std::bitset<3 > m_ran;
188
+ UserResourceController *m_userResourceController;
185
189
};
186
190
187
191
// Used only for script cleanup on RenderView destruction.
188
192
class UserResourceController ::RenderViewObserverHelper : public content::RenderViewObserver
189
193
{
190
194
public:
191
- RenderViewObserverHelper (content::RenderView *render_view);
195
+ RenderViewObserverHelper (content::RenderView *render_view, UserResourceController *controller );
192
196
193
197
private:
194
198
// RenderViewObserver implementation.
195
199
void OnDestruct () override ;
200
+ UserResourceController *m_userResourceController;
196
201
};
197
202
198
203
void UserResourceController::runScripts (QtWebEngineCore::UserScriptData::InjectionPoint p,
@@ -230,16 +235,20 @@ void UserResourceController::RunScriptsAtDocumentEnd(content::RenderFrame *rende
230
235
}
231
236
232
237
UserResourceController::RenderFrameObserverHelper::RenderFrameObserverHelper (
233
- content::RenderFrame *render_frame)
234
- : content::RenderFrameObserver(render_frame), m_binding(this )
238
+ content::RenderFrame *render_frame, UserResourceController *controller)
239
+ : content::RenderFrameObserver(render_frame)
240
+ , m_binding(this )
241
+ , m_userResourceController(controller)
235
242
{
236
243
render_frame->GetAssociatedInterfaceRegistry ()->AddInterface (
237
244
base::BindRepeating (&UserResourceController::RenderFrameObserverHelper::BindReceiver,
238
245
base::Unretained (this )));
239
246
}
240
247
241
- UserResourceController::RenderViewObserverHelper::RenderViewObserverHelper (content::RenderView *render_view)
242
- : content::RenderViewObserver(render_view)
248
+ UserResourceController::RenderViewObserverHelper::RenderViewObserverHelper (
249
+ content::RenderView *render_view, UserResourceController *controller)
250
+ : content::RenderViewObserver(render_view), m_userResourceController(controller)
251
+
243
252
{}
244
253
245
254
void UserResourceController::RenderFrameObserverHelper::BindReceiver (
@@ -259,7 +268,7 @@ void UserResourceController::RenderFrameObserverHelper::DidCommitProvisionalLoad
259
268
// process has been notified of the DidCommitProvisionalLoad event to ensure
260
269
// that the WebChannelTransportHost is ready to receive messages.
261
270
262
- m_runner.reset (new Runner (render_frame ()->GetWebFrame ()));
271
+ m_runner.reset (new Runner (render_frame ()->GetWebFrame (), m_userResourceController ));
263
272
264
273
base::ThreadTaskRunnerHandle::Get ()->PostTask (
265
274
FROM_HERE,
@@ -302,7 +311,7 @@ void UserResourceController::RenderViewObserverHelper::OnDestruct()
302
311
{
303
312
// Remove all scripts associated with the render view.
304
313
if (content::RenderView *view = render_view ())
305
- UserResourceController::instance () ->renderViewDestroyed (view);
314
+ m_userResourceController ->renderViewDestroyed (view);
306
315
delete this ;
307
316
}
308
317
@@ -311,27 +320,22 @@ void UserResourceController::RenderFrameObserverHelper::AddScript(
311
320
{
312
321
if (content::RenderFrame *frame = render_frame ())
313
322
if (content::RenderView *view = frame->GetRenderView ())
314
- UserResourceController::instance () ->addScriptForView (script, view);
323
+ m_userResourceController ->addScriptForView (script, view);
315
324
}
316
325
317
326
void UserResourceController::RenderFrameObserverHelper::RemoveScript (
318
327
const QtWebEngineCore::UserScriptData &script)
319
328
{
320
329
if (content::RenderFrame *frame = render_frame ())
321
330
if (content::RenderView *view = frame->GetRenderView ())
322
- UserResourceController::instance () ->removeScriptForView (script, view);
331
+ m_userResourceController ->removeScriptForView (script, view);
323
332
}
324
333
325
334
void UserResourceController::RenderFrameObserverHelper::ClearScripts ()
326
335
{
327
336
if (content::RenderFrame *frame = render_frame ())
328
337
if (content::RenderView *view = frame->GetRenderView ())
329
- UserResourceController::instance ()->clearScriptsForView (view);
330
- }
331
-
332
- UserResourceController *UserResourceController::instance ()
333
- {
334
- return qt_webengine_userResourceController ();
338
+ m_userResourceController->clearScriptsForView (view);
335
339
}
336
340
337
341
void UserResourceController::BindReceiver (
@@ -352,13 +356,13 @@ UserResourceController::UserResourceController() : m_binding(this)
352
356
void UserResourceController::renderFrameCreated (content::RenderFrame *renderFrame)
353
357
{
354
358
// Will destroy itself when the RenderFrame is destroyed.
355
- new RenderFrameObserverHelper (renderFrame);
359
+ new RenderFrameObserverHelper (renderFrame, this );
356
360
}
357
361
358
362
void UserResourceController::renderViewCreated (content::RenderView *renderView)
359
363
{
360
364
// Will destroy itself when the RenderView is destroyed.
361
- new RenderViewObserverHelper (renderView);
365
+ new RenderViewObserverHelper (renderView, this );
362
366
}
363
367
364
368
void UserResourceController::renderViewDestroyed (content::RenderView *renderView)
@@ -419,3 +423,16 @@ void UserResourceController::ClearScripts()
419
423
{
420
424
clearScriptsForView (globalScriptsIndex);
421
425
}
426
+
427
+ void UserResourceController::RegisterMojoInterfaces (
428
+ blink::AssociatedInterfaceRegistry *associated_interfaces)
429
+ {
430
+ associated_interfaces->AddInterface (
431
+ base::Bind (&UserResourceController::BindReceiver, base::Unretained (this )));
432
+ }
433
+
434
+ void UserResourceController::UnregisterMojoInterfaces (
435
+ blink::AssociatedInterfaceRegistry *associated_interfaces)
436
+ {
437
+ associated_interfaces->RemoveInterface (qtwebengine::mojom::UserResourceController::Name_);
438
+ }
0 commit comments