summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Rossi <pierre.rossi@theqtcompany.com>2015-02-18 18:08:14 +0100
committerPierre Rossi <pierre.rossi@theqtcompany.com>2015-02-19 12:20:15 +0000
commite263449d32e9392985c1587f2a0b4e0e77e605a2 (patch)
tree9c00f24771315c22bf0e228429e6691884ead463
parentb26f697dbed3c2d12db0254a67cdf23396b91c23 (diff)
WebChannel: don't mess with the navigator object
The navigator object is actually exposed later on from WebCore using a different mechanism, so the V8 extension approach won't work with it. Better take the chrome extensions approach and expose our own. This should "un-break" the part of the web that was broken by eee482929a. Change-Id: I991be2e12bb9ebcf60ace02721497c3fcd923c7f Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
-rw-r--r--src/core/renderer/web_channel_ipc_transport.cpp24
-rw-r--r--src/core/renderer/web_channel_ipc_transport.h6
-rw-r--r--src/webengine/api/qquickwebengineview.cpp2
-rw-r--r--src/webenginewidgets/api/qwebenginepage.cpp4
-rw-r--r--tests/auto/quick/qmltests/data/webchannel-test.html2
5 files changed, 19 insertions, 19 deletions
diff --git a/src/core/renderer/web_channel_ipc_transport.cpp b/src/core/renderer/web_channel_ipc_transport.cpp
index 6adff45d5..ebebb01e9 100644
--- a/src/core/renderer/web_channel_ipc_transport.cpp
+++ b/src/core/renderer/web_channel_ipc_transport.cpp
@@ -51,11 +51,11 @@
static const char kWebChannelTransportExtensionName[] = "v8/WebChannelTransport";
static const char kWebChannelTransportApi[] =
- "if (typeof(navigator) === 'undefined')" \
- " navigator = {};" \
- "if (typeof(navigator.qtWebChannelTransport) === 'undefined')" \
- " navigator.qtWebChannelTransport = {};" \
- "navigator.qtWebChannelTransport.send = function(message) {" \
+ "if (typeof(qt) === 'undefined')" \
+ " qt = {};" \
+ "if (typeof(qt.webChannelTransport) === 'undefined')" \
+ " qt.webChannelTransport = {};" \
+ "qt.webChannelTransport.send = function(message) {" \
" native function NativeQtSendMessage();" \
" NativeQtSendMessage(message);" \
"};";
@@ -135,15 +135,15 @@ void WebChannelIPCTransport::dispatchWebChannelMessage(const std::vector<char> &
v8::Context::Scope contextScope(context);
v8::Handle<v8::Object> global(context->Global());
- v8::Handle<v8::Value> navigatorValue(global->Get(v8::String::NewFromUtf8(isolate, "navigator")));
- if (!navigatorValue->IsObject())
+ v8::Handle<v8::Value> qtObjectValue(global->Get(v8::String::NewFromUtf8(isolate, "qt")));
+ if (!qtObjectValue->IsObject())
return;
- v8::Handle<v8::Value> navigatorQtValue(navigatorValue->ToObject()->Get(v8::String::NewFromUtf8(isolate, "qtWebChannelTransport")));
- if (!navigatorQtValue->IsObject())
+ v8::Handle<v8::Value> webChannelObjectValue(qtObjectValue->ToObject()->Get(v8::String::NewFromUtf8(isolate, "webChannelTransport")));
+ if (!webChannelObjectValue->IsObject())
return;
- v8::Handle<v8::Value> onmessageCallbackValue(navigatorQtValue->ToObject()->Get(v8::String::NewFromUtf8(isolate, "onmessage")));
+ v8::Handle<v8::Value> onmessageCallbackValue(webChannelObjectValue->ToObject()->Get(v8::String::NewFromUtf8(isolate, "onmessage")));
if (!onmessageCallbackValue->IsFunction()) {
- qWarning("onmessage is not a callable property of navigator.qtWebChannelTransport. Some things might not work as expected.");
+ qWarning("onmessage is not a callable property of qt.webChannelTransport. Some things might not work as expected.");
return;
}
@@ -156,7 +156,7 @@ void WebChannelIPCTransport::dispatchWebChannelMessage(const std::vector<char> &
const int argc = 1;
v8::Handle<v8::Value> argv[argc];
argv[0] = messageObject;
- frame->callFunctionEvenIfScriptDisabled(callback, navigatorQtValue->ToObject(), argc, argv);
+ frame->callFunctionEvenIfScriptDisabled(callback, webChannelObjectValue->ToObject(), argc, argv);
}
v8::Extension *WebChannelIPCTransport::getV8Extension()
diff --git a/src/core/renderer/web_channel_ipc_transport.h b/src/core/renderer/web_channel_ipc_transport.h
index 71886f4b2..8074c2302 100644
--- a/src/core/renderer/web_channel_ipc_transport.h
+++ b/src/core/renderer/web_channel_ipc_transport.h
@@ -34,8 +34,8 @@
**
****************************************************************************/
-#ifndef NAVIGATOR_QT_EXTENSION_H
-#define NAVIGATOR_QT_EXTENSION_H
+#ifndef WEB_CHANNEL_IPC_TRANSPORT_H
+#define WEB_CHANNEL_IPC_TRANSPORT_H
#include "base/values.h"
#include "content/public/renderer/render_view_observer.h"
@@ -56,4 +56,4 @@ private:
virtual bool OnMessageReceived(const IPC::Message &message) Q_DECL_OVERRIDE;
};
-#endif // NAVIGATOR_QT_EXTENSION_H
+#endif // WEB_CHANNEL_IPC_TRANSPORT
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index 9bcb7d326..acae4a11b 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -819,7 +819,7 @@ QQuickWebEngineHistory *QQuickWebEngineView::navigationHistory() const
*
* The web channel instance used by this view.
* This channel is automatically using the internal QtWebEngine transport mechanism over Chromium IPC,
- * and exposed in the javascript context of the page it is rendering as \c navigator.qtWebChannelTransport.
+ * and exposed in the javascript context of the page it is rendering as \c qt.webChannelTransport.
* This transport object is used when instantiating the JavaScript counterpart of QWebChannel using
* the \l{Qt WebChannel JavaScript API}.
*
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index 7db20fe89..f2cc7e304 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -485,7 +485,7 @@ QWebEngineSettings *QWebEnginePage::settings() const
/*!
* Returns a pointer to the web channel instance used by this page, or a null pointer if none was set.
* This channel is automatically using the internal QtWebEngine transport mechanism over Chromium IPC,
- * and exposed in the javascript context of this page as \c navigator.qtWebChannelTransport
+ * and exposed in the javascript context of this page as \c qt.webChannelTransport
*
* \since 5.5
* \sa {QtWebChannel::QWebChannel}{QWebChannel}
@@ -499,7 +499,7 @@ QWebChannel *QWebEnginePage::webChannel() const
/*!
* Sets the web channel instance to be used by this page and connects it to QtWebEngine's transport
* using Chromium IPC messages. That transport is exposed in the javascript context of this page as
- * \c navigator.qtWebChannelTransport, which should be used when using the \l{Qt WebChannel JavaScript API}.
+ * \c qt.webChannelTransport, which should be used when using the \l{Qt WebChannel JavaScript API}.
*
* \note The page does not take ownership of the \a channel object.
*
diff --git a/tests/auto/quick/qmltests/data/webchannel-test.html b/tests/auto/quick/qmltests/data/webchannel-test.html
index 940821209..92966b24a 100644
--- a/tests/auto/quick/qmltests/data/webchannel-test.html
+++ b/tests/auto/quick/qmltests/data/webchannel-test.html
@@ -5,7 +5,7 @@
<script type="text/javascript" src="qrc:///qtwebchannel/qwebchannel.js"></script>
<script type="text/javascript">
//BEGIN SETUP
- var channel = new QWebChannel(navigator.qtWebChannelTransport, function(channel) {
+ var channel = new QWebChannel(qt.webChannelTransport, function(channel) {
window.testObject = channel.objects.testObject;
testObject.runTest.connect(function(foo) {
testObject.foo = foo;