Просмотр исходного кода

util: Add URL Request Interceptor for QWebEngine

Morph 5 лет назад
Родитель
Сommit
5836786246
3 измененных файлов с 64 добавлено и 0 удалено
  1. 2 0
      src/yuzu/CMakeLists.txt
  2. 32 0
      src/yuzu/util/url_request_interceptor.cpp
  3. 30 0
      src/yuzu/util/url_request_interceptor.h

+ 2 - 0
src/yuzu/CMakeLists.txt

@@ -141,6 +141,8 @@ add_executable(yuzu
     util/limitable_input_dialog.h
     util/limitable_input_dialog.h
     util/sequence_dialog/sequence_dialog.cpp
     util/sequence_dialog/sequence_dialog.cpp
     util/sequence_dialog/sequence_dialog.h
     util/sequence_dialog/sequence_dialog.h
+    util/url_request_interceptor.cpp
+    util/url_request_interceptor.h
     util/util.cpp
     util/util.cpp
     util/util.h
     util/util.h
     compatdb.cpp
     compatdb.cpp

+ 32 - 0
src/yuzu/util/url_request_interceptor.cpp

@@ -0,0 +1,32 @@
+// Copyright 2020 yuzu Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#ifdef YUZU_USE_QT_WEB_ENGINE
+
+#include "yuzu/util/url_request_interceptor.h"
+
+UrlRequestInterceptor::UrlRequestInterceptor(QObject* p) : QWebEngineUrlRequestInterceptor(p) {}
+
+UrlRequestInterceptor::~UrlRequestInterceptor() = default;
+
+void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo& info) {
+    const auto resource_type = info.resourceType();
+
+    switch (resource_type) {
+    case QWebEngineUrlRequestInfo::ResourceTypeMainFrame:
+        requested_url = info.requestUrl();
+        emit FrameChanged();
+        break;
+    case QWebEngineUrlRequestInfo::ResourceTypeSubFrame:
+    case QWebEngineUrlRequestInfo::ResourceTypeXhr:
+        emit FrameChanged();
+        break;
+    }
+}
+
+QUrl UrlRequestInterceptor::GetRequestedURL() const {
+    return requested_url;
+}
+
+#endif

+ 30 - 0
src/yuzu/util/url_request_interceptor.h

@@ -0,0 +1,30 @@
+// Copyright 2020 yuzu Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#ifdef YUZU_USE_QT_WEB_ENGINE
+
+#include <QObject>
+#include <QWebEngineUrlRequestInterceptor>
+
+class UrlRequestInterceptor : public QWebEngineUrlRequestInterceptor {
+    Q_OBJECT
+
+public:
+    explicit UrlRequestInterceptor(QObject* p = nullptr);
+    ~UrlRequestInterceptor() override;
+
+    void interceptRequest(QWebEngineUrlRequestInfo& info) override;
+
+    QUrl GetRequestedURL() const;
+
+signals:
+    void FrameChanged();
+
+private:
+    QUrl requested_url;
+};
+
+#endif