From 9d0667cb3150a99e636cc5706f9dc9cca434c8a4 Mon Sep 17 00:00:00 2001 From: kunalgosar Date: Fri, 17 Mar 2017 15:22:36 -0700 Subject: [PATCH] add url tag to web entities --- interface/resources/qml/controls/WebEntityView.qml | 2 ++ interface/resources/qml/controls/WebView.qml | 5 ++++- interface/src/Application.cpp | 5 ++++- interface/src/networking/FileTypeRequestInterceptor.cpp | 5 ++--- interface/src/networking/HFWebEngineRequestInterceptor.cpp | 3 +-- interface/src/networking/RequestFilters.cpp | 6 +++--- interface/src/networking/RequestFilters.h | 4 ++-- 7 files changed, 18 insertions(+), 12 deletions(-) diff --git a/interface/resources/qml/controls/WebEntityView.qml b/interface/resources/qml/controls/WebEntityView.qml index 961ebffb38..821954bf7b 100644 --- a/interface/resources/qml/controls/WebEntityView.qml +++ b/interface/resources/qml/controls/WebEntityView.qml @@ -17,4 +17,6 @@ WebView { id: webviewProfile storageName: "qmlWebEngine" } + + urlTag: "?noDowload=true"; } diff --git a/interface/resources/qml/controls/WebView.qml b/interface/resources/qml/controls/WebView.qml index 8c73eddcc2..dc62721ace 100644 --- a/interface/resources/qml/controls/WebView.qml +++ b/interface/resources/qml/controls/WebView.qml @@ -10,6 +10,7 @@ Item { property alias eventBridge: eventBridgeWrapper.eventBridge property alias canGoBack: root.canGoBack; property var goBack: root.goBack; + property alias urlTag: root.urlTag property bool keyboardEnabled: true // FIXME - Keyboard HMD only: Default to false property bool keyboardRaised: false property bool punctuationMode: false @@ -68,6 +69,8 @@ Item { injectionPoint: WebEngineScript.DocumentReady // DOM ready but page load may not be finished. worldId: WebEngineScript.MainWorld } + + property string urlTag: "?noDowload=false"; userScripts: [ createGlobalEventBridge, raiseAndLowerKeyboard, userScript ] @@ -95,7 +98,7 @@ Item { // Required to support clicking on "hifi://" links if (WebEngineView.LoadStartedStatus == loadRequest.status) { - var url = loadRequest.url.toString(); + var url = loadRequest.url.toString() + urlTag; if (urlHandler.canHandleUrl(url)) { if (urlHandler.handleUrl(url)) { root.stop(); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index aa33b66962..eee9253c76 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -219,6 +219,7 @@ static const QString FST_EXTENSION = ".fst"; static const QString FBX_EXTENSION = ".fbx"; static const QString OBJ_EXTENSION = ".obj"; static const QString AVA_JSON_EXTENSION = ".ava.json"; +static const QString WEB_VIEW_TAG = "?noDowload=true"; static const float MIRROR_FULLSCREEN_DISTANCE = 0.389f; @@ -2607,7 +2608,7 @@ bool Application::event(QEvent* event) { QFileOpenEvent* fileEvent = static_cast(event); QUrl url = fileEvent->url(); - + if (!url.isEmpty()) { QString urlString = url.toString(); @@ -5549,6 +5550,8 @@ bool Application::canAcceptURL(const QString& urlString) const { QUrl url(urlString); if (urlString.startsWith(HIFI_URL_SCHEME)) { return true; + } else if (urlString.endsWith(WEB_VIEW_TAG)) { + return false; } QHashIterator i(_acceptedExtensions); QString lowerPath = url.path().toLower(); diff --git a/interface/src/networking/FileTypeRequestInterceptor.cpp b/interface/src/networking/FileTypeRequestInterceptor.cpp index 2dac5db194..91bacd46a6 100644 --- a/interface/src/networking/FileTypeRequestInterceptor.cpp +++ b/interface/src/networking/FileTypeRequestInterceptor.cpp @@ -16,7 +16,6 @@ #include "RequestFilters.h" void FileTypeRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo& info) { - RequestFilters* filter = new RequestFilters; - filter->interceptHFWebEngineRequest(info); - filter->interceptFileType(info); + RequestFilters::interceptHFWebEngineRequest(info); + RequestFilters::interceptFileType(info); } diff --git a/interface/src/networking/HFWebEngineRequestInterceptor.cpp b/interface/src/networking/HFWebEngineRequestInterceptor.cpp index 400d547d92..546edcf95c 100644 --- a/interface/src/networking/HFWebEngineRequestInterceptor.cpp +++ b/interface/src/networking/HFWebEngineRequestInterceptor.cpp @@ -18,6 +18,5 @@ #include "RequestFilters.h" void HFWebEngineRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo& info) { - RequestFilters* filter = new RequestFilters; - filter->interceptHFWebEngineRequest(info); + RequestFilters::interceptHFWebEngineRequest(info); } diff --git a/interface/src/networking/RequestFilters.cpp b/interface/src/networking/RequestFilters.cpp index 0f59258b66..39ed5117ac 100644 --- a/interface/src/networking/RequestFilters.cpp +++ b/interface/src/networking/RequestFilters.cpp @@ -15,7 +15,7 @@ #include -bool isAuthableHighFidelityURL(const QUrl& url) { +bool static isAuthableHighFidelityURL(const QUrl& url) { static const QStringList HF_HOSTS = { "highfidelity.com", "highfidelity.io", "metaverse.highfidelity.com", "metaverse.highfidelity.io" @@ -24,11 +24,11 @@ bool isAuthableHighFidelityURL(const QUrl& url) { return url.scheme() == "https" && HF_HOSTS.contains(url.host()); } -bool isJavaScriptFile(const QString filename) { +bool static isJavaScriptFile(const QString filename) { return filename.contains(".js", Qt::CaseInsensitive); } -bool isEntityFile(const QString filename) { +bool static isEntityFile(const QString filename) { return filename.contains(".svo.json", Qt::CaseInsensitive); } diff --git a/interface/src/networking/RequestFilters.h b/interface/src/networking/RequestFilters.h index d61208a22d..0d7d66e155 100644 --- a/interface/src/networking/RequestFilters.h +++ b/interface/src/networking/RequestFilters.h @@ -21,8 +21,8 @@ class RequestFilters : public QObject { Q_OBJECT public: - void interceptHFWebEngineRequest(QWebEngineUrlRequestInfo& info); - void interceptFileType(QWebEngineUrlRequestInfo& info); + static void interceptHFWebEngineRequest(QWebEngineUrlRequestInfo& info); + static void interceptFileType(QWebEngineUrlRequestInfo& info); }; #endif // hifi_RequestFilters_h