@@ -61,6 +61,7 @@ class UserResourceControllerHost::WebContentsObserverHelper : public content::We
61
61
// WebContentsObserver overrides:
62
62
void RenderFrameCreated (content::RenderFrameHost *renderFrameHost) override ;
63
63
void RenderFrameHostChanged (content::RenderFrameHost *oldHost, content::RenderFrameHost *newHost) override ;
64
+ void RenderFrameDeleted (content::RenderFrameHost *render_frame_host) override ;
64
65
void WebContentsDestroyed () override ;
65
66
66
67
private:
@@ -77,28 +78,27 @@ UserResourceControllerHost::WebContentsObserverHelper::WebContentsObserverHelper
77
78
void UserResourceControllerHost::WebContentsObserverHelper::RenderFrameCreated (content::RenderFrameHost *renderFrameHost)
78
79
{
79
80
content::WebContents *contents = web_contents ();
80
- mojo::AssociatedRemote<qtwebengine::mojom::UserResourceControllerRenderFrame>
81
- userResourceController;
82
- renderFrameHost->GetRemoteAssociatedInterfaces ()->GetInterface (
83
- userResourceController.BindNewEndpointAndPassReceiver ());
84
-
81
+ auto &remote = m_controllerHost->GetUserResourceControllerRenderFrame (renderFrameHost);
85
82
const QList<UserScript> scripts = m_controllerHost->m_perContentsScripts .value (contents);
86
83
for (const UserScript &script : scripts)
87
- userResourceController ->AddScript (script.data ());
84
+ remote ->AddScript (script.data ());
88
85
}
89
86
90
87
void UserResourceControllerHost::WebContentsObserverHelper::RenderFrameHostChanged (content::RenderFrameHost *oldHost,
91
88
content::RenderFrameHost *newHost)
92
89
{
93
90
if (oldHost) {
94
- mojo::AssociatedRemote<qtwebengine::mojom::UserResourceControllerRenderFrame>
95
- userResourceController;
96
- oldHost->GetRemoteAssociatedInterfaces ()->GetInterface (
97
- userResourceController.BindNewEndpointAndPassReceiver ());
98
- userResourceController->ClearScripts ();
91
+ auto &remote = m_controllerHost->GetUserResourceControllerRenderFrame (oldHost);
92
+ remote->ClearScripts ();
99
93
}
100
94
}
101
95
96
+ void UserResourceControllerHost::WebContentsObserverHelper::RenderFrameDeleted (
97
+ content::RenderFrameHost *render_frame_host)
98
+ {
99
+ m_controllerHost->m_renderFrames .erase (render_frame_host);
100
+ }
101
+
102
102
void UserResourceControllerHost::WebContentsObserverHelper::WebContentsDestroyed ()
103
103
{
104
104
m_controllerHost->webContentsDestroyed (web_contents ());
@@ -154,13 +154,8 @@ void UserResourceControllerHost::addUserScript(const UserScript &script, WebCont
154
154
m_perContentsScripts.insert (contents, currentScripts);
155
155
}
156
156
}
157
- mojo::AssociatedRemote<qtwebengine::mojom::UserResourceControllerRenderFrame>
158
- userResourceController;
159
- contents->GetRenderViewHost ()
160
- ->GetMainFrame ()
161
- ->GetRemoteAssociatedInterfaces ()
162
- ->GetInterface (userResourceController.BindNewEndpointAndPassReceiver ());
163
- userResourceController->AddScript (script.data ());
157
+ GetUserResourceControllerRenderFrame (contents->GetRenderViewHost ()->GetMainFrame ())
158
+ ->AddScript (script.data ());
164
159
}
165
160
}
166
161
@@ -184,13 +179,8 @@ bool UserResourceControllerHost::removeUserScript(const UserScript &script, WebC
184
179
QList<UserScript>::iterator it = std::find (list.begin (), list.end (), script);
185
180
if (it == list.end ())
186
181
return false ;
187
- mojo::AssociatedRemote<qtwebengine::mojom::UserResourceControllerRenderFrame>
188
- userResourceController;
189
- contents->GetRenderViewHost ()
190
- ->GetMainFrame ()
191
- ->GetRemoteAssociatedInterfaces ()
192
- ->GetInterface (userResourceController.BindNewEndpointAndPassReceiver ());
193
- userResourceController->RemoveScript ((*it).data ());
182
+ GetUserResourceControllerRenderFrame (contents->GetRenderViewHost ()->GetMainFrame ())
183
+ ->RemoveScript ((*it).data ());
194
184
list.erase (it);
195
185
}
196
186
return true ;
@@ -208,11 +198,8 @@ void UserResourceControllerHost::clearAllScripts(WebContentsAdapter *adapter)
208
198
m_perContentsScripts.remove (contents);
209
199
mojo::AssociatedRemote<qtwebengine::mojom::UserResourceControllerRenderFrame>
210
200
userResourceController;
211
- contents->GetRenderViewHost ()
212
- ->GetMainFrame ()
213
- ->GetRemoteAssociatedInterfaces ()
214
- ->GetInterface (userResourceController.BindNewEndpointAndPassReceiver ());
215
- userResourceController->ClearScripts ();
201
+ GetUserResourceControllerRenderFrame (contents->GetRenderViewHost ()->GetMainFrame ())
202
+ ->ClearScripts ();
216
203
}
217
204
}
218
205
@@ -258,4 +245,20 @@ UserResourceControllerHost::~UserResourceControllerHost()
258
245
}
259
246
}
260
247
248
+ const UserResourceControllerRenderFrameRemote &
249
+ UserResourceControllerHost::GetUserResourceControllerRenderFrame (content::RenderFrameHost *rfh)
250
+ {
251
+ auto it = m_renderFrames.find (rfh);
252
+ if (it == m_renderFrames.end ()) {
253
+ UserResourceControllerRenderFrameRemote remote;
254
+ rfh->GetRemoteAssociatedInterfaces ()->GetInterface (remote.BindNewEndpointAndPassReceiver ());
255
+ it = m_renderFrames.insert (std::make_pair (rfh, std::move (remote))).first ;
256
+ } else if (it->second .is_bound () && !it->second .is_connected ()) {
257
+ it->second .reset ();
258
+ rfh->GetRemoteAssociatedInterfaces ()->GetInterface (&it->second );
259
+ }
260
+
261
+ return it->second ;
262
+ }
263
+
261
264
} // namespace
0 commit comments