diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2016-05-23 11:24:03 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2016-06-01 16:56:23 +0000 |
commit | 4a94a13d54dbaf32e7ac34cdee6e207fe5478286 (patch) | |
tree | 107bcf735b559024bfc4121d23071cea27ac05d4 /src/core/renderer/web_channel_ipc_transport.cpp | |
parent | 9d94e3ad9a1f3cf215d267c4b43ce74d57c54b2b (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.cpp | 18 |
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; |