2 * Copyright 2024 Soren Stoutner <soren@stoutner.com>.
4 * This file is part of Privacy Browser PC <https://www.stoutner.com/privacy-browser-pc/>.
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.
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.
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/>.
20 #ifndef FILTERLISTHELPER_H
21 #define FILTERLISTHELPER_H
23 // Application headers.
24 #include "structs/FilterListStruct.h"
25 #include "structs/RequestStruct.h"
26 #include "structs/UrlStruct.h"
28 // Qt framework headers.
30 #include <QWebEngineUrlRequestInfo>
32 class FilterListHelper
35 // The default constructor.
38 // The public static disposition constant integers.
39 static const int DEFAULT = 0;
40 static const int ALLOWED = 1;
41 static const int BLOCKED = 2;
43 // The public static sublist constant integers.
44 static const int MAIN_ALLOWLIST = 0;
45 static const int MAIN_BLOCKLIST = 1;
46 static const int INITIAL_DOMAIN_BLOCKLIST = 2;
47 static const int REGULAR_EXPRESSION_BLOCKLIST = 3;
49 // The public variables.
50 FilterListStruct *easyListStructPointer;
51 FilterListStruct *easyPrivacyStructPointer;
52 FilterListStruct *fanboyAnnoyanceStructPointer;
53 FilterListStruct *ultraListStructPointer;
54 FilterListStruct *ultraPrivacyStructPointer;
56 // The public functions.
57 bool checkFilterLists(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer) const;
58 QString getDispositionString(int dispositionInt) const;
59 QString getNavigationTypeString(int navigationTypeInt) const;
60 QString getRequestOptionDispositionString(const FilterOptionEnum::Disposition filterOptionDisposition) const;
61 QString getResourceTypeString(int resourceTypeInt) const;
62 QString getSublistName(int sublistInt) const;
65 // The private translated disposition strings.
66 QString DEFAULT_STRING;
67 QString ALLOWED_STRING;
68 QString BLOCKED_STRING;
70 // The private translated filter option dispositions.
71 QString FILTER_OPTION_NULL;
72 QString FILTER_OPTION_APPLY;
73 QString FILTER_OPTION_OVERRIDE;
75 // The private translated navigation type strings.
76 QString NAVIGATION_TYPE_LINK;
77 QString NAVIGATION_TYPE_TYPED;
78 QString NAVIGATION_TYPE_FORM_SUBMITTED;
79 QString NAVIGATION_TYPE_BACK_FORWARD;
80 QString NAVIGATION_TYPE_RELOAD;
81 QString NAVIGATION_TYPE_REDIRECT;
82 QString NAVIGATION_TYPE_OTHER;
84 // The private translated resource type strings.
85 QString RESOURCE_TYPE_MAIN_FRAME;
86 QString RESOURCE_TYPE_SUB_FRAME;
87 QString RESOURCE_TYPE_STYLESHEET;
88 QString RESOURCE_TYPE_SCRIPT;
89 QString RESOURCE_TYPE_IMAGE;
90 QString RESOURCE_TYPE_FONT_RESOURCE;
91 QString RESOURCE_TYPE_SUB_RESOURCE;
92 QString RESOURCE_TYPE_OBJECT;
93 QString RESOURCE_TYPE_MEDIA;
94 QString RESOURCE_TYPE_WORKER;
95 QString RESOURCE_TYPE_SHARED_WORKER;
96 QString RESOURCE_TYPE_PREFETCH;
97 QString RESOURCE_TYPE_FAVICON;
98 QString RESOURCE_TYPE_XHR;
99 QString RESOURCE_TYPE_PING;
100 QString RESOURCE_TYPE_SERVICE_WORKER;
101 QString RESOURCE_TYPE_CSP_REPORT;
102 QString RESOURCE_TYPE_PLUGIN_RESOURCE;
103 QString RESOURCE_TYPE_NAVIGATION_PRELOAD_MAIN_FRAME;
104 QString RESOURCE_TYPE_NAVIGATION_PRELOAD_SUB_FRAME;
105 QString RESOURCE_TYPE_UNKNOWN;
107 // The private translated sublist strings.
108 QString MAIN_ALLOWLIST_STRING;
109 QString MAIN_BLOCKLIST_STRING;
110 QString INITIAL_DOMAIN_BLOCKLIST_STRING;
111 QString REGULAR_EXPRESSION_BLOCKLIST_STRING;
113 // The private functions.
114 bool blockRequest(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt, EntryStruct *entryStructPointer) const;
115 bool checkAppliedEntry(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
116 EntryStruct *entryStructPointer, QString &urlString, QString &urlStringWithSeparators) const;
117 bool checkDomain(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
118 EntryStruct *entryStructPointer) const;
119 bool checkIndividualList(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, FilterListStruct *filterListStructPointer) const;
120 bool checkRegularExpression(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
121 EntryStruct *entryStructPointer) const;
122 bool checkRequestOptions(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
123 EntryStruct *entryStructPointer) const;
124 bool checkThirdParty(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const bool isThirdPartyRequest, const QString &filterListTitle, const int sublistInt,
125 EntryStruct *entryStructPointer) const;
126 FilterListStruct* populateFilterList(const QString &filterListFileName) const;
127 void populateRequestStruct(RequestStruct *requestStructPointer, const int disposition, const QString &filterListTitle, const int sublistInt, EntryStruct *entryStructPointer) const;
128 void prepareFilterListString(QString &filterListString, EntryStruct *entryStructPointer) const;