Skip to content

Commit 20283fd

Browse files
Michal Klocekpatricia-gallardo
authored andcommitted
Migrate render_view_observer_qt to mojo
Since mojo interface no longer works on render view, but on render frame rename the class to be WebEnginePageHost and WebEnginePageRenderFrame Keep SetBackgroundColor render message, since it is required to things work. Change-Id: I4d6b70dd448926f8ac2d75d2b87f3d490a4cfefb Reviewed-by: Allan Sandfeld Jensen <[email protected]>
1 parent 4d57c5e commit 20283fd

11 files changed

+152
-130
lines changed

src/core/common/qt_messages.h

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,37 +12,15 @@
1212

1313
#define IPC_MESSAGE_START QtMsgStart
1414

15-
//-----------------------------------------------------------------------------
16-
// RenderView messages
17-
// These are messages sent from the browser to the renderer process.
18-
19-
IPC_MESSAGE_ROUTED1(RenderViewObserverQt_FetchDocumentMarkup,
20-
uint64_t /* requestId */)
21-
22-
IPC_MESSAGE_ROUTED1(RenderViewObserverQt_FetchDocumentInnerText,
23-
uint64_t /* requestId */)
24-
25-
IPC_MESSAGE_ROUTED1(RenderViewObserverQt_SetBackgroundColor,
26-
uint32_t /* color */)
27-
2815
// Tells the renderer whether or not a file system access has been allowed.
2916
IPC_MESSAGE_ROUTED2(QtWebEngineMsg_RequestFileSystemAccessAsyncResponse,
3017
int /* request_id */,
3118
bool /* allowed */)
3219

33-
3420
//-----------------------------------------------------------------------------
3521
// WebContents messages
3622
// These are messages sent from the renderer back to the browser process.
3723

38-
IPC_MESSAGE_ROUTED2(RenderViewObserverHostQt_DidFetchDocumentMarkup,
39-
uint64_t /* requestId */,
40-
base::string16 /* markup */)
41-
42-
IPC_MESSAGE_ROUTED2(RenderViewObserverHostQt_DidFetchDocumentInnerText,
43-
uint64_t /* requestId */,
44-
base::string16 /* innerText */)
45-
4624
IPC_MESSAGE_ROUTED0(RenderViewObserverHostQt_DidFirstVisuallyNonEmptyLayout)
4725

4826
//-----------------------------------------------------------------------------

src/core/core_chromium.pri

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,11 @@ SOURCES = \
110110
renderer/content_renderer_client_qt.cpp \
111111
renderer/content_settings_observer_qt.cpp \
112112
renderer/render_frame_observer_qt.cpp \
113-
renderer/render_view_observer_qt.cpp \
113+
renderer/web_engine_page_render_frame.cpp \
114114
renderer/render_configuration.cpp \
115115
renderer/user_resource_controller.cpp \
116116
renderer/plugins/plugin_placeholder_qt.cpp \
117-
renderer_host/render_view_observer_host_qt.cpp \
117+
renderer_host/web_engine_page_host.cpp \
118118
renderer_host/user_resource_controller_host.cpp \
119119
resource_bundle_qt.cpp \
120120
resource_context_qt.cpp \
@@ -215,11 +215,11 @@ HEADERS = \
215215
renderer/content_renderer_client_qt.h \
216216
renderer/content_settings_observer_qt.h \
217217
renderer/render_frame_observer_qt.h \
218-
renderer/render_view_observer_qt.h \
218+
renderer/web_engine_page_render_frame.h \
219219
renderer/render_configuration.h \
220220
renderer/user_resource_controller.h \
221221
renderer/plugins/plugin_placeholder_qt.h \
222-
renderer_host/render_view_observer_host_qt.h \
222+
renderer_host/web_engine_page_host.h \
223223
renderer_host/user_resource_controller_host.h \
224224
request_controller.h \
225225
resource_context_qt.h \

