summaryrefslogtreecommitdiffstats
path: root/src/core/renderer/web_channel_ipc_transport.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-05-23 11:24:03 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2016-06-01 16:56:23 +0000
commit4a94a13d54dbaf32e7ac34cdee6e207fe5478286 (patch)
tree107bcf735b559024bfc4121d23071cea27ac05d4 /src/core/renderer/web_channel_ipc_transport.cpp
parent9d94e3ad9a1f3cf215d267c4b43ce74d57c54b2b (diff)
Fix early JavaScript injection
With the latest Chromium snapshot we can no longer install any javascript before a new callback called RunScriptsAtDocumentStart has been called. So we must refactor user-scripts and web-channels to install on this call instead. Change-Id: I440a0aa4b26100c650d5c678b454ea5beb6b59d2 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/core/renderer/web_channel_ipc_transport.cpp')
-rw-r--r--src/core/renderer/web_channel_ipc_transport.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/core/renderer/web_channel_ipc_transport.cpp b/src/core/renderer/web_channel_ipc_transport.cpp
index d1e5f2245..f965c2cc7 100644
--- a/src/core/renderer/web_channel_ipc_transport.cpp
+++ b/src/core/renderer/web_channel_ipc_transport.cpp
@@ -44,6 +44,7 @@
#include "common/qt_messages.h"
+#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_view.h"
#include "gin/arguments.h"
#include "gin/handle.h"
@@ -153,11 +154,26 @@ content::RenderView *WebChannelTransport::GetRenderView(v8::Isolate *isolate)
WebChannelIPCTransport::WebChannelIPCTransport(content::RenderView *renderView)
: content::RenderViewObserver(renderView)
+ , content::RenderViewObserverTracker<WebChannelIPCTransport>(renderView)
+ , m_worldId(0)
+ , m_installed(false)
{
}
+void WebChannelIPCTransport::RunScriptsAtDocumentStart(content::RenderFrame *render_frame)
+{
+ // JavaScript run before this point doesn't stick, and needs to be redone.
+ // ### FIXME: we should try no even installing before
+ blink::WebLocalFrame *frame = render_frame->GetWebFrame();
+ if (m_installed && render_frame->IsMainFrame())
+ WebChannelTransport::Install(frame, m_worldId);
+}
+
+
void WebChannelIPCTransport::installWebChannel(uint worldId)
{
+ m_worldId = worldId;
+ m_installed = true;
blink::WebView *webView = render_view()->GetWebView();
if (!webView)
return;
@@ -166,6 +182,8 @@ void WebChannelIPCTransport::installWebChannel(uint worldId)
void WebChannelIPCTransport::uninstallWebChannel(uint worldId)
{
+ Q_ASSERT(worldId = m_worldId);
+ m_installed = false;
blink::WebView *webView = render_view()->GetWebView();
if (!webView)
return;