summaryrefslogtreecommitdiffstats
path: root/src/core/renderer/web_channel_ipc_transport.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-01-18 15:40:56 +0100
committerMichal Klocek <michal.klocek@qt.io>2021-01-19 23:13:47 +0100
commita7510e85e6f53f4e889307edb58f26c8900d2d06 (patch)
treed4b6208bb8bf7d8288c57d7024c2813b3af1b5aa /src/core/renderer/web_channel_ipc_transport.cpp
parent91696b2cb090e5b6147a30465f74d8d37db48615 (diff)
parentf1f763cf3c7254406b7b6f01551b6624210bb834 (diff)
Merge branch '5.15' into dev
Last commits before 87 update. Change-Id: Id156b0199a8fd354c946cfe604ae8541ba554658
Diffstat (limited to 'src/core/renderer/web_channel_ipc_transport.cpp')
-rw-r--r--src/core/renderer/web_channel_ipc_transport.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/core/renderer/web_channel_ipc_transport.cpp b/src/core/renderer/web_channel_ipc_transport.cpp
index 496417329..1efefc1d0 100644
--- a/src/core/renderer/web_channel_ipc_transport.cpp
+++ b/src/core/renderer/web_channel_ipc_transport.cpp
@@ -74,7 +74,8 @@ private:
// gin::WrappableBase
gin::ObjectTemplateBuilder GetObjectTemplateBuilder(v8::Isolate *isolate) override;
-
+ mojo::AssociatedRemote<qtwebchannel::mojom::WebChannelTransportHost> m_remote;
+ content::RenderFrame *m_renderFrame = nullptr;
DISALLOW_COPY_AND_ASSIGN(WebChannelTransport);
};
@@ -156,9 +157,13 @@ void WebChannelTransport::NativeQtSendMessage(gin::Arguments *args)
jsonString->WriteUtf8(isolate, reinterpret_cast<char *>(json.data()), json.size(), nullptr,
v8::String::REPLACE_INVALID_UTF8);
- mojo::AssociatedRemote<qtwebchannel::mojom::WebChannelTransportHost> webChannelTransport;
- renderFrame->GetRemoteAssociatedInterfaces()->GetInterface(&webChannelTransport);
- webChannelTransport->DispatchWebChannelMessage(json);
+ if (!m_remote) {
+ renderFrame->GetRemoteAssociatedInterfaces()->GetInterface(&m_remote);
+ m_renderFrame = renderFrame;
+ }
+ DCHECK(renderFrame == m_renderFrame);
+
+ m_remote->DispatchWebChannelMessage(json);
}
gin::ObjectTemplateBuilder WebChannelTransport::GetObjectTemplateBuilder(v8::Isolate *isolate)
@@ -168,7 +173,10 @@ gin::ObjectTemplateBuilder WebChannelTransport::GetObjectTemplateBuilder(v8::Iso
}
WebChannelIPCTransport::WebChannelIPCTransport(content::RenderFrame *renderFrame)
- : content::RenderFrameObserver(renderFrame), m_worldId(0), m_worldInitialized(false)
+ : content::RenderFrameObserver(renderFrame)
+ , m_worldId(0)
+ , m_worldInitialized(false)
+ , m_binding(this)
{
renderFrame->GetAssociatedInterfaceRegistry()->AddInterface(
base::BindRepeating(&WebChannelIPCTransport::BindReceiver, base::Unretained(this)));
@@ -177,7 +185,7 @@ WebChannelIPCTransport::WebChannelIPCTransport(content::RenderFrame *renderFrame
void WebChannelIPCTransport::BindReceiver(
mojo::PendingAssociatedReceiver<qtwebchannel::mojom::WebChannelTransportRender> receiver)
{
- m_receivers.Add(this, std::move(receiver));
+ m_binding.Bind(std::move(receiver));
}
void WebChannelIPCTransport::SetWorldId(uint32_t worldId)