From 41e0b8732f63cf638308b6e3ddea5dbb5382f17b Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 7 Sep 2016 10:59:16 -0700 Subject: [PATCH] fix for occasional crash when deleting web entity --- interface/resources/qml/controls/WebView.qml | 5 +++-- .../src/RenderableWebEntityItem.cpp | 16 +++++++++------- .../src/RenderableWebEntityItem.h | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/interface/resources/qml/controls/WebView.qml b/interface/resources/qml/controls/WebView.qml index fa594574ae..ae1394f60f 100644 --- a/interface/resources/qml/controls/WebView.qml +++ b/interface/resources/qml/controls/WebView.qml @@ -41,8 +41,6 @@ Item { property string newUrl: "" - profile: desktop.browserProfile - webChannel.registeredObjects: [eventBridgeWrapper] Component.onCompleted: { @@ -51,6 +49,8 @@ Item { root.javaScriptConsoleMessage.connect(function(level, message, lineNumber, sourceID) { console.log("Web Entity JS message: " + sourceID + " " + lineNumber + " " + message); }); + + root.profile.httpUserAgent = "Mozilla/5.0 Chrome (HighFidelityInterface)" } // FIXME hack to get the URL with the auth token included. Remove when we move to Qt 5.6 @@ -96,6 +96,7 @@ Item { } onNewViewRequested:{ + // desktop is not defined for web-entities if (desktop) { var component = Qt.createComponent("../Browser.qml"); var newWindow = component.createObject(desktop); diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp index 0ece9caca3..f1aaf54897 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp @@ -81,18 +81,20 @@ RenderableWebEntityItem::RenderableWebEntityItem(const EntityItemID& entityItemI _touchDevice.setName("RenderableWebEntityItemTouchDevice"); _touchDevice.setMaximumTouchPoints(4); - _webEntityAPIHelper.setPtr(this); - _webEntityAPIHelper.moveToThread(qApp->thread()); + _webEntityAPIHelper = new WebEntityAPIHelper; + _webEntityAPIHelper->setPtr(this); + _webEntityAPIHelper->moveToThread(qApp->thread()); // forward web events to EntityScriptingInterface auto entities = DependencyManager::get(); - QObject::connect(&_webEntityAPIHelper, &WebEntityAPIHelper::webEventReceived, [=](const QVariant& message) { + QObject::connect(_webEntityAPIHelper, &WebEntityAPIHelper::webEventReceived, [=](const QVariant& message) { emit entities->webEventReceived(entityItemID, message); }); } RenderableWebEntityItem::~RenderableWebEntityItem() { - _webEntityAPIHelper.setPtr(nullptr); + _webEntityAPIHelper->setPtr(nullptr); + _webEntityAPIHelper->deleteLater(); destroyWebSurface(); qDebug() << "Destroyed web entity " << getID(); } @@ -113,10 +115,10 @@ bool RenderableWebEntityItem::buildWebSurface(EntityTreeRenderer* renderer) { _webSurface->setBaseUrl(QUrl::fromLocalFile(PathUtils::resourcesPath() + "/qml/controls/")); _webSurface->load("WebView.qml"); _webSurface->resume(); - _webSurface->getRootItem()->setProperty("eventBridge", QVariant::fromValue(&_webEntityAPIHelper)); + _webSurface->getRootItem()->setProperty("eventBridge", QVariant::fromValue(_webEntityAPIHelper)); _webSurface->getRootItem()->setProperty("url", _sourceUrl); _webSurface->getRootContext()->setContextProperty("desktop", QVariant()); - _webSurface->getRootContext()->setContextProperty("webEntity", &_webEntityAPIHelper); + _webSurface->getRootContext()->setContextProperty("webEntity", _webEntityAPIHelper); _connection = QObject::connect(_webSurface, &OffscreenQmlSurface::textureUpdated, [&](GLuint textureId) { _texture = textureId; }); @@ -402,7 +404,7 @@ void RenderableWebEntityItem::synthesizeKeyPress(QString key) { } void RenderableWebEntityItem::emitScriptEvent(const QVariant& message) { - _webEntityAPIHelper.emitScriptEvent(message); + _webEntityAPIHelper->emitScriptEvent(message); } void RenderableWebEntityItem::setKeyboardRaised(bool raised) { diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.h b/libraries/entities-renderer/src/RenderableWebEntityItem.h index 5e06440bcb..ec14d2d662 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.h +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.h @@ -86,7 +86,7 @@ private: QTouchEvent _lastTouchEvent { QEvent::TouchUpdate }; uint64_t _lastRenderTime{ 0 }; QTouchDevice _touchDevice; - WebEntityAPIHelper _webEntityAPIHelper; + WebEntityAPIHelper* _webEntityAPIHelper; QMetaObject::Connection _mousePressConnection; QMetaObject::Connection _mouseReleaseConnection;