]> gitweb.stoutner.com Git - PrivacyBrowserPC.git/blob - src/interceptors/UrlRequestInterceptor.cpp
Add a default folder icon to the edit folder dialog. https://redmine.stoutner.com...
[PrivacyBrowserPC.git] / src / interceptors / UrlRequestInterceptor.cpp
1 /*
2  * Copyright 2022-2023 Soren Stoutner <soren@stoutner.com>.
3  *
4  * This file is part of Privacy Browser PC <https://www.stoutner.com/privacy-browser-pc>.
5  *
6  * Privacy Browser PC is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * Privacy Browser PC is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Privacy Browser PC.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 // Application headers.
21 #include "UrlRequestInterceptor.h"
22
23 // KDE Framework headers.
24 #include <KLocalizedString>
25
26 // Construct the class.
27 UrlRequestInterceptor::UrlRequestInterceptor(QObject *parentObjectPointer) : QWebEngineUrlRequestInterceptor(parentObjectPointer) {}
28
29 void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &urlRequestInfo)
30 {
31     // Handle the request according to the resource type.
32     switch (urlRequestInfo.resourceType())
33     {
34         // A naughty HTTP ping request.
35         case QWebEngineUrlRequestInfo::ResourceTypePing:
36         {
37             // Block the HTTP ping request.
38             urlRequestInfo.block(true);
39
40             // Display the HTTP Ping blocked dialog.
41             emit displayHttpPingDialog(urlRequestInfo.requestUrl().toString());
42
43             break;
44         }
45
46         default:
47         {
48             // Do nothing.
49             break;
50         }
51     }
52
53     // Handle the request according to the navigation type.
54     switch (urlRequestInfo.navigationType())
55     {
56         case QWebEngineUrlRequestInfo::NavigationTypeLink:
57         case QWebEngineUrlRequestInfo::NavigationTypeTyped:
58         case QWebEngineUrlRequestInfo::NavigationTypeBackForward:
59         // case QWebEngineUrlRequestInfo::NavigationTypeReload:  This can be uncommented once https://redmine.stoutner.com/issues/821 has been fixed.
60         case QWebEngineUrlRequestInfo::NavigationTypeRedirect:
61         {
62             // Only check the hosts if the main URL is changing.
63             if (urlRequestInfo.resourceType() == QWebEngineUrlRequestInfo::ResourceTypeMainFrame)
64             {
65                 // Get the hosts.
66                 QString requestingHost = urlRequestInfo.initiator().host();
67                 QString requestedHost = urlRequestInfo.requestUrl().host();
68
69                 // Reapply the domain settings if the host is changing.
70                 if (requestingHost != requestedHost)
71                     emit applyDomainSettings(requestedHost);
72             }
73
74             break;
75         }
76
77         default:
78             // Do nothing.
79             break;
80     }
81 }