src/core/render_widget_host_view_qt.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -527,8 +527,6 @@ void RenderWidgetHostViewQt::UpdateBackgroundColor()
527527
content::RenderViewHost *rvh = content::RenderViewHost::From(host());
528528
if (color == SK_ColorTRANSPARENT)
529529
host()->owner_delegate()->SetBackgroundOpaque(false);
530-
else
531-
host()->Send(new RenderViewObserverQt_SetBackgroundColor(rvh->GetRoutingID(), color));
532530
}
533531

534532
// Return value indicates whether the mouse is locked successfully or not.

src/core/renderer/content_renderer_client_qt.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383

8484
#include "common/qt_messages.h"
8585
#include "renderer/render_frame_observer_qt.h"
86-
#include "renderer/render_view_observer_qt.h"
86+
#include "renderer/web_engine_page_render_frame.h"
8787
#include "renderer/render_configuration.h"
8888
#include "renderer/user_resource_controller.h"
8989
#if QT_CONFIG(webengine_webchannel)
@@ -188,20 +188,16 @@ void ContentRendererClientQt::ExposeInterfacesToBrowser(mojo::BinderMap* binders
188188
#endif
189189
}
190190

191-
void ContentRendererClientQt::RenderViewCreated(content::RenderView *render_view)
192-
{
193-
// RenderViewObservers destroy themselves with their RenderView.
194-
new RenderViewObserverQt(render_view);
195-
}
196-
197191
void ContentRendererClientQt::RenderFrameCreated(content::RenderFrame *render_frame)
198192
{
199193
QtWebEngineCore::RenderFrameObserverQt *render_frame_observer =
200194
new QtWebEngineCore::RenderFrameObserverQt(render_frame, m_webCacheImpl.data());
195+
if (render_frame->IsMainFrame()) {
201196
#if QT_CONFIG(webengine_webchannel)
202-
if (render_frame->IsMainFrame())
203197
new WebChannelIPCTransport(render_frame);
204198
#endif
199+
new WebEnginePageRenderFrame(render_frame);
200+
}
205201

206202
m_userResourceController->renderFrameCreated(render_frame);
207203

src/core/renderer/content_renderer_client_qt.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ class ContentRendererClientQt
8888
// content::ContentRendererClient:
8989
void RenderThreadStarted() override;
9090
void ExposeInterfacesToBrowser(mojo::BinderMap* binders) override;
91-
void RenderViewCreated(content::RenderView *render_view) override;
9291
void RenderFrameCreated(content::RenderFrame *render_frame) override;
9392
bool ShouldSuppressErrorPage(content::RenderFrame *, const GURL &, int error_code) override;
9493
bool HasErrorPage(int http_status_code) override;

src/core/renderer/render_view_observer_qt.cpp renamed to src/core/renderer/web_engine_page_render_frame.cpp

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@
3737
**
3838
****************************************************************************/
3939

40-
#include "renderer/render_view_observer_qt.h"
40+
#include "renderer/web_engine_page_render_frame.h"
41+
#include "content/public/renderer/render_frame.h"
42+
#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
43+
#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h"
4144

42-
#include "common/qt_messages.h"
43-
44-
#include "content/public/renderer/render_view.h"
4545
#include "third_party/blink/public/web/web_document.h"
4646
#include "third_party/blink/public/web/web_element.h"
4747
#include "third_party/blink/public/web/web_frame.h"
@@ -50,45 +50,45 @@
5050
#include "third_party/blink/public/web/web_local_frame.h"
5151
#include "third_party/blink/public/web/web_view.h"
5252

53-
RenderViewObserverQt::RenderViewObserverQt(content::RenderView *render_view) : content::RenderViewObserver(render_view)
54-
{}
53+
namespace QtWebEngineCore {
5554

56-
void RenderViewObserverQt::onFetchDocumentMarkup(quint64 requestId)
55+
WebEnginePageRenderFrame::WebEnginePageRenderFrame(content::RenderFrame *render_frame)
56+
: content::RenderFrameObserver(render_frame), m_binding(this)
5757
{
58-
blink::WebString markup;
59-
if (render_view()->GetWebView()->MainFrame()->IsWebLocalFrame())
60-
markup = blink::WebFrameContentDumper::DumpAsMarkup(
61-
static_cast<blink::WebLocalFrame *>(render_view()->GetWebView()->MainFrame()));
62-
Send(new RenderViewObserverHostQt_DidFetchDocumentMarkup(routing_id(), requestId, markup.Utf16()));
58+
render_frame->GetAssociatedInterfaceRegistry()->AddInterface(
59+
base::BindRepeating(&WebEnginePageRenderFrame::BindReceiver, base::Unretained(this)));
6360
}
6461

65-
void RenderViewObserverQt::onFetchDocumentInnerText(quint64 requestId)
62+
void WebEnginePageRenderFrame::BindReceiver(
63+
mojo::PendingAssociatedReceiver<qtwebenginepage::mojom::WebEnginePageRenderFrame> receiver)
6664
{
67-
blink::WebString text;
68-
if (render_view()->GetWebView()->MainFrame()->IsWebLocalFrame())
69-
text = blink::WebFrameContentDumper::DumpWebViewAsText(render_view()->GetWebView(),
70-
std::numeric_limits<std::size_t>::max());
71-
Send(new RenderViewObserverHostQt_DidFetchDocumentInnerText(routing_id(), requestId, text.Utf16()));
65+
m_binding.Bind(std::move(receiver));
7266
}
7367

74-
void RenderViewObserverQt::onSetBackgroundColor(quint32 color)
68+
void WebEnginePageRenderFrame::FetchDocumentMarkup(uint64_t requestId,
69+
FetchDocumentMarkupCallback callback)
7570
{
76-
render_view()->GetWebView()->SetBaseBackgroundColorOverride(color);
71+
blink::WebString markup =
72+
blink::WebFrameContentDumper::DumpAsMarkup(render_frame()->GetWebFrame());
73+
std::move(callback).Run(requestId, markup.Utf8());
7774
}
7875

79-
void RenderViewObserverQt::OnDestruct()
76+
void WebEnginePageRenderFrame::FetchDocumentInnerText(uint64_t requestId,
77+
FetchDocumentInnerTextCallback callback)
8078
{
81-
delete this;
79+
blink::WebString text = blink::WebFrameContentDumper::DumpWebViewAsText(
80+
render_frame()->GetWebFrame()->View(), std::numeric_limits<std::size_t>::max());
81+
std::move(callback).Run(requestId, text.Utf8());
82+
}
83+
84+
void WebEnginePageRenderFrame::SetBackgroundColor(uint32_t color)
85+
{
86+
render_frame()->GetWebFrame()->View()->SetBaseBackgroundColorOverride(color);
8287
}
8388

84-
bool RenderViewObserverQt::OnMessageReceived(const IPC::Message &message)
89+
void WebEnginePageRenderFrame::OnDestruct()
8590
{
86-
bool handled = true;
87-
IPC_BEGIN_MESSAGE_MAP(RenderViewObserverQt, message)
88-
IPC_MESSAGE_HANDLER(RenderViewObserverQt_FetchDocumentMarkup, onFetchDocumentMarkup)
89-
IPC_MESSAGE_HANDLER(RenderViewObserverQt_FetchDocumentInnerText, onFetchDocumentInnerText)
90-
IPC_MESSAGE_HANDLER(RenderViewObserverQt_SetBackgroundColor, onSetBackgroundColor)
91-
IPC_MESSAGE_UNHANDLED(handled = false)
92-
IPC_END_MESSAGE_MAP()
93-
return handled;
91+
delete this;
92+
}
93+
9494
}

src/core/renderer/render_view_observer_qt.h renamed to src/core/renderer/web_engine_page_render_frame.h

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/****************************************************************************
22
**
3-
** Copyright (C) 2016 The Qt Company Ltd.
3+
** Copyright (C) 2020 The Qt Company Ltd.
44
** Contact: https://www.qt.io/licensing/
55
**
66
** This file is part of the QtWebEngine module of the Qt Toolkit.
@@ -36,28 +36,40 @@
3636
** $QT_END_LICENSE$
3737
**
3838
****************************************************************************/
39-
#ifndef RENDER_VIEW_OBSERVER_QT_H
40-
#define RENDER_VIEW_OBSERVER_QT_H
39+
#ifndef WEB_ENGINE_PAGE_RENDER_FRAME_H
40+
#define WEB_ENGINE_PAGE_RENDER_FRAME_H
4141

42-
#include "content/public/renderer/render_view_observer.h"
42+
#include "content/public/renderer/render_frame_observer.h"
43+
#include "mojo/public/cpp/bindings/associated_receiver.h"
44+
#include "qtwebengine/browser/qtwebenginepage.mojom.h"
4345

44-
#include <QtGlobal>
46+
namespace content {
47+
class RenderFrame;
48+
}
4549

46-
class RenderViewObserverQt : public content::RenderViewObserver
50+
namespace QtWebEngineCore {
51+
52+
class WebEnginePageRenderFrame : private content::RenderFrameObserver,
53+
public qtwebenginepage::mojom::WebEnginePageRenderFrame
4754
{
4855
public:
49-
RenderViewObserverQt(content::RenderView *render_view);
56+
WebEnginePageRenderFrame(content::RenderFrame *render_frame);
57+
WebEnginePageRenderFrame(const WebEnginePageRenderFrame &) = delete;
58+
WebEnginePageRenderFrame &operator=(const WebEnginePageRenderFrame &) = delete;
5059

5160
private:
52-
void onFetchDocumentMarkup(quint64 requestId);
53-
void onFetchDocumentInnerText(quint64 requestId);
54-
void onSetBackgroundColor(quint32 color);
55-
61+
void FetchDocumentMarkup(uint64_t requestId, FetchDocumentMarkupCallback callback) override;
62+
void FetchDocumentInnerText(uint64_t requestId,
63+
FetchDocumentInnerTextCallback callback) override;
64+
void SetBackgroundColor(uint32_t color) override;
5665
void OnDestruct() override;
66+
void
67+
BindReceiver(mojo::PendingAssociatedReceiver<qtwebenginepage::mojom::WebEnginePageRenderFrame>
68+
receiver);
5769

58-
bool OnMessageReceived(const IPC::Message &message) override;
59-
60-
DISALLOW_COPY_AND_ASSIGN(RenderViewObserverQt);
70+
private:
71+
mojo::AssociatedReceiver<qtwebenginepage::mojom::WebEnginePageRenderFrame> m_binding;
6172
};
73+
} // namespace
6274

63-
#endif // RENDER_VIEW_OBSERVER_QT_H
75+
#endif // WEB_ENGINE_PAGE_RENDER_FRAME_H

src/core/renderer_host/render_view_observer_host_qt.cpp renamed to src/core/renderer_host/web_engine_page_host.cpp

Lines changed: 45 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -37,59 +37,76 @@
3737
**
3838
****************************************************************************/
3939

40-
#include "render_view_observer_host_qt.h"
40+
#include "web_engine_page_host.h"
4141

42-
#include "common/qt_messages.h"
43-
#include "content/public/browser/render_view_host.h"
42+
#include "qtwebengine/browser/qtwebenginepage.mojom.h"
4443
#include "content/public/browser/web_contents.h"
4544

4645
#include "render_widget_host_view_qt.h"
4746
#include "type_conversion.h"
4847
#include "web_contents_adapter_client.h"
48+
#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
4949

5050
namespace QtWebEngineCore {
5151

52-
RenderViewObserverHostQt::RenderViewObserverHostQt(content::WebContents *webContents, WebContentsAdapterClient *adapterClient)
53-
: content::WebContentsObserver(webContents)
54-
, m_adapterClient(adapterClient)
52+
WebEnginePageHost::WebEnginePageHost(content::WebContents *webContents,
53+
WebContentsAdapterClient *adapterClient)
54+
: content::WebContentsObserver(webContents), m_adapterClient(adapterClient)
5555
{
5656
}
5757

58-
void RenderViewObserverHostQt::fetchDocumentMarkup(quint64 requestId)
58+
void WebEnginePageHost::FetchDocumentMarkup(uint64_t requestId)
5959
{
60-
web_contents()->GetRenderViewHost()->Send(
61-
new RenderViewObserverQt_FetchDocumentMarkup(
62-
web_contents()->GetRenderViewHost()->GetRoutingID(), requestId));
60+
auto &remote = GetWebEnginePageRenderFrame(web_contents()->GetMainFrame());
61+
remote->FetchDocumentMarkup(
62+
requestId,
63+
base::BindOnce(&WebEnginePageHost::OnDidFetchDocumentMarkup, base::Unretained(this)));
6364
}
6465

65-
void RenderViewObserverHostQt::fetchDocumentInnerText(quint64 requestId)
66+
void WebEnginePageHost::FetchDocumentInnerText(uint64_t requestId)
6667
{
67-
web_contents()->GetRenderViewHost()->Send(
68-
new RenderViewObserverQt_FetchDocumentInnerText(
69-
web_contents()->GetRenderViewHost()->GetRoutingID(), requestId));
68+
auto &remote = GetWebEnginePageRenderFrame(web_contents()->GetMainFrame());
69+
remote->FetchDocumentInnerText(requestId,
70+
base::BindOnce(&WebEnginePageHost::OnDidFetchDocumentInnerText,
71+
base::Unretained(this)));
7072
}
7173

72-
bool RenderViewObserverHostQt::OnMessageReceived(const IPC::Message &message)
74+
void WebEnginePageHost::OnDidFetchDocumentMarkup(uint64_t requestId, const std::string &markup)
7375
{
74-
bool handled = true;
75-
IPC_BEGIN_MESSAGE_MAP(RenderViewObserverHostQt, message)
76-
IPC_MESSAGE_HANDLER(RenderViewObserverHostQt_DidFetchDocumentMarkup,
77-
onDidFetchDocumentMarkup)
78-
IPC_MESSAGE_HANDLER(RenderViewObserverHostQt_DidFetchDocumentInnerText,
79-
onDidFetchDocumentInnerText)
80-
IPC_MESSAGE_UNHANDLED(handled = false)
81-
IPC_END_MESSAGE_MAP()
82-
return handled;
76+
m_adapterClient->didFetchDocumentMarkup(requestId, toQt(markup));
8377
}
8478

85-
void RenderViewObserverHostQt::onDidFetchDocumentMarkup(quint64 requestId, const base::string16 &markup)
79+
void WebEnginePageHost::OnDidFetchDocumentInnerText(uint64_t requestId,
80+
const std::string &innerText)
8681
{
87-
m_adapterClient->didFetchDocumentMarkup(requestId, toQt(markup));
82+
m_adapterClient->didFetchDocumentInnerText(requestId, toQt(innerText));
8883
}
8984

90-
void RenderViewObserverHostQt::onDidFetchDocumentInnerText(quint64 requestId, const base::string16 &innerText)
85+
void WebEnginePageHost::RenderFrameDeleted(content::RenderFrameHost *render_frame)
9186
{
92-
m_adapterClient->didFetchDocumentInnerText(requestId, toQt(innerText));
87+
m_renderFrames.erase(render_frame);
88+
}
89+
90+
void WebEnginePageHost::SetBackgroundColor(uint32_t color)
91+
{
92+
auto &remote = GetWebEnginePageRenderFrame(web_contents()->GetMainFrame());
93+
remote->SetBackgroundColor(color);
94+
}
95+
96+
const WebEnginePageRenderFrameRemote &
97+
WebEnginePageHost::GetWebEnginePageRenderFrame(content::RenderFrameHost *rfh)
98+
{
99+
auto it = m_renderFrames.find(rfh);
100+
if (it == m_renderFrames.end()) {
101+
WebEnginePageRenderFrameRemote remote;
102+
rfh->GetRemoteAssociatedInterfaces()->GetInterface(remote.BindNewEndpointAndPassReceiver());
103+
it = m_renderFrames.insert(std::make_pair(rfh, std::move(remote))).first;
104+
} else if (it->second.is_bound() && !it->second.is_connected()) {
105+
it->second.reset();
106+
rfh->GetRemoteAssociatedInterfaces()->GetInterface(&it->second);
107+
}
108+
109+
return it->second;
93110
}
94111

95112
} // namespace QtWebEngineCore

0 commit comments

Comments
 (0)