]> gitweb.stoutner.com Git - PrivacyBrowserPC.git/commitdiff
Flesh out request detail dialog.
authorSoren Stoutner <soren@stoutner.com>
Fri, 5 Jul 2024 16:18:53 +0000 (09:18 -0700)
committerSoren Stoutner <soren@stoutner.com>
Fri, 5 Jul 2024 16:18:53 +0000 (09:18 -0700)
13 files changed:
src/dialogs/FilterEntryDialog.cpp
src/dialogs/RequestDetailDialog.cpp
src/dialogs/RequestDetailDialog.h
src/dialogs/RequestsDialog.cpp
src/enums/FilterOptionEnum.h [deleted file]
src/helpers/FilterListHelper.cpp
src/helpers/FilterListHelper.h
src/interceptors/UrlRequestInterceptor.cpp
src/structs/EntryStruct.h
src/structs/RequestStruct.h
src/structs/UrlStruct.h [deleted file]
src/uis/FilterEntryDialog.ui
src/uis/RequestDetailDialog.ui

index 703ca0417daa2f41300aa4894c73cba365c81061..d565d405d5a9633d376328f4622f355a636ca0cc 100644 (file)
@@ -45,11 +45,11 @@ FilterEntryDialog::FilterEntryDialog(QWidget *parentWidgetPointer, QTableWidget
     QLineEdit *filterListLineEditPointer = filterEntryDialogUi.filterListLineEdit;
     QLineEdit *sublistLineEditPointer = filterEntryDialogUi.sublistListLineEdit;
     appliedEntryListLineEditPointer = filterEntryDialogUi.appliedEntryListLineEdit;
+    domainLineEditPointer = filterEntryDialogUi.domainLineEdit;
+    thirdPartyLineEditPointer = filterEntryDialogUi.thirdPartyLineEdit;
     initialMatchLineEditPointer = filterEntryDialogUi.initialMatchLineEdit;
     finalMatchLineEditPointer = filterEntryDialogUi.finalMatchLineEdit;
-    domainLineEditPointer = filterEntryDialogUi.domainLineEdit;
     domainListLineEditPointer = filterEntryDialogUi.domainListLineEdit;
-    thirdPartyLineEditPointer = filterEntryDialogUi.thirdPartyLineEdit;
     hasRequestOptionsCheckBoxPointer = filterEntryDialogUi.hasRequestOptionsCheckBox;
     fontLineEditPointer = filterEntryDialogUi.fontLineEdit;
     imageLineEditPointer = filterEntryDialogUi.imageLineEdit;
@@ -89,8 +89,11 @@ FilterEntryDialog::FilterEntryDialog(QWidget *parentWidgetPointer, QTableWidget
     KColorScheme::adjustBackground(negativeBackgroundPalette, KColorScheme::NegativeBackground);
     KColorScheme::adjustBackground(positiveBackgroundPalette, KColorScheme::PositiveBackground);
 
-    // Set the sublist background palette.  TODO  Add logic for allow lists.
-    sublistLineEditPointer->setPalette(negativeBackgroundPalette);
+    // Set the sublist background palette.
+    if (sublistLineEditPointer->text().contains(QLatin1String("Allow")))
+        sublistLineEditPointer->setPalette(positiveBackgroundPalette);
+    else
+        sublistLineEditPointer->setPalette(negativeBackgroundPalette);
 
     // Set the applied entry background palette to be the same as the sublist.
     appliedEntryListLineEditPointer->setPalette(sublistLineEditPointer->palette());
@@ -148,14 +151,17 @@ void FilterEntryDialog::populateDialog(const int row)
     originalFilterOptionsLineEditPointer->setText(tableWidgetPointer->item(row, 19)->text());
     originalEntryLineEditPointer->setText(tableWidgetPointer->item(row, 20)->text());
 
+    // Make a local copy of the has request options boolean.
+    bool hasRequestOptions = tableWidgetPointer->item(row, 6)->text() == i18n("Yes");
+
     // Populate the check boxes.
-    hasRequestOptionsCheckBoxPointer->setChecked(tableWidgetPointer->item(row, 6)->text() == i18n("Yes"));
+    hasRequestOptionsCheckBoxPointer->setChecked(hasRequestOptions);
 
     // Set the initial and final match background palettes.
     setInitialAndFinalMatchBackgroundPalette(initialMatchLineEditPointer);
     setInitialAndFinalMatchBackgroundPalette(finalMatchLineEditPointer);
 
-    // Set the request option background palettes and status.
+    // Set the request option background palettes.
     setFilterOptionBackgroundPalette(domainLineEditPointer);
     setFilterOptionBackgroundPalette(thirdPartyLineEditPointer);
     setFilterOptionBackgroundPalette(fontLineEditPointer);
@@ -171,17 +177,17 @@ void FilterEntryDialog::populateDialog(const int row)
     setFilterOptionBackgroundPalette(xmlHttpRequestLineEditPointer);
 
     // Set the request option status.
-    fontLineEditPointer->setEnabled(hasRequestOptionsCheckBoxPointer->isChecked());
-    imageLineEditPointer->setEnabled(hasRequestOptionsCheckBoxPointer->isChecked());
-    mainFrameLineEditPointer->setEnabled(hasRequestOptionsCheckBoxPointer->isChecked());
-    mediaLineEditPointer->setEnabled(hasRequestOptionsCheckBoxPointer->isChecked());
-    objectLineEditPointer->setEnabled(hasRequestOptionsCheckBoxPointer->isChecked());
-    otherLineEditPointer->setEnabled(hasRequestOptionsCheckBoxPointer->isChecked());
-    pingLineEditPointer->setEnabled(hasRequestOptionsCheckBoxPointer->isChecked());
-    scriptLineEditPointer->setEnabled(hasRequestOptionsCheckBoxPointer->isChecked());
-    styleSheetLineEditPointer->setEnabled(hasRequestOptionsCheckBoxPointer->isChecked());
-    subFrameLineEditPointer->setEnabled(hasRequestOptionsCheckBoxPointer->isChecked());
-    xmlHttpRequestLineEditPointer->setEnabled(hasRequestOptionsCheckBoxPointer->isChecked());
+    fontLineEditPointer->setEnabled(hasRequestOptions);
+    imageLineEditPointer->setEnabled(hasRequestOptions);
+    mainFrameLineEditPointer->setEnabled(hasRequestOptions);
+    mediaLineEditPointer->setEnabled(hasRequestOptions);
+    objectLineEditPointer->setEnabled(hasRequestOptions);
+    otherLineEditPointer->setEnabled(hasRequestOptions);
+    pingLineEditPointer->setEnabled(hasRequestOptions);
+    scriptLineEditPointer->setEnabled(hasRequestOptions);
+    styleSheetLineEditPointer->setEnabled(hasRequestOptions);
+    subFrameLineEditPointer->setEnabled(hasRequestOptions);
+    xmlHttpRequestLineEditPointer->setEnabled(hasRequestOptions);
 
     // Set the domain list line edit to have the same palette as the domain line edit.
     domainListLineEditPointer->setPalette(domainLineEditPointer->palette());
@@ -212,12 +218,12 @@ void FilterEntryDialog::next()
 void FilterEntryDialog::setFilterOptionBackgroundPalette(QLineEdit *lineEditPointer)
 {
     // Set the background palette according to the text.
-    if (lineEditPointer->text() == globalFilterListHelperPointer->getRequestOptionDispositionString(FilterOptionEnum::Disposition::Null))  // Not text is displayed.
+    if (lineEditPointer->text() == globalFilterListHelperPointer->getRequestOptionDispositionString(FilterOptionDisposition::Null))  // Not text is displayed.
     {
         // Set the normal background palette.
         lineEditPointer->setPalette(normalBackgroundPalette);
     }
-    else if (lineEditPointer->text() == globalFilterListHelperPointer->getRequestOptionDispositionString(FilterOptionEnum::Disposition::Apply))  // `Apply` is displayed.
+    else if (lineEditPointer->text() == globalFilterListHelperPointer->getRequestOptionDispositionString(FilterOptionDisposition::Apply))  // `Apply` is displayed.
     {
         // Set the negative (red) background palette.
         lineEditPointer->setPalette(negativeBackgroundPalette);
index 78e2f00dc606a93d688f629eb539e5d6d0d0fec7..28547e182c5c98866b96a882999bd8f3038adbbd 100644 (file)
@@ -21,7 +21,6 @@
 #include "RequestDetailDialog.h"
 #include "GlobalVariables.h"
 #include "ui_RequestDetailDialog.h"
-#include "structs/RequestStruct.h"
 
 // KDE Frameworks headers.
 #include <KActionCollection>
@@ -45,24 +44,47 @@ RequestDetailDialog::RequestDetailDialog(QWidget *parentWidgetPointer, QTableWid
 
     // Get handles for the views.
     dispositionLineEditPointer = requestDetailDialogUi.dispositionLineEdit;
-    urlLineEditPointer = requestDetailDialogUi.urlLineEdit;
+    webPageUrlLineEditPointer = requestDetailDialogUi.webPageUrlLineEdit;
+    requestUrlLineEditPointer = requestDetailDialogUi.requestUrlLineEdit;
+    requestUrlWithSeparatorsLineEditPointer = requestDetailDialogUi.requestUrlWithSeparatorsLineEdit;
+    truncatedRequestUrlLineEditPointer = requestDetailDialogUi.truncatedRequestUrlLineEdit;
+    truncatedRequestUrlWithSeparatorsLineEditPointer = requestDetailDialogUi.truncatedRequestUrlWithSeparatorsLineEdit;
     requestMethodLineEditPointer = requestDetailDialogUi.requestMethodLineEdit;
     navigationTypeLineEditPointer = requestDetailDialogUi.navigationTypeLineEdit;
+    thirdPartyRequestLineEditPointer = requestDetailDialogUi.thirdPartyRequestLineEdit;
     resourceTypeLineEditPointer = requestDetailDialogUi.resourceTypeLineEdit;
-    horizontalLinePointer = requestDetailDialogUi.horizontalLine;
-    filterListLabelPointer = requestDetailDialogUi.filterListLabel;
+    filterListEntryWidget = requestDetailDialogUi.filterListEntryWidget;
     filterListLineEditPointer = requestDetailDialogUi.filterListLineEdit;
-    sublistLabelPointer = requestDetailDialogUi.sublistLabel;
     sublistLineEditPointer = requestDetailDialogUi.sublistListLineEdit;
-    appliedEntryListLabelPointer = requestDetailDialogUi.appliedEntryListLabel;
     appliedEntryListLineEditPointer = requestDetailDialogUi.appliedEntryListLineEdit;
-    originalEntryLabelPointer = requestDetailDialogUi.originalEntryLabel;
+    domainLineEditPointer = requestDetailDialogUi.domainLineEdit;
+    thirdPartyFilterLineEditPointer = requestDetailDialogUi.thirdPartyFilterLineEdit;
+    initialMatchLineEditPointer = requestDetailDialogUi.initialMatchLineEdit;
+    finalMatchLineEditPointer = requestDetailDialogUi.finalMatchLineEdit;
+    domainListLineEditPointer = requestDetailDialogUi.domainListLineEdit;
+    hasRequestOptionsCheckBoxPointer = requestDetailDialogUi.hasRequestOptionsCheckBox;
+    fontLineEditPointer = requestDetailDialogUi.fontLineEdit;
+    imageLineEditPointer = requestDetailDialogUi.imageLineEdit;
+    mainFrameLineEditPointer = requestDetailDialogUi.mainFrameLineEdit;
+    mediaLineEditPointer = requestDetailDialogUi.mediaLineEdit;
+    objectLineEditPointer = requestDetailDialogUi.objectLineEdit;
+    otherLineEditPointer = requestDetailDialogUi.otherLineEdit;
+    pingLineEditPointer = requestDetailDialogUi.pingLineEdit;
+    scriptLineEditPointer = requestDetailDialogUi.scriptLineEdit;
+    styleSheetLineEditPointer = requestDetailDialogUi.styleSheetLineEdit;
+    subFrameLineEditPointer = requestDetailDialogUi.subFrameLineEdit;
+    xmlHttpRequestLineEditPointer = requestDetailDialogUi.xmlHttpRequestLineEdit;
+    appliedFilterOptionsLineEditPointer = requestDetailDialogUi.appliedFilterOptionsLineEdit;
+    originalFilterOptionsLineEditPointer = requestDetailDialogUi.originalFilterOptionsLineEdit;
     originalEntryLineEditPointer = requestDetailDialogUi.originalEntryLineEdit;
     previousButtonPointer = requestDetailDialogUi.previousButton;
     nextButtonPointer = requestDetailDialogUi.nextButton;
     QDialogButtonBox *dialogButtonBoxPointer = requestDetailDialogUi.dialogButtonBox;
     QPushButton *closeButtonPointer = dialogButtonBoxPointer->button(QDialogButtonBox::StandardButton::Close);
 
+    // Disable changing the checkbox checked status.
+    hasRequestOptionsCheckBoxPointer->setAttribute(Qt::WA_TransparentForMouseEvents);
+
     // Make the close button the default.
     closeButtonPointer->setDefault(true);
 
@@ -123,30 +145,135 @@ void RequestDetailDialog::populateDialog(const int row)
 
     // Populate the new request struct.
     requestStructDataStreamReader >> requestStructPointer->dispositionInt;
-    requestStructDataStreamReader >> requestStructPointer->entryStruct.appliedEntryList;
     requestStructDataStreamReader >> requestStructPointer->entryStruct.originalEntry;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.originalFilterOptions;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.appliedEntryList;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.appliedFilterOptionsList;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.domainList;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.finalMatch;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.hasRequestOptions;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.initialMatch;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.domain;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.font;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.image;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.mainFrame;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.media;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.object;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.other;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.ping;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.script;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.styleSheet;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.subFrame;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.thirdParty;
+    requestStructDataStreamReader >> requestStructPointer->entryStruct.xmlHttpRequest;
     requestStructDataStreamReader >> requestStructPointer->filterListTitle;
+    requestStructDataStreamReader >> requestStructPointer->isThirdPartyRequest;
+    requestStructDataStreamReader >> requestStructPointer->matchedUrlType;
     requestStructDataStreamReader >> requestStructPointer->navigationTypeInt;
     requestStructDataStreamReader >> requestStructPointer->requestMethodString;
     requestStructDataStreamReader >> requestStructPointer->resourceTypeInt;
     requestStructDataStreamReader >> requestStructPointer->sublistInt;
+    requestStructDataStreamReader >> requestStructPointer->truncatedUrlString;
+    requestStructDataStreamReader >> requestStructPointer->truncatedUrlStringWithSeparators;
     requestStructDataStreamReader >> requestStructPointer->urlString;
+    requestStructDataStreamReader >> requestStructPointer->urlStringWithSeparators;
+    requestStructDataStreamReader >> requestStructPointer->webPageUrlString;
+
+    // Make a local copy of the has request options boolean.
+    bool hasRequestOptions = requestStructPointer->entryStruct.hasRequestOptions;
 
     // Populate the views.
     dispositionLineEditPointer->setText(globalFilterListHelperPointer->getDispositionString(requestStructPointer->dispositionInt));
-    urlLineEditPointer->setText(requestStructPointer->urlString);
+    webPageUrlLineEditPointer->setText(requestStructPointer->webPageUrlString);
+    requestUrlLineEditPointer->setText(requestStructPointer->urlString);
+    requestUrlWithSeparatorsLineEditPointer->setText(requestStructPointer->urlStringWithSeparators);
+    truncatedRequestUrlLineEditPointer->setText(requestStructPointer->truncatedUrlString);
+    truncatedRequestUrlWithSeparatorsLineEditPointer->setText(requestStructPointer->truncatedUrlStringWithSeparators);
     requestMethodLineEditPointer->setText(requestStructPointer->requestMethodString);
+    thirdPartyRequestLineEditPointer->setText(requestStructPointer->isThirdPartyRequest ? i18n("Yes") : QLatin1String());
     navigationTypeLineEditPointer->setText(globalFilterListHelperPointer->getNavigationTypeString(requestStructPointer->navigationTypeInt));
     resourceTypeLineEditPointer->setText(globalFilterListHelperPointer->getResourceTypeString(requestStructPointer->resourceTypeInt));
     filterListLineEditPointer->setText(requestStructPointer->filterListTitle);
     sublistLineEditPointer->setText(globalFilterListHelperPointer->getSublistName(requestStructPointer->sublistInt));
     appliedEntryListLineEditPointer->setText(requestStructPointer->entryStruct.appliedEntryList.join(QLatin1String(" * ")));
+    domainLineEditPointer->setText(globalFilterListHelperPointer->getRequestOptionDispositionString(requestStructPointer->entryStruct.domain));
+    thirdPartyFilterLineEditPointer->setText(globalFilterListHelperPointer->getRequestOptionDispositionString(requestStructPointer->entryStruct.thirdParty));
+    initialMatchLineEditPointer->setText(requestStructPointer->entryStruct.initialMatch ? i18n("Yes") : QLatin1String());
+    finalMatchLineEditPointer->setText(requestStructPointer->entryStruct.finalMatch ? i18n("Yes") : QLatin1String());
+    domainListLineEditPointer->setText(requestStructPointer->entryStruct.domainList.join(QLatin1String(" | ")));
+    hasRequestOptionsCheckBoxPointer->setChecked(hasRequestOptions);
+    fontLineEditPointer->setText(globalFilterListHelperPointer->getRequestOptionDispositionString(requestStructPointer->entryStruct.font));
+    imageLineEditPointer->setText(globalFilterListHelperPointer->getRequestOptionDispositionString(requestStructPointer->entryStruct.image));
+    mainFrameLineEditPointer->setText(globalFilterListHelperPointer->getRequestOptionDispositionString(requestStructPointer->entryStruct.mainFrame));
+    mediaLineEditPointer->setText(globalFilterListHelperPointer->getRequestOptionDispositionString(requestStructPointer->entryStruct.media));
+    objectLineEditPointer->setText(globalFilterListHelperPointer->getRequestOptionDispositionString(requestStructPointer->entryStruct.object));
+    otherLineEditPointer->setText(globalFilterListHelperPointer->getRequestOptionDispositionString(requestStructPointer->entryStruct.other));
+    pingLineEditPointer->setText(globalFilterListHelperPointer->getRequestOptionDispositionString(requestStructPointer->entryStruct.ping));
+    scriptLineEditPointer->setText(globalFilterListHelperPointer->getRequestOptionDispositionString(requestStructPointer->entryStruct.script));
+    styleSheetLineEditPointer->setText(globalFilterListHelperPointer->getRequestOptionDispositionString(requestStructPointer->entryStruct.styleSheet));
+    subFrameLineEditPointer->setText(globalFilterListHelperPointer->getRequestOptionDispositionString(requestStructPointer->entryStruct.subFrame));
+    xmlHttpRequestLineEditPointer->setText(globalFilterListHelperPointer->getRequestOptionDispositionString(requestStructPointer->entryStruct.xmlHttpRequest));
+    appliedFilterOptionsLineEditPointer->setText(requestStructPointer->entryStruct.appliedFilterOptionsList.join(QLatin1String(" , ")));
+    originalFilterOptionsLineEditPointer->setText(requestStructPointer->entryStruct.originalFilterOptions);
     originalEntryLineEditPointer->setText(requestStructPointer->entryStruct.originalEntry);
 
+    // Set the "Yes" background palettes.
+    setYesBackgroundPalette(thirdPartyRequestLineEditPointer);
+    setYesBackgroundPalette(initialMatchLineEditPointer);
+    setYesBackgroundPalette(finalMatchLineEditPointer);
+
+    // Set the request option background palettes.
+    setFilterOptionBackgroundPalette(domainLineEditPointer);
+    setFilterOptionBackgroundPalette(thirdPartyFilterLineEditPointer);
+    setFilterOptionBackgroundPalette(fontLineEditPointer);
+    setFilterOptionBackgroundPalette(imageLineEditPointer);
+    setFilterOptionBackgroundPalette(mainFrameLineEditPointer);
+    setFilterOptionBackgroundPalette(mediaLineEditPointer);
+    setFilterOptionBackgroundPalette(objectLineEditPointer);
+    setFilterOptionBackgroundPalette(otherLineEditPointer);
+    setFilterOptionBackgroundPalette(pingLineEditPointer);
+    setFilterOptionBackgroundPalette(scriptLineEditPointer);
+    setFilterOptionBackgroundPalette(styleSheetLineEditPointer);
+    setFilterOptionBackgroundPalette(subFrameLineEditPointer);
+    setFilterOptionBackgroundPalette(xmlHttpRequestLineEditPointer);
+
+    // Set the request option status.
+    fontLineEditPointer->setEnabled(hasRequestOptions);
+    imageLineEditPointer->setEnabled(hasRequestOptions);
+    mainFrameLineEditPointer->setEnabled(hasRequestOptions);
+    mediaLineEditPointer->setEnabled(hasRequestOptions);
+    objectLineEditPointer->setEnabled(hasRequestOptions);
+    otherLineEditPointer->setEnabled(hasRequestOptions);
+    pingLineEditPointer->setEnabled(hasRequestOptions);
+    scriptLineEditPointer->setEnabled(hasRequestOptions);
+    styleSheetLineEditPointer->setEnabled(hasRequestOptions);
+    subFrameLineEditPointer->setEnabled(hasRequestOptions);
+    xmlHttpRequestLineEditPointer->setEnabled(hasRequestOptions);
+
+    // Set the domain list line edit to have the same palette as the domain line edit.
+    domainListLineEditPointer->setPalette(domainLineEditPointer->palette());
+
     // Set the button status.
     previousButtonPointer->setEnabled(previousEnabled);
     nextButtonPointer->setEnabled(nextEnabled);
 
+    // Set the sublist background palette.
+    switch (requestStructPointer->sublistInt)
+    {
+        case FilterListHelper::MAIN_ALLOWLIST:
+            sublistLineEditPointer->setPalette(positiveBackgroundPalette);
+            break;
+
+        case FilterListHelper::MAIN_BLOCKLIST:
+        case FilterListHelper::INITIAL_DOMAIN_BLOCKLIST:
+        case FilterListHelper::REGULAR_EXPRESSION_BLOCKLIST:
+            sublistLineEditPointer->setPalette(negativeBackgroundPalette);
+            break;
+    }
+
+    // Set the applied entry background palette to be the same as the sublist.
+    appliedEntryListLineEditPointer->setPalette(sublistLineEditPointer->palette());
+
     // Modify the interface based on the disposition.
     switch (requestStructPointer->dispositionInt)
     {
@@ -155,16 +282,14 @@ void RequestDetailDialog::populateDialog(const int row)
             // Reset the disposition line edit background.
             dispositionLineEditPointer->setPalette(normalBackgroundPalette);
 
-            // Hide the views.
-            horizontalLinePointer->hide();
-            filterListLabelPointer->hide();
-            filterListLineEditPointer->hide();
-            sublistLabelPointer->hide();
-            sublistLineEditPointer->hide();
-            appliedEntryListLabelPointer->hide();
-            appliedEntryListLineEditPointer->hide();
-            originalEntryLabelPointer->hide();
-            originalEntryLineEditPointer->hide();
+            // Reset the request URL palettes.
+            requestUrlLineEditPointer->setPalette(normalBackgroundPalette);
+            requestUrlWithSeparatorsLineEditPointer->setPalette(normalBackgroundPalette);
+            truncatedRequestUrlLineEditPointer->setPalette(normalBackgroundPalette);
+            truncatedRequestUrlWithSeparatorsLineEditPointer->setPalette(normalBackgroundPalette);
+
+            // Hide the filter list entry views.
+            filterListEntryWidget->hide();
 
             break;
         }
@@ -174,16 +299,11 @@ void RequestDetailDialog::populateDialog(const int row)
             // Colorize the disposition line edit background.
             dispositionLineEditPointer->setPalette(positiveBackgroundPalette);
 
-            // Show the views.
-            horizontalLinePointer->show();
-            filterListLabelPointer->show();
-            filterListLineEditPointer->show();
-            sublistLabelPointer->show();
-            sublistLineEditPointer->show();
-            appliedEntryListLabelPointer->show();
-            appliedEntryListLineEditPointer->show();
-            originalEntryLabelPointer->show();
-            originalEntryLineEditPointer->show();
+            // Colorize the request URLs.
+            setRequestUrlBackgroundPalettes(requestStructPointer->matchedUrlType);
+
+            // Show the filter list entry views.
+            filterListEntryWidget->show();
 
             break;
         }
@@ -193,16 +313,11 @@ void RequestDetailDialog::populateDialog(const int row)
             // Colorize the disposition line edit background.
             dispositionLineEditPointer->setPalette(negativeBackgroundPalette);
 
-            // Show the views.
-            horizontalLinePointer->show();
-            filterListLabelPointer->show();
-            filterListLineEditPointer->show();
-            sublistLabelPointer->show();
-            sublistLineEditPointer->show();
-            appliedEntryListLabelPointer->show();
-            appliedEntryListLineEditPointer->show();
-            originalEntryLabelPointer->show();
-            originalEntryLineEditPointer->show();
+            // Colorize the request URLs.
+            setRequestUrlBackgroundPalettes(requestStructPointer->matchedUrlType);
+
+            // Show the filter list entry views.
+            filterListEntryWidget->show();
 
             break;
         }
@@ -226,3 +341,97 @@ void RequestDetailDialog::next()
     // Populate the dialog.
     populateDialog(currentRow);
 }
+
+void RequestDetailDialog::setFilterOptionBackgroundPalette(QLineEdit *lineEditPointer)
+{
+    // Set the background palette according to the text.
+    if (lineEditPointer->text() == globalFilterListHelperPointer->getRequestOptionDispositionString(FilterOptionDisposition::Null))  // Not text is displayed.
+    {
+        // Set the normal background palette.
+        lineEditPointer->setPalette(normalBackgroundPalette);
+    }
+    else if (lineEditPointer->text() == globalFilterListHelperPointer->getRequestOptionDispositionString(FilterOptionDisposition::Apply))  // `Apply` is displayed.
+    {
+        // Set the negative (red) background palette.
+        lineEditPointer->setPalette(negativeBackgroundPalette);
+    }
+    else  // `Override` is displayed.
+    {
+        // Set the positive (green) background palette.
+        lineEditPointer->setPalette(positiveBackgroundPalette);
+    }
+}
+
+void RequestDetailDialog::setRequestUrlBackgroundPalettes(RequestUrlType matchedUrlType)
+{
+    // Colorize the request URL strings according to the matched URL.
+    switch (matchedUrlType)
+    {
+        case RequestUrlType::Url:  // URL.
+        {
+            // Set the request URL palette to match the disposition line edit.
+            requestUrlLineEditPointer->setPalette(dispositionLineEditPointer->palette());
+
+            // Reset the other palettes.
+            requestUrlWithSeparatorsLineEditPointer->setPalette(normalBackgroundPalette);
+            truncatedRequestUrlLineEditPointer->setPalette(normalBackgroundPalette);
+            truncatedRequestUrlWithSeparatorsLineEditPointer->setPalette(normalBackgroundPalette);
+
+            break;
+        }
+
+        case RequestUrlType::UrlWithSeparators:  // URL with separators.
+        {
+            // Set the request URL with separators palette to match the disposition line edit.
+            requestUrlWithSeparatorsLineEditPointer->setPalette(dispositionLineEditPointer->palette());
+
+            // Reset the other palettes.
+            requestUrlLineEditPointer->setPalette(normalBackgroundPalette);
+            truncatedRequestUrlLineEditPointer->setPalette(normalBackgroundPalette);
+            truncatedRequestUrlWithSeparatorsLineEditPointer->setPalette(normalBackgroundPalette);
+
+            break;
+        }
+
+        case RequestUrlType::TruncatedUrl:  // Truncated URL.
+        {
+            // Set the truncated request URL palette to match the disposition line edit.
+            truncatedRequestUrlLineEditPointer->setPalette(dispositionLineEditPointer->palette());
+
+            // Reset the other palettes.
+            requestUrlLineEditPointer->setPalette(normalBackgroundPalette);
+            requestUrlWithSeparatorsLineEditPointer->setPalette(normalBackgroundPalette);
+            truncatedRequestUrlWithSeparatorsLineEditPointer->setPalette(normalBackgroundPalette);
+
+            break;
+        }
+
+        case RequestUrlType::TruncatedUrlWithSeparators:  // Truncated URL with separators.
+        {
+            // Set the truncated request URL with separators palette to match the disposition line edit.
+            truncatedRequestUrlWithSeparatorsLineEditPointer->setPalette(dispositionLineEditPointer->palette());
+
+            // Reset the other palettes.
+            requestUrlLineEditPointer->setPalette(normalBackgroundPalette);
+            requestUrlWithSeparatorsLineEditPointer->setPalette(normalBackgroundPalette);
+            truncatedRequestUrlLineEditPointer->setPalette(normalBackgroundPalette);
+
+            break;
+        }
+    }
+}
+
+void RequestDetailDialog::setYesBackgroundPalette(QLineEdit *lineEditPointer)
+{
+    // Set the background palette according to the text.
+    if (lineEditPointer->text() == i18n("Yes"))  // `Yes` is displayed.
+    {
+        // Set the negative (red) background palette.
+        lineEditPointer->setPalette(negativeBackgroundPalette);
+    }
+    else  // No text is displayed.
+    {
+        // Set the normal background palette.
+        lineEditPointer->setPalette(normalBackgroundPalette);
+    }
+}
index 8fb21c4a3d9731499a1c7f4daa304aa52d186153..2d01aa64b44223a6e1a585b9fdf60ac5273b2244 100644 (file)
  * along with Privacy Browser PC.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef REQUESTDETAILDIALOG_H
-#define REQUESTDETAILDIALOG_H
+#ifndef REQUEST_DETAIL_DIALOG_H
+#define REQUEST_DETAIL_DIALOG_H
+
+// Application headers.
+#include "structs/RequestStruct.h"
 
 // Qt toolkit headers.
+#include <QCheckBox>
 #include <QDialog>
 #include <QLabel>
 #include <QTableWidget>
@@ -41,29 +45,52 @@ private Q_SLOTS:
 
 private:
     // The private variables.
-    QLabel *appliedEntryListLabelPointer;
     QLineEdit *appliedEntryListLineEditPointer;
+    QLineEdit *appliedFilterOptionsLineEditPointer;
     int currentRow;
     QLineEdit *dispositionLineEditPointer;
-    QLabel *filterListLabelPointer;
+    QLineEdit *domainLineEditPointer;
+    QLineEdit *domainListLineEditPointer;
+    QWidget *filterListEntryWidget;
     QLineEdit *filterListLineEditPointer;
-    QFrame *horizontalLinePointer;
+    QLineEdit *finalMatchLineEditPointer;
+    QLineEdit *fontLineEditPointer;
+    QCheckBox *hasRequestOptionsCheckBoxPointer;
+    QLineEdit *imageLineEditPointer;
+    QLineEdit *initialMatchLineEditPointer;
+    QLineEdit *mainFrameLineEditPointer;
+    QLineEdit *mediaLineEditPointer;
     QLineEdit *navigationTypeLineEditPointer;
     QPalette negativeBackgroundPalette;
     QPushButton *nextButtonPointer;
     QPalette normalBackgroundPalette;
-    QLabel *originalEntryLabelPointer;
+    QLineEdit *objectLineEditPointer;
     QLineEdit *originalEntryLineEditPointer;
-    QPushButton *previousButtonPointer;
+    QLineEdit *originalFilterOptionsLineEditPointer;
+    QLineEdit *otherLineEditPointer;
+    QLineEdit *pingLineEditPointer;
     QPalette positiveBackgroundPalette;
+    QPushButton *previousButtonPointer;
     QLineEdit *requestMethodLineEditPointer;
+    QLineEdit *requestUrlLineEditPointer;
+    QLineEdit *requestUrlWithSeparatorsLineEditPointer;
     QLineEdit *resourceTypeLineEditPointer;
-    QLabel *sublistLabelPointer;
+    QLineEdit *scriptLineEditPointer;
+    QLineEdit *styleSheetLineEditPointer;
+    QLineEdit *subFrameLineEditPointer;
     QLineEdit *sublistLineEditPointer;
     QTableWidget *tableWidgetPointer;
-    QLineEdit *urlLineEditPointer;
+    QLineEdit *truncatedRequestUrlLineEditPointer;
+    QLineEdit *truncatedRequestUrlWithSeparatorsLineEditPointer;
+    QLineEdit *thirdPartyFilterLineEditPointer;
+    QLineEdit *thirdPartyRequestLineEditPointer;
+    QLineEdit *webPageUrlLineEditPointer;
+    QLineEdit *xmlHttpRequestLineEditPointer;
 
     // The private functions.
     void populateDialog(const int row);
+    void setFilterOptionBackgroundPalette(QLineEdit *lineEditPointer);
+    void setRequestUrlBackgroundPalettes(RequestUrlType matchedUrlType);
+    void setYesBackgroundPalette(QLineEdit *lineEditPointer);
 };
 #endif
index 43e18097b6cf74268bc99681a5d012eb80333b2a..2ed1ba43036c097b2a3b35f6c7a53fec925676a8 100644 (file)
@@ -56,14 +56,14 @@ RequestsDialog::RequestsDialog(QWidget *parentWidgetPointer, QList<RequestStruct
     QTableWidgetItem *requestMethodHeaderItemPointer = new QTableWidgetItem(i18nc("Request method header", "Request Method"));
     QTableWidgetItem *navigationTypeHeaderItemPointer = new QTableWidgetItem(i18nc("Navigation type header", "Navigation Type"));
     QTableWidgetItem *resourceTypeHeaderItemPointer = new QTableWidgetItem(i18nc("Resource type header", "Resource Type"));
-    QTableWidgetItem *urlHeaderItemPointer = new QTableWidgetItem(i18nc("Request URL header", "URL"));
+    QTableWidgetItem *requestUrlHeaderItemPointer = new QTableWidgetItem(i18nc("Request URL header", "Request URL"));
 
     // Set the horizontal headers.
     tableWidgetPointer->setHorizontalHeaderItem(0, dispositionHeaderItemPointer);
     tableWidgetPointer->setHorizontalHeaderItem(1, requestMethodHeaderItemPointer);
     tableWidgetPointer->setHorizontalHeaderItem(2, navigationTypeHeaderItemPointer);
     tableWidgetPointer->setHorizontalHeaderItem(3, resourceTypeHeaderItemPointer);
-    tableWidgetPointer->setHorizontalHeaderItem(4, urlHeaderItemPointer);
+    tableWidgetPointer->setHorizontalHeaderItem(4, requestUrlHeaderItemPointer);
 
     // Create the palette.
     QPalette negativePalette = QPalette();
@@ -90,7 +90,7 @@ RequestsDialog::RequestsDialog(QWidget *parentWidgetPointer, QList<RequestStruct
         QTableWidgetItem *requestMethodItemPointer = new QTableWidgetItem(requestStructPointer->requestMethodString);
         QTableWidgetItem *navigationTypeItemPointer = new QTableWidgetItem(globalFilterListHelperPointer->getNavigationTypeString(requestStructPointer->navigationTypeInt));
         QTableWidgetItem *resourceTypeItemPointer = new QTableWidgetItem(globalFilterListHelperPointer->getResourceTypeString(requestStructPointer->resourceTypeInt));
-        QTableWidgetItem *urlItemPointer = new QTableWidgetItem(requestStructPointer->urlString);
+        QTableWidgetItem *requestUrlItemPointer = new QTableWidgetItem(requestStructPointer->urlString);
 
         // Create a request struct byte array.
         QByteArray *requestStructByteArrayPointer = new QByteArray();
@@ -100,14 +100,39 @@ RequestsDialog::RequestsDialog(QWidget *parentWidgetPointer, QList<RequestStruct
 
         // Populate the request struct data stream.
         requestStructDataStream << requestStructPointer->dispositionInt;
-        requestStructDataStream << requestStructPointer->entryStruct.appliedEntryList;
         requestStructDataStream << requestStructPointer->entryStruct.originalEntry;
+        requestStructDataStream << requestStructPointer->entryStruct.originalFilterOptions;
+        requestStructDataStream << requestStructPointer->entryStruct.appliedEntryList;
+        requestStructDataStream << requestStructPointer->entryStruct.appliedFilterOptionsList;
+        requestStructDataStream << requestStructPointer->entryStruct.domainList;
+        requestStructDataStream << requestStructPointer->entryStruct.finalMatch;
+        requestStructDataStream << requestStructPointer->entryStruct.hasRequestOptions;
+        requestStructDataStream << requestStructPointer->entryStruct.initialMatch;
+        requestStructDataStream << requestStructPointer->entryStruct.domain;
+        requestStructDataStream << requestStructPointer->entryStruct.font;
+        requestStructDataStream << requestStructPointer->entryStruct.image;
+        requestStructDataStream << requestStructPointer->entryStruct.mainFrame;
+        requestStructDataStream << requestStructPointer->entryStruct.media;
+        requestStructDataStream << requestStructPointer->entryStruct.object;
+        requestStructDataStream << requestStructPointer->entryStruct.other;
+        requestStructDataStream << requestStructPointer->entryStruct.ping;
+        requestStructDataStream << requestStructPointer->entryStruct.script;
+        requestStructDataStream << requestStructPointer->entryStruct.styleSheet;
+        requestStructDataStream << requestStructPointer->entryStruct.subFrame;
+        requestStructDataStream << requestStructPointer->entryStruct.thirdParty;
+        requestStructDataStream << requestStructPointer->entryStruct.xmlHttpRequest;
         requestStructDataStream << requestStructPointer->filterListTitle;
+        requestStructDataStream << requestStructPointer->isThirdPartyRequest;
+        requestStructDataStream << requestStructPointer->matchedUrlType;
         requestStructDataStream << requestStructPointer->navigationTypeInt;
         requestStructDataStream << requestStructPointer->requestMethodString;
         requestStructDataStream << requestStructPointer->resourceTypeInt;
         requestStructDataStream << requestStructPointer->sublistInt;
+        requestStructDataStream << requestStructPointer->truncatedUrlString;
+        requestStructDataStream << requestStructPointer->truncatedUrlStringWithSeparators;
         requestStructDataStream << requestStructPointer->urlString;
+        requestStructDataStream << requestStructPointer->urlStringWithSeparators;
+        requestStructDataStream << requestStructPointer->webPageUrlString;
 
         // Add the request struct to the disposition item.
         dispositionItemPointer->setData(Qt::UserRole, *requestStructByteArrayPointer);
@@ -120,7 +145,7 @@ RequestsDialog::RequestsDialog(QWidget *parentWidgetPointer, QList<RequestStruct
             requestMethodItemPointer->setBackground(negativeBackgroundBrush);
             navigationTypeItemPointer->setBackground(negativeBackgroundBrush);
             resourceTypeItemPointer->setBackground(negativeBackgroundBrush);
-            urlItemPointer->setBackground(negativeBackgroundBrush);
+            requestUrlItemPointer->setBackground(negativeBackgroundBrush);
         }
         else if (requestStructPointer->dispositionInt == FilterListHelper::ALLOWED)  // The request was allowed.
         {
@@ -129,7 +154,7 @@ RequestsDialog::RequestsDialog(QWidget *parentWidgetPointer, QList<RequestStruct
             requestMethodItemPointer->setBackground(positiveBackgroundBrush);
             navigationTypeItemPointer->setBackground(positiveBackgroundBrush);
             resourceTypeItemPointer->setBackground(positiveBackgroundBrush);
-            urlItemPointer->setBackground(positiveBackgroundBrush);
+            requestUrlItemPointer->setBackground(positiveBackgroundBrush);
         }
 
         // Add the entries to the table.
@@ -137,7 +162,7 @@ RequestsDialog::RequestsDialog(QWidget *parentWidgetPointer, QList<RequestStruct
         tableWidgetPointer->setItem(rowCounter, 1, requestMethodItemPointer);
         tableWidgetPointer->setItem(rowCounter, 2, navigationTypeItemPointer);
         tableWidgetPointer->setItem(rowCounter, 3, resourceTypeItemPointer);
-        tableWidgetPointer->setItem(rowCounter, 4, urlItemPointer);
+        tableWidgetPointer->setItem(rowCounter, 4, requestUrlItemPointer);
 
         // Increment the row counter.
         ++rowCounter;
diff --git a/src/enums/FilterOptionEnum.h b/src/enums/FilterOptionEnum.h
deleted file mode 100644 (file)
index 8c01510..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2024 Soren Stoutner <soren@stoutner.com>.
- *
- * This file is part of Privacy Browser PC <https://www.stoutner.com/privacy-browser-pc/>.
- *
- * Privacy Browser PC is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Privacy Browser PC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Privacy Browser PC.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef FILTEROPTIONENUM_H
-#define FILTEROPTIONENUM_H
-
-struct FilterOptionEnum
-{
-    enum Disposition
-    {
-        Null = 0,
-        Apply = 1,
-        Override = 2,
-    };
-};
-#endif
index e4ce25f529d3a2cbce839fa7fcac435b6eaaa055..69bc80ee4aedad3a39e27536677f3448f152a80b 100644 (file)
@@ -94,87 +94,85 @@ bool FilterListHelper::checkFilterLists(QWebEngineUrlRequestInfo &urlRequestInfo
     // Initiate a continue checking tracker.  If the tracker changes to false, all processing of the request will be stopped.
     bool continueChecking = true;
 
-    // Create a URL struct.
-    UrlStruct urlStruct;
-
     // Get the URLs.
     QUrl firstPartyUrl = urlRequestInfo.firstPartyUrl();
     QUrl requestUrl = urlRequestInfo.requestUrl();
 
     // Get the hosts.
     QString firstPartyHost = firstPartyUrl.host();
-    urlStruct.fqdn = requestUrl.host();
+    requestStructPointer->fqdn = requestUrl.host();
 
     // Determine if this is a third-party request.
-    urlStruct.isThirdPartyRequest = (firstPartyHost != urlStruct.fqdn);
+    requestStructPointer->isThirdPartyRequest = (firstPartyHost != requestStructPointer->fqdn);
 
     // Get the request URL string.
-    urlStruct.urlString = requestUrl.toString();
+    requestStructPointer->urlString = requestUrl.toString();
 
     // Create a URL string with separators.
-    urlStruct.urlStringWithSeparators = urlStruct.urlString;
+    requestStructPointer->urlStringWithSeparators = requestStructPointer->urlString;
 
     // Replace the separators characters with `^`.
-    urlStruct.urlStringWithSeparators.replace(QLatin1Char(':'), QLatin1Char('^'));
-    urlStruct.urlStringWithSeparators.replace(QLatin1Char('/'), QLatin1Char('^'));
-    urlStruct.urlStringWithSeparators.replace(QLatin1Char('?'), QLatin1Char('^'));
-    urlStruct.urlStringWithSeparators.replace(QLatin1Char('='), QLatin1Char('^'));
-    urlStruct.urlStringWithSeparators.replace(QLatin1Char('&'), QLatin1Char('^'));
+    requestStructPointer->urlStringWithSeparators.replace(QLatin1Char(':'), QLatin1Char('^'));
+    requestStructPointer->urlStringWithSeparators.replace(QLatin1Char('/'), QLatin1Char('^'));
+    requestStructPointer->urlStringWithSeparators.replace(QLatin1Char('?'), QLatin1Char('^'));
+    requestStructPointer->urlStringWithSeparators.replace(QLatin1Char('='), QLatin1Char('^'));
+    requestStructPointer->urlStringWithSeparators.replace(QLatin1Char('&'), QLatin1Char('^'));
 
     // Add a `^` to the end of the string it it doesn't already contain one.
-    if (!urlStruct.urlStringWithSeparators.endsWith(QLatin1Char('^')))
-        urlStruct.urlStringWithSeparators.append(QLatin1Char('^'));
+    if (!requestStructPointer->urlStringWithSeparators.endsWith(QLatin1Char('^')))
+        requestStructPointer->urlStringWithSeparators.append(QLatin1Char('^'));
 
     // Create truncated URL strings and initially populate it with the original URL strings.
-    urlStruct.truncatedUrlString = urlStruct.urlString;
-    urlStruct.truncatedUrlStringWithSeparators = urlStruct.urlStringWithSeparators;
+    requestStructPointer->truncatedUrlString = requestStructPointer->urlString;
+    requestStructPointer->truncatedUrlStringWithSeparators = requestStructPointer->urlStringWithSeparators;
 
     // Get the index of the beginning of the fully qualified domain name.
-    int fqdnIndex = urlStruct.truncatedUrlString.indexOf(QLatin1String("://")) + 3;
+    int fqdnIndex = requestStructPointer->truncatedUrlString.indexOf(QLatin1String("://")) + 3;
 
     // Truncate the URL to the beginning of the fully qualified domain name.
-    urlStruct.truncatedUrlString.remove(0, fqdnIndex);
-    urlStruct.truncatedUrlStringWithSeparators.remove(0, fqdnIndex);
-
-    // Check UltraList.
-    continueChecking = checkIndividualList(urlRequestInfo, urlStruct, requestStructPointer, ultraPrivacyStructPointer);
-
-    // Check UltraPrivacy.
-    if (continueChecking)
-        continueChecking = checkIndividualList(urlRequestInfo, urlStruct, requestStructPointer, ultraListStructPointer);
-
-    // Check EasyPrivacy.
-    if (continueChecking)
-        continueChecking = checkIndividualList(urlRequestInfo, urlStruct, requestStructPointer, easyPrivacyStructPointer);
-
-    // Check EasyList.
-    if (continueChecking)
-        continueChecking = checkIndividualList(urlRequestInfo, urlStruct, requestStructPointer, easyListStructPointer);
-
-    // Check Fanboy's Annoyance list.
-    if (continueChecking)
-        continueChecking = checkIndividualList(urlRequestInfo, urlStruct, requestStructPointer, fanboyAnnoyanceStructPointer);
+    requestStructPointer->truncatedUrlString.remove(0, fqdnIndex);
+    requestStructPointer->truncatedUrlStringWithSeparators.remove(0, fqdnIndex);
+
+    // Create an array of filter list struct pointers.
+    FilterListStruct* filterListStructPointerArray[5] = {ultraPrivacyStructPointer,
+                                                         ultraListStructPointer,
+                                                         easyPrivacyStructPointer,
+                                                         easyListStructPointer,
+                                                         fanboyAnnoyanceStructPointer};
+
+    // Check each filter list.
+    for (FilterListStruct *filterListStructPointer : filterListStructPointerArray)
+    {
+        // Check the list unless a match has been found by a previous list.
+        if (continueChecking)
+            continueChecking = checkIndividualList(urlRequestInfo, requestStructPointer, filterListStructPointer);
+    }
 
     // Return the continue checking status.
     return continueChecking;
 }
 
-bool FilterListHelper::checkIndividualList(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, FilterListStruct *filterListStructPointer) const
+bool FilterListHelper::checkIndividualList(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, FilterListStruct *filterListStructPointer) const
 {
-    // Initiate a continue checking tracker.  If the tracker changes to false, all process of the request will be stopped.
+    // Initiate a continue checking tracker.  If the tracker changes to false, all further checking of the request will be bypasses.
     bool continueChecking = true;
 
+    // Get the main allow list iterators.
+    auto mainAllowListEntry = filterListStructPointer->mainAllowListPointer->begin();
+    auto mainAllowListEnd = filterListStructPointer->mainAllowListPointer->end();
+
     // Check the main allow list.
-    for (auto filterListEntry = filterListStructPointer->mainAllowListPointer->begin(); filterListEntry != filterListStructPointer->mainAllowListPointer->end(); ++filterListEntry)
+    while (continueChecking && (mainAllowListEntry != mainAllowListEnd))
     {
         // Get the entry struct.
-        EntryStruct *entryStructPointer = *filterListEntry;
+        EntryStruct *entryStructPointer = *mainAllowListEntry;
 
         // TODO.  Temporarily ignore empty applied entries.
         if (!entryStructPointer->appliedEntryList[0].isEmpty())
         {
             // Check if the URL string contains the applied entry.  TODO.
-            if (urlStruct.urlString.contains(entryStructPointer->appliedEntryList[0]) || urlStruct.urlStringWithSeparators.contains(entryStructPointer->appliedEntryList[0]))
+            if (requestStructPointer->urlString.contains(entryStructPointer->appliedEntryList[0]) ||
+                requestStructPointer->urlStringWithSeparators.contains(entryStructPointer->appliedEntryList[0]))
             {
                 // Allow the request.
                 urlRequestInfo.block(false);
@@ -189,162 +187,180 @@ bool FilterListHelper::checkIndividualList(QWebEngineUrlRequestInfo &urlRequestI
                 return false;
             }
         }
-    }
 
-    // Get the main block list end.
-    auto mainBlockListEnd = filterListStructPointer->mainBlockListPointer->end();
+        // Increment the main allow list entry.
+        ++mainAllowListEntry;
+    }
 
-    // Check the main block list.
-    for (auto mainBlockListEntry = filterListStructPointer->mainBlockListPointer->begin(); mainBlockListEntry != mainBlockListEnd; ++mainBlockListEntry)
+    // Check the main block list unless a match has already been found.
+    if (continueChecking)
     {
-        // Exit the loop if continue checking is false.
-        if (!continueChecking)
-            break;
+        // Get the main block list iterators.
+        auto mainBlockListEntry = filterListStructPointer->mainBlockListPointer->begin();
+        auto mainBlockListEnd = filterListStructPointer->mainBlockListPointer->end();
 
-        // Get the entry struct.
-        EntryStruct *entryStructPointer = *mainBlockListEntry;
+        // Check the main block list.
+        while (continueChecking && (mainBlockListEntry != mainBlockListEnd))
+        {
+            // Get the entry struct.
+            EntryStruct *entryStructPointer = *mainBlockListEntry;
 
-        // Check the applied entries.
-        continueChecking = checkAppliedEntry(urlRequestInfo, urlStruct, requestStructPointer, filterListStructPointer->title, MAIN_BLOCKLIST, entryStructPointer, urlStruct.urlString,
-                                                urlStruct.urlStringWithSeparators);
-    }
+            // Check the applied entry against the request URL.
+            continueChecking = checkAppliedEntry(urlRequestInfo, requestStructPointer, filterListStructPointer->title, MAIN_BLOCKLIST, requestStructPointer->urlString,
+                                                 RequestUrlType::Url, entryStructPointer);
 
-    // Get the initial domain block list end.
-    auto initialDomainBlockListEnd = filterListStructPointer->initialDomainBlockListPointer->end();
+            // Check the applied entry against the request URL with separators.
+            if (continueChecking)
+                continueChecking = checkAppliedEntry(urlRequestInfo, requestStructPointer, filterListStructPointer->title, MAIN_BLOCKLIST, requestStructPointer->urlStringWithSeparators,
+                                                 RequestUrlType::UrlWithSeparators, entryStructPointer);
 
-    // Check the initial domain block list.
-    for (auto initialDomainBlockListEntry = filterListStructPointer->initialDomainBlockListPointer->begin(); initialDomainBlockListEntry != initialDomainBlockListEnd;
-         ++initialDomainBlockListEntry)
+            // Increment the main block list entry.
+            ++mainBlockListEntry;
+        }
+    }
+
+    // Check the initial domain block list unless a match has already been found.
+    if (continueChecking)
     {
-        // Exit the loop if continue checking is false.
-        if (!continueChecking)
-            break;
+        // Get the initial domain block list end.
+        auto initialDomainBlockListEntry = filterListStructPointer->initialDomainBlockListPointer->begin();
+        auto initialDomainBlockListEnd = filterListStructPointer->initialDomainBlockListPointer->end();
 
-        // Get the entry struct.
-        EntryStruct *entryStructPointer = *initialDomainBlockListEntry;
+        // Check the initial domain block list.
+        while (continueChecking && (initialDomainBlockListEntry != initialDomainBlockListEnd))
+        {
+            // Get the entry struct.
+            EntryStruct *entryStructPointer = *initialDomainBlockListEntry;
 
-        // Check the applied entries.
-        continueChecking = checkAppliedEntry(urlRequestInfo, urlStruct, requestStructPointer, filterListStructPointer->title, INITIAL_DOMAIN_BLOCKLIST, entryStructPointer,
-                                             urlStruct.truncatedUrlString, urlStruct.truncatedUrlStringWithSeparators);
-    }
+            // Check the applied entry against the truncated URL.
+            continueChecking = checkAppliedEntry(urlRequestInfo, requestStructPointer, filterListStructPointer->title, INITIAL_DOMAIN_BLOCKLIST, requestStructPointer->truncatedUrlString,
+                                                 RequestUrlType::TruncatedUrl, entryStructPointer);
 
-    // Get the regular expression block list end.
-    auto regularExpressionBlockListEnd = filterListStructPointer->regularExpressionBlockListPointer->end();
+            // Check the applied entry against the truncated URL with separators.
+            if (continueChecking)
+                continueChecking = checkAppliedEntry(urlRequestInfo, requestStructPointer, filterListStructPointer->title, INITIAL_DOMAIN_BLOCKLIST,
+                                                     requestStructPointer->truncatedUrlStringWithSeparators, RequestUrlType::TruncatedUrlWithSeparators, entryStructPointer);
 
-    // Check the regular expression block list.
-    for (auto regularExpressionBlockListEntry = filterListStructPointer->regularExpressionBlockListPointer->begin(); regularExpressionBlockListEntry != regularExpressionBlockListEnd;
-         ++regularExpressionBlockListEntry)
+            // Increment the initial domain block list entry.
+            ++initialDomainBlockListEntry;
+        }
+    }
+
+    // Check the regular expression block list unless a match has already been found.
+    if (continueChecking)
     {
-        // Exit the loop if continue checking is false.
-        if (!continueChecking)
-            break;
+        // Get the regular expression block list end.
+        auto regularExpressionBlockListEntry = filterListStructPointer->regularExpressionBlockListPointer->begin();
+        auto regularExpressionBlockListEnd = filterListStructPointer->regularExpressionBlockListPointer->end();
 
-        // Get the entry struct.
-        EntryStruct *entryStructPointer = *regularExpressionBlockListEntry;
+        while (continueChecking && (regularExpressionBlockListEntry != regularExpressionBlockListEnd))
+        {
+            // Get the entry struct.
+            EntryStruct *entryStructPointer = *regularExpressionBlockListEntry;
+
+            // Check the applied entries.
+            continueChecking = checkRegularExpression(urlRequestInfo, requestStructPointer, filterListStructPointer->title, REGULAR_EXPRESSION_BLOCKLIST, entryStructPointer);
 
-        // Check the applied entries.
-        continueChecking = checkRegularExpression(urlRequestInfo, urlStruct, requestStructPointer, filterListStructPointer->title, REGULAR_EXPRESSION_BLOCKLIST, entryStructPointer);
+            // Increment the regular expression block list entry.
+            ++regularExpressionBlockListEntry;
+        }
     }
 
     // Return the continue checking status.
     return continueChecking;
 }
 
-bool FilterListHelper::checkAppliedEntry(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, const QString &filterListTitle,
-                                         const int sublistInt, EntryStruct *entryStructPointer, QString &urlString, QString &urlStringWithSeparators) const
+bool FilterListHelper::checkAppliedEntry(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt, QString urlString,
+                                         const RequestUrlType requestUrlType, EntryStruct *entryStructPointer) const
 {
     // Check the entries according to the number.
-    if (entryStructPointer->singleAppliedEntry)
+    if (entryStructPointer->singleAppliedEntry)  // There is a single entry.
     {
         // Process initial and final matches.
         if (entryStructPointer->initialMatch && entryStructPointer->finalMatch)  // This is both an initial and final match.
         {
             // Check the URL against the applied entry.
-            if ((urlString == entryStructPointer->appliedEntryList[0]) || (urlStringWithSeparators == entryStructPointer->appliedEntryList[0]))
+            if (urlString == entryStructPointer->appliedEntryList[0])
             {
+                // Set the matched URL type.
+                requestStructPointer->matchedUrlType = requestUrlType;
+
                 // Check the domain status.
-                return checkDomain(urlRequestInfo, urlStruct, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
+                return checkDomain(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
             }
         }
         else if (entryStructPointer->initialMatch)  // This is an initial match.
         {
             // Check the URL against the applied entry.
-            if (urlString.startsWith(entryStructPointer->appliedEntryList[0]) || urlStringWithSeparators.startsWith(entryStructPointer->appliedEntryList[0]))
+            if (urlString.startsWith(entryStructPointer->appliedEntryList[0]))
             {
+                // Set the matched URL type.
+                requestStructPointer->matchedUrlType = requestUrlType;
+
                 // Check the domain status.
-                return checkDomain(urlRequestInfo, urlStruct, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
+                return checkDomain(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
             }
         }
         else if (entryStructPointer->finalMatch)  // This is a final match.
         {
             // Check the URL against the applied entry.
-            if (urlString.endsWith(entryStructPointer->appliedEntryList[0]) || urlStringWithSeparators.endsWith(entryStructPointer->appliedEntryList[0]))
+            if (urlString.endsWith(entryStructPointer->appliedEntryList[0]))
             {
+                // Set the matched URL type.
+                requestStructPointer->matchedUrlType = requestUrlType;
+
                 // Check the domain status.
-                return checkDomain(urlRequestInfo, urlStruct, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
+                return checkDomain(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
             }
         }
         else  // There is no initial or final matching.
         {
             // Check if the URL string contains the applied entry.
-            if (urlString.contains(entryStructPointer->appliedEntryList[0]) || urlStringWithSeparators.contains(entryStructPointer->appliedEntryList[0]))
+            if (urlString.contains(entryStructPointer->appliedEntryList[0]))
             {
+                // Set the matched URL type.
+                requestStructPointer->matchedUrlType = requestUrlType;
+
                 // Check the domain status.
-                return checkDomain(urlRequestInfo, urlStruct, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
+                return checkDomain(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
             }
         }
     }
     else  // There are multiple entries.
     {
-        // Create a URL matches flag.
-        bool urlMatches = true;
-
         // Process initial and final matches.
         if (entryStructPointer->initialMatch && entryStructPointer->finalMatch)  // This is both an initial and final match.
         {
-            // Check the first entry.
-            if (urlString.startsWith(entryStructPointer->appliedEntryList[0]) ||
-                urlStringWithSeparators.startsWith(entryStructPointer->appliedEntryList[0]))  // The URL string starts with the first applied entry.
+            // Check the URL.
+            if (urlString.startsWith(entryStructPointer->appliedEntryList[0]))
             {
-                // Get the number of characters to remove from the front of the URL strings.
+                // Get the number of characters to remove from the front of the URL string.
                 int charactersToRemove = entryStructPointer->appliedEntryList[0].size();
 
                 // Remove the entry from the front of the URL string copies.
                 urlString.remove(0, charactersToRemove);
-                urlStringWithSeparators.remove(0, charactersToRemove);
-            }
-            else  // The URL string does not end with the last applied entry.
-            {
-                // Mark the URL matches flag as false.
-                urlMatches = false;
-            }
 
-            // Check the other entries if the URL still matches.
-            if (urlMatches)
-            {
-                // Calculate the penultimate entry.
+                // Get the entry locations.
                 int penultimateEntryNumber = (entryStructPointer->sizeOfAppliedEntryList - 1);
                 int ultimateEntryIndex = penultimateEntryNumber;
 
+                // Create a URL matches flag.
+                bool urlMatches = true;
+
                 // Check all the middle entries.
                 for (int i = 1; i < penultimateEntryNumber; ++i)
                 {
-                    // Get the index of the applied entry, which will be `-1` if it doesn't exist.
-                    int stringIndex = urlString.indexOf(entryStructPointer->appliedEntryList[i]);
-                    int stringWithSeparatorsIndex = urlStringWithSeparators.indexOf(entryStructPointer->appliedEntryList[i]);
-
-                    // Get the larger of the two indexes.
-                    int index = std::max(stringIndex, stringWithSeparatorsIndex);
+                    // Get the applied entry index, which will be `-1` if it doesn't exist.
+                    int appliedEntryIndex = urlString.indexOf(entryStructPointer->appliedEntryList[i]);
 
                     // Check if the entry was found.
-                    if (index >= 0)  // The entry is contained in the URL string.
+                    if (appliedEntryIndex >= 0)  // The entry is contained in the URL string.
                     {
                         // Get the number of characters to remove from the front of the URL strings.
-                        int charactersToRemove = index + entryStructPointer->appliedEntryList[i].size();
+                        int charactersToRemove = appliedEntryIndex + entryStructPointer->appliedEntryList[i].size();
 
                         // Remove the entry from the front of the URL string copies.
                         urlString.remove(0, charactersToRemove);
-                        urlStringWithSeparators.remove(0, charactersToRemove);
                     }
                     else  // The entry is not contained in the URL string.
                     {
@@ -356,59 +372,44 @@ bool FilterListHelper::checkAppliedEntry(QWebEngineUrlRequestInfo &urlRequestInf
                 // Check the final entry if the URL still matches.
                 if (urlMatches)
                 {
-                    if (urlString.endsWith(entryStructPointer->appliedEntryList[ultimateEntryIndex]) ||
-                        urlStringWithSeparators.endsWith(entryStructPointer->appliedEntryList[ultimateEntryIndex]))  // The URL string ends with the last applied entry.
-                    {
-                        // There is no need to modify the URL string copies as no further checks will be performed.
-                    }
-                    else  // The URL string does not end with the last applied entry.
+                    if (urlString.endsWith(entryStructPointer->appliedEntryList[ultimateEntryIndex]))  // The URL string ends with the last applied entry.
                     {
-                        // Mark the URL matches flag as false.
-                        urlMatches = false;
+                        // Set the matched URL type.
+                        requestStructPointer->matchedUrlType = requestUrlType;
+
+                        // Check the domain status.
+                        return checkDomain(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
                     }
                 }
             }
         }
         else if (entryStructPointer->initialMatch)  // This is an initial match.
         {
-            // Check the first entry.
-            if (urlString.startsWith(entryStructPointer->appliedEntryList[0]) ||
-                urlStringWithSeparators.startsWith(entryStructPointer->appliedEntryList[0]))  // The URL string starts with the first applied entry.
+            // Check the URL.
+            if (urlString.startsWith(entryStructPointer->appliedEntryList[0]))
             {
                 // Get the number of characters to remove from the front of the URL strings.
                 int charactersToRemove = entryStructPointer->appliedEntryList[0].size();
 
                 // Remove the entry from the front of the URL string copies.
                 urlString.remove(0, charactersToRemove);
-                urlStringWithSeparators.remove(0, charactersToRemove);
-            }
-            else  // The URL string does not end with the last applied entry.
-            {
-                // Mark the URL matches flag as false.
-                urlMatches = false;
-            }
 
-            // Check the other entries if the URL still matches.
-            if (urlMatches)
-            {
+                // Create a URL matches flag.
+                bool urlMatches = true;
+
                 for (int i = 1; i < entryStructPointer->sizeOfAppliedEntryList; ++i)
                 {
-                    // Get the index of the applied entry, which will be `-1` if it doesn't exist.
-                    int stringIndex = urlString.indexOf(entryStructPointer->appliedEntryList[i]);
-                    int stringWithSeparatorsIndex = urlStringWithSeparators.indexOf(entryStructPointer->appliedEntryList[i]);
-
-                    // Get the larger of the two indexes.
-                    int index = std::max(stringIndex, stringWithSeparatorsIndex);
+                    // Get the applied entry index, which will be `-1` if it doesn't exist.
+                    int appliedEntryIndex = urlString.indexOf(entryStructPointer->appliedEntryList[i]);
 
                     // Check if the entry was found.
-                    if (index >= 0)  // The entry is contained in the URL string.
+                    if (appliedEntryIndex >= 0)  // The entry is contained in the URL string.
                     {
                         // Get the number of characters to remove from the front of the URL strings.
-                        int charactersToRemove = index + entryStructPointer->appliedEntryList[i].size();
+                        int charactersToRemove = appliedEntryIndex + entryStructPointer->appliedEntryList[i].size();
 
                         // Remove the entry from the front of the URL string copies.
                         urlString.remove(0, charactersToRemove);
-                        urlStringWithSeparators.remove(0, charactersToRemove);
                     }
                     else  // The entry is not contained in the URL string.
                     {
@@ -416,33 +417,41 @@ bool FilterListHelper::checkAppliedEntry(QWebEngineUrlRequestInfo &urlRequestInf
                         urlMatches = false;
                     }
                 }
+
+                // Check the domain status if the URL still matches.
+                if (urlMatches)
+                {
+                    // Set the matched URL type.
+                    requestStructPointer->matchedUrlType = requestUrlType;
+
+                    // Check the domain status.
+                    return checkDomain(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
+                }
             }
         }
         else if (entryStructPointer->finalMatch)  // This is a final match.
         {
-            // Calculate the penultimate entry.
+            // Get the entry locations.
             int penultimateEntryNumber = (entryStructPointer->sizeOfAppliedEntryList - 1);
             int ultimateEntryIndex = penultimateEntryNumber;
 
+            // Create a URL matches flag.
+            bool urlMatches = true;
+
             // Check all the entries except the last one.
             for (int i = 0; i < penultimateEntryNumber; ++i)
             {
-                // Get the index of the applied entry, which will be `-1` if it doesn't exist.
-                int stringIndex = urlString.indexOf(entryStructPointer->appliedEntryList[i]);
-                int stringWithSeparatorsIndex = urlStringWithSeparators.indexOf(entryStructPointer->appliedEntryList[i]);
-
-                // Get the larger of the two indexes.
-                int index = std::max(stringIndex, stringWithSeparatorsIndex);
+                // Get the applied entry index, which will be `-1` if it doesn't exist.
+                int appliedEntryIndex = urlString.indexOf(entryStructPointer->appliedEntryList[i]);
 
                 // Check if the entry was found.
-                if (index >= 0)  // The entry is contained in the URL string.
+                if (appliedEntryIndex >= 0)  // The entry is contained in the URL string.
                 {
                     // Get the number of characters to remove from the front of the URL strings.
-                    int charactersToRemove = index + entryStructPointer->appliedEntryList[i].size();
+                    int charactersToRemove = appliedEntryIndex + entryStructPointer->appliedEntryList[i].size();
 
                     // Remove the entry from the front of the URL string copies.
                     urlString.remove(0, charactersToRemove);
-                    urlStringWithSeparators.remove(0, charactersToRemove);
                 }
                 else  // The entry is not contained in the URL string.
                 {
@@ -454,39 +463,34 @@ bool FilterListHelper::checkAppliedEntry(QWebEngineUrlRequestInfo &urlRequestInf
             // Check the final entry if the URL still matches.
             if (urlMatches)
             {
-                if (urlString.endsWith(entryStructPointer->appliedEntryList[ultimateEntryIndex]) ||
-                    urlStringWithSeparators.endsWith(entryStructPointer->appliedEntryList[ultimateEntryIndex]))  // The URL string ends with the last applied entry.
+                if (urlString.endsWith(entryStructPointer->appliedEntryList[ultimateEntryIndex]))  // The URL string ends with the last applied entry.
                 {
-                    // There is no need to modify the URL string copies as no further checks will be performed.
-                }
-                else  // The URL string does not end with the last applied entry.
-                {
-                    // Mark the URL matches flag as false.
-                    urlMatches = false;
+                    // Set the matched URL type.
+                    requestStructPointer->matchedUrlType = requestUrlType;
+
+                    // Check the domain status.
+                    return checkDomain(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
                 }
             }
         }
         else  // There is no initial or final matching.
         {
+            // Create a URL matches flag.
+            bool urlMatches = true;
+
             for (int i = 0; i < entryStructPointer->sizeOfAppliedEntryList; ++i)
             {
-                // Get the index of the applied entry, which will be `-1` if it doesn't exist.
-                int stringIndex = urlString.indexOf(entryStructPointer->appliedEntryList[i]);
-                int stringWithSeparatorsIndex = urlStringWithSeparators.indexOf(entryStructPointer->appliedEntryList[i]);
-
-                // Get the larger of the two indexes.
-                int index = std::max(stringIndex, stringWithSeparatorsIndex);
+                // Get the applied entry index, which will be `-1` if it doesn't exist.
+                int appliedEntryIndex = urlString.indexOf(entryStructPointer->appliedEntryList[i]);
 
                 // Check if the entry was found.
-                if (index >= 0)  // The entry is contained in the URL string.
+                if (appliedEntryIndex >= 0)  // The entry is contained in the URL string.
                 {
-
                     // Get the number of characters to remove from the front of the URL strings.
-                    int charactersToRemove = index + entryStructPointer->appliedEntryList[i].size();
+                    int charactersToRemove = appliedEntryIndex + entryStructPointer->appliedEntryList[i].size();
 
                     // Remove the entry from the front of the URL string copies.
                     urlString.remove(0, charactersToRemove);
-                    urlStringWithSeparators.remove(0, charactersToRemove);
                 }
                 else  // The entry is not contained in the URL string.
                 {
@@ -494,57 +498,63 @@ bool FilterListHelper::checkAppliedEntry(QWebEngineUrlRequestInfo &urlRequestInf
                     urlMatches = false;
                 }
             }
-        }
 
-        // Check the domain status if the URL matches.
-        if (urlMatches)
-            return checkDomain(urlRequestInfo, urlStruct, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
+            // Check the domain status if the URL still matches.
+            if (urlMatches)
+            {
+                // Set the matched URL type.
+                requestStructPointer->matchedUrlType = requestUrlType;
+
+                // Check the domain status.
+                return checkDomain(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
+            }
+        }
     }
 
-    // If the applied entry doesn't match, return `true` to continue processing the URL request.
+    // The applied entry doesn't match.  Return `true` to continue processing the URL request.
     return true;
 }
 
-bool FilterListHelper::checkRegularExpression(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, const QString &filterListTitle,
-                                              const int sublistInt, EntryStruct *entryStructPointer) const
+bool FilterListHelper::checkRegularExpression(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
+                                              EntryStruct *entryStructPointer) const
 {
     // Create an applied entry regular expression.
     QRegularExpression appliedEntryRegularExpression(entryStructPointer->appliedEntryList[0]);
 
     // Check if the regular expression matches the applied entry.
-    if (urlStruct.urlString.contains(appliedEntryRegularExpression))
+    if (requestStructPointer->urlString.contains(appliedEntryRegularExpression))
     {
         // Check the domain status.
-        return checkDomain(urlRequestInfo, urlStruct, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
+        return checkDomain(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
     }
 
     // If the regular expression doesn't match, return `true` to continue processing the URL request.
     return true;
 }
 
-bool FilterListHelper::checkDomain(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
+bool FilterListHelper::checkDomain(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
                                    EntryStruct *entryStructPointer) const
 {
     // Check domain status.
-    if (entryStructPointer->domain == FilterOptionEnum::Disposition::Null)  // Ignore domain status.
+    if (entryStructPointer->domain == FilterOptionDisposition::Null)  // Ignore domain status.
     {
         // Check the third-party status.
-        return checkThirdParty(urlRequestInfo, requestStructPointer, urlStruct.isThirdPartyRequest, filterListTitle, sublistInt, entryStructPointer);
+        return checkThirdParty(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
     }
-    else if (entryStructPointer->domain == FilterOptionEnum::Disposition::Apply)  // Block requests from listed domains.
+    else if (entryStructPointer->domain == FilterOptionDisposition::Apply)  // Block requests from listed domains.
     {
         // Check each domain.
         foreach (QString blockedDomain, entryStructPointer->domainList)
         {
             // Check if the request came from a blocked domain.
-            if (urlStruct.fqdn.endsWith(blockedDomain))
+            if (requestStructPointer->fqdn.endsWith(blockedDomain))
             {
                 // Check the third-party status.
-                return checkThirdParty(urlRequestInfo, requestStructPointer, urlStruct.isThirdPartyRequest, filterListTitle, sublistInt, entryStructPointer);
+                return checkThirdParty(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
             }
         }
     }
-    else if (entryStructPointer->domain == FilterOptionEnum::Disposition::Override)  // Block domains that are not overridden.
+    else if (entryStructPointer->domain == FilterOptionDisposition::Override)  // Block domains that are not overridden.
     {
         // Create a block domain flag.
         bool blockDomain = true;
@@ -553,7 +563,7 @@ bool FilterListHelper::checkDomain(QWebEngineUrlRequestInfo &urlRequestInfo, Url
         foreach (QString overriddenDomain, entryStructPointer->domainList)
         {
             // Check if the request came from an overridden domain.
-            if (urlStruct.fqdn.endsWith(overriddenDomain))
+            if (requestStructPointer->fqdn.endsWith(overriddenDomain))
             {
                 // Don't block the domain.
                 blockDomain = false;
@@ -564,7 +574,7 @@ bool FilterListHelper::checkDomain(QWebEngineUrlRequestInfo &urlRequestInfo, Url
         if (blockDomain)
         {
             // Check the third-party status.
-            return checkThirdParty(urlRequestInfo, requestStructPointer, urlStruct.isThirdPartyRequest, filterListTitle, sublistInt, entryStructPointer);
+            return checkThirdParty(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
         }
     }
 
@@ -572,11 +582,11 @@ bool FilterListHelper::checkDomain(QWebEngineUrlRequestInfo &urlRequestInfo, Url
     return true;
 }
 
-bool FilterListHelper::checkThirdParty(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const bool isThirdPartyRequest, const QString &filterListTitle,
-                                       const int sublistInt, EntryStruct *entryStructPointer) const
+bool FilterListHelper::checkThirdParty(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
+                                       EntryStruct *entryStructPointer) const
 {
     // Check third-party status.
-    if (entryStructPointer->thirdParty == FilterOptionEnum::Disposition::Null)  // Ignore third-party status.
+    if (entryStructPointer->thirdParty == FilterOptionDisposition::Null)  // Ignore third-party status.
     {
         // Check if request options are applied.
         if (entryStructPointer->hasRequestOptions)  // Request options are applied.
@@ -590,7 +600,7 @@ bool FilterListHelper::checkThirdParty(QWebEngineUrlRequestInfo &urlRequestInfo,
             return blockRequest(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
         }
     }
-    else if ((entryStructPointer->thirdParty == FilterOptionEnum::Disposition::Apply) && isThirdPartyRequest)  // Block third-party request.
+    else if ((entryStructPointer->thirdParty == FilterOptionDisposition::Apply) && requestStructPointer->isThirdPartyRequest)  // Block third-party request.
     {
         // Check if request options are applied.
         if (entryStructPointer->hasRequestOptions)  // Request options are applied.
@@ -604,7 +614,7 @@ bool FilterListHelper::checkThirdParty(QWebEngineUrlRequestInfo &urlRequestInfo,
             return blockRequest(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
         }
     }
-    else if ((entryStructPointer->thirdParty == FilterOptionEnum::Disposition::Override) && !isThirdPartyRequest)  // Block first-party requests.
+    else if ((entryStructPointer->thirdParty == FilterOptionDisposition::Override) && !requestStructPointer->isThirdPartyRequest)  // Block first-party requests.
     {
         // Check if request options are applied.
         if (entryStructPointer->hasRequestOptions)  // Request options are applied.
@@ -627,87 +637,87 @@ bool FilterListHelper::checkRequestOptions(QWebEngineUrlRequestInfo &urlRequestI
                                            EntryStruct *entryStructPointer) const
 {
     // Block font requests.
-    if ((entryStructPointer->font == FilterOptionEnum::Disposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeFontResource))
+    if ((entryStructPointer->font == FilterOptionDisposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeFontResource))
     {
         // Block the request.
         return blockRequest(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
     }
 
     // Block image requests.
-    if ((entryStructPointer->image == FilterOptionEnum::Disposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeImage))
+    if ((entryStructPointer->image == FilterOptionDisposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeImage))
     {
         // Block the request.
         return blockRequest(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
     }
 
     // Block main frame requests.
-    if ((entryStructPointer->mainFrame == FilterOptionEnum::Disposition::Apply) && ((requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeMainFrame) ||
-                                                                                    (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeNavigationPreloadMainFrame)))
+    if ((entryStructPointer->mainFrame == FilterOptionDisposition::Apply) && ((requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeMainFrame) ||
+                                                                              (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeNavigationPreloadMainFrame)))
     {
         // Block the request.
         return blockRequest(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
     }
 
     // Block media requests.
-    if ((entryStructPointer->media == FilterOptionEnum::Disposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeMedia))
+    if ((entryStructPointer->media == FilterOptionDisposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeMedia))
     {
         // Block the request.
         return blockRequest(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
     }
 
     // Block object requests.
-    if ((entryStructPointer->object == FilterOptionEnum::Disposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeObject))
+    if ((entryStructPointer->object == FilterOptionDisposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeObject))
     {
         // Block the request.
         return blockRequest(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
     }
 
     // Block other requests.
-    if ((entryStructPointer->other == FilterOptionEnum::Disposition::Apply) && ((requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeSubResource) ||
-                                                                                (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeWorker) ||
-                                                                                (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeSharedWorker) ||
-                                                                                (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypePrefetch) ||
-                                                                                (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeFavicon) ||
-                                                                                (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeServiceWorker) ||
-                                                                                (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeCspReport) ||
-                                                                                (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypePluginResource) ||
-                                                                                (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeUnknown)))
+    if ((entryStructPointer->other == FilterOptionDisposition::Apply) && ((requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeSubResource) ||
+                                                                          (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeWorker) ||
+                                                                          (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeSharedWorker) ||
+                                                                          (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypePrefetch) ||
+                                                                          (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeFavicon) ||
+                                                                          (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeServiceWorker) ||
+                                                                          (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeCspReport) ||
+                                                                          (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypePluginResource) ||
+                                                                          (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeUnknown)))
     {
         // Block the request.
         return blockRequest(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
     }
 
     // Block ping requests
-    if ((entryStructPointer->ping == FilterOptionEnum::Disposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypePing))
+    if ((entryStructPointer->ping == FilterOptionDisposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypePing))
     {
         // Block the request.
         return blockRequest(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
     }
 
     // Block script requests.
-    if ((entryStructPointer->script == FilterOptionEnum::Disposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeScript))
+    if ((entryStructPointer->script == FilterOptionDisposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeScript))
     {
         // Block the request.
         return blockRequest(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
     }
 
     // Block style sheet requests.
-    if ((entryStructPointer->styleSheet == FilterOptionEnum::Disposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeStylesheet))
+    if ((entryStructPointer->styleSheet == FilterOptionDisposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeStylesheet))
     {
         // Block the request.
         return blockRequest(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
     }
 
     // Block sub resource requests.
-    if ((entryStructPointer->subFrame == FilterOptionEnum::Disposition::Apply) && ((requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeSubFrame) ||
-                                                                                   (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeNavigationPreloadSubFrame)))
+    if ((entryStructPointer->subFrame == FilterOptionDisposition::Apply) && ((requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeSubFrame) ||
+                                                                             (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeNavigationPreloadSubFrame)))
     {
         // Block the request.
         return blockRequest(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
     }
 
     // Block XML HTTP requests.
-    if ((entryStructPointer->xmlHttpRequest == FilterOptionEnum::Disposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeXhr))
+    if ((entryStructPointer->xmlHttpRequest == FilterOptionDisposition::Apply) && (requestStructPointer->resourceTypeInt == QWebEngineUrlRequestInfo::ResourceTypeXhr))
     {
         // Block the request.
         return blockRequest(urlRequestInfo, requestStructPointer, filterListTitle, sublistInt, entryStructPointer);
@@ -759,13 +769,13 @@ QString FilterListHelper::getNavigationTypeString(int navigationTypeInt) const
     }
 }
 
-QString FilterListHelper::getRequestOptionDispositionString(const FilterOptionEnum::Disposition filterOptionDisposition) const
+QString FilterListHelper::getRequestOptionDispositionString(const FilterOptionDisposition filterOptionDisposition) const
 {
     // Return the translated filter option disposition string.
     switch (filterOptionDisposition)
     {
-        case FilterOptionEnum::Disposition::Apply: return FILTER_OPTION_APPLY;
-        case FilterOptionEnum::Disposition::Override: return FILTER_OPTION_OVERRIDE;
+        case FilterOptionDisposition::Apply: return FILTER_OPTION_APPLY;
+        case FilterOptionDisposition::Override: return FILTER_OPTION_OVERRIDE;
         default: return FILTER_OPTION_NULL;
     }
 }
@@ -942,7 +952,7 @@ FilterListStruct* FilterListHelper::populateFilterList(const QString &filterList
                         if (entryStructPointer->domainList[0].startsWith(QLatin1Char('~')))  // Override domains.
                         {
                             // Populate the domain filter disposition.
-                            entryStructPointer->domain = FilterOptionEnum::Disposition::Override;
+                            entryStructPointer->domain = FilterOptionDisposition::Override;
 
                             // Remove the initial `~` from each domain.
                             entryStructPointer->domainList.replaceInStrings(QLatin1String("~"), QLatin1String(""));
@@ -950,23 +960,23 @@ FilterListStruct* FilterListHelper::populateFilterList(const QString &filterList
                         else  // Standard domains.
                         {
                             // Populate the domain filter disposition.
-                            entryStructPointer->domain = FilterOptionEnum::Disposition::Apply;
+                            entryStructPointer->domain = FilterOptionDisposition::Apply;
                         }
                     }
                     else if (filterOption == QLatin1String("third-party"))  // Third-party.
                     {
                         // Populate the third-party filter disposition.
-                        entryStructPointer->thirdParty = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->thirdParty = FilterOptionDisposition::Apply;
                     }
                     else if (filterOption == QLatin1String("~third-party"))  // Third-party override.
                     {
                         // Populate the third-party filter disposition.
-                        entryStructPointer->thirdParty = FilterOptionEnum::Disposition::Override;
+                        entryStructPointer->thirdParty = FilterOptionDisposition::Override;
                     }
                     else if ((filterOption == QLatin1String("document")) || (filterOption == QLatin1String("popup")))  // Document (and popup).
                     {
                         // Populate the main frame disposition.
-                        entryStructPointer->mainFrame = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->mainFrame = FilterOptionDisposition::Apply;
 
                         // Set the has request options flag.
                         entryStructPointer->hasRequestOptions = true;
@@ -974,7 +984,7 @@ FilterListStruct* FilterListHelper::populateFilterList(const QString &filterList
                     else if (filterOption == QLatin1String("font"))  // Font.
                     {
                         // Populate the font disposition.
-                        entryStructPointer->font = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->font = FilterOptionDisposition::Apply;
 
                         // Set the has request options flag.
                         entryStructPointer->hasRequestOptions = true;
@@ -982,7 +992,7 @@ FilterListStruct* FilterListHelper::populateFilterList(const QString &filterList
                     else if (filterOption == QLatin1String("image"))  // Image.
                     {
                         // Populate the image disposition.
-                        entryStructPointer->image = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->image = FilterOptionDisposition::Apply;
 
                         // Set the has request options flag.
                         entryStructPointer->hasRequestOptions = true;
@@ -990,7 +1000,7 @@ FilterListStruct* FilterListHelper::populateFilterList(const QString &filterList
                     else if (filterOption == QLatin1String("media"))  // Media.
                     {
                         // Populate the media disposition.
-                        entryStructPointer->media = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->media = FilterOptionDisposition::Apply;
 
                         // Set the has request options flag.
                         entryStructPointer->hasRequestOptions = true;
@@ -998,7 +1008,7 @@ FilterListStruct* FilterListHelper::populateFilterList(const QString &filterList
                     else if (filterOption == QLatin1String("object"))  // Object.
                     {
                         // Populate the object disposition.
-                        entryStructPointer->object = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->object = FilterOptionDisposition::Apply;
 
                         // Set the has request options flag.
                         entryStructPointer->hasRequestOptions = true;
@@ -1006,7 +1016,7 @@ FilterListStruct* FilterListHelper::populateFilterList(const QString &filterList
                     else if ((filterOption == QLatin1String("other")) || (filterOption == QLatin1String("webrtc")) || (filterOption == QLatin1String("websocket")))  // Other.
                     {  // `websocket` will get its own section in Qt6.
                         // Populate the other disposition.
-                        entryStructPointer->other = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->other = FilterOptionDisposition::Apply;
 
                         // Set the has request options flag.
                         entryStructPointer->hasRequestOptions = true;
@@ -1014,7 +1024,7 @@ FilterListStruct* FilterListHelper::populateFilterList(const QString &filterList
                     else if (filterOption == QLatin1String("ping"))  // Ping.
                     {
                         // Populate the ping disposition.
-                        entryStructPointer->ping = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->ping = FilterOptionDisposition::Apply;
 
                         // Set the has request options flag.
                         entryStructPointer->hasRequestOptions = true;
@@ -1022,7 +1032,7 @@ FilterListStruct* FilterListHelper::populateFilterList(const QString &filterList
                     else if (filterOption == QLatin1String("script"))  // Script.
                     {
                         // Populate the script disposition.
-                        entryStructPointer->script = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->script = FilterOptionDisposition::Apply;
 
                         // Set the has request options flag.
                         entryStructPointer->hasRequestOptions = true;
@@ -1030,7 +1040,7 @@ FilterListStruct* FilterListHelper::populateFilterList(const QString &filterList
                     else if (filterOption == QLatin1String("stylesheet"))  // Style sheet.
                     {
                         // Populate the script disposition.
-                        entryStructPointer->styleSheet = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->styleSheet = FilterOptionDisposition::Apply;
 
                         // Set the has request options flag.
                         entryStructPointer->hasRequestOptions = true;
@@ -1038,7 +1048,7 @@ FilterListStruct* FilterListHelper::populateFilterList(const QString &filterList
                     else if (filterOption == QLatin1String("subdocument"))  // Sub document.
                     {
                         // Populate the sub resource disposition.
-                        entryStructPointer->subFrame = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->subFrame = FilterOptionDisposition::Apply;
 
                         // Set the has request options flag.
                         entryStructPointer->hasRequestOptions = true;
@@ -1046,7 +1056,7 @@ FilterListStruct* FilterListHelper::populateFilterList(const QString &filterList
                     else if (filterOption == QLatin1String("xmlhttprequest"))  // XML HTTP request.
                     {
                         //Populate the XML HTTP request disposition.
-                        entryStructPointer->xmlHttpRequest = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->xmlHttpRequest = FilterOptionDisposition::Apply;
 
                         // Set the has request options flag.
                         entryStructPointer->hasRequestOptions = true;
@@ -1127,69 +1137,69 @@ FilterListStruct* FilterListHelper::populateFilterList(const QString &filterList
 
                     // Font.
                     if (overrideStruct.font)
-                        entryStructPointer->font = FilterOptionEnum::Disposition::Override;
+                        entryStructPointer->font = FilterOptionDisposition::Override;
                     else
-                        entryStructPointer->font = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->font = FilterOptionDisposition::Apply;
 
                     // Image.
                     if (overrideStruct.image)
-                        entryStructPointer->image = FilterOptionEnum::Disposition::Override;
+                        entryStructPointer->image = FilterOptionDisposition::Override;
                     else
-                        entryStructPointer->image = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->image = FilterOptionDisposition::Apply;
 
                     // Main Frame (document).
                     if (overrideStruct.mainFrame)
-                        entryStructPointer->mainFrame = FilterOptionEnum::Disposition::Override;
+                        entryStructPointer->mainFrame = FilterOptionDisposition::Override;
                     else
-                        entryStructPointer->mainFrame = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->mainFrame = FilterOptionDisposition::Apply;
 
                     // Media.
                     if (overrideStruct.media)
-                        entryStructPointer->media = FilterOptionEnum::Disposition::Override;
+                        entryStructPointer->media = FilterOptionDisposition::Override;
                     else
-                        entryStructPointer->media = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->media = FilterOptionDisposition::Apply;
 
                     // Object.
                     if (overrideStruct.object)
-                        entryStructPointer->object = FilterOptionEnum::Disposition::Override;
+                        entryStructPointer->object = FilterOptionDisposition::Override;
                     else
-                        entryStructPointer->object = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->object = FilterOptionDisposition::Apply;
 
                     // Other.
                     if (overrideStruct.other)
-                        entryStructPointer->other = FilterOptionEnum::Disposition::Override;
+                        entryStructPointer->other = FilterOptionDisposition::Override;
                     else
-                        entryStructPointer->other = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->other = FilterOptionDisposition::Apply;
 
                     // Ping.
                     if (overrideStruct.ping)
-                        entryStructPointer->ping = FilterOptionEnum::Disposition::Override;
+                        entryStructPointer->ping = FilterOptionDisposition::Override;
                     else
-                        entryStructPointer->ping = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->ping = FilterOptionDisposition::Apply;
 
                     //  Script.
                     if (overrideStruct.script)
-                        entryStructPointer->script = FilterOptionEnum::Disposition::Override;
+                        entryStructPointer->script = FilterOptionDisposition::Override;
                     else
-                        entryStructPointer->script = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->script = FilterOptionDisposition::Apply;
 
                     // Style Sheet.
                     if (overrideStruct.styleSheet)
-                        entryStructPointer->styleSheet = FilterOptionEnum::Disposition::Override;
+                        entryStructPointer->styleSheet = FilterOptionDisposition::Override;
                     else
-                        entryStructPointer->styleSheet = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->styleSheet = FilterOptionDisposition::Apply;
 
                     // Sub Resource.
                     if (overrideStruct.subFrame)
-                        entryStructPointer->subFrame = FilterOptionEnum::Disposition::Override;
+                        entryStructPointer->subFrame = FilterOptionDisposition::Override;
                     else
-                        entryStructPointer->subFrame = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->subFrame = FilterOptionDisposition::Apply;
 
                     // XML HTTP Request.
                     if (overrideStruct.xmlHttpRequest)
-                        entryStructPointer->xmlHttpRequest = FilterOptionEnum::Disposition::Override;
+                        entryStructPointer->xmlHttpRequest = FilterOptionDisposition::Override;
                     else
-                        entryStructPointer->xmlHttpRequest = FilterOptionEnum::Disposition::Apply;
+                        entryStructPointer->xmlHttpRequest = FilterOptionDisposition::Apply;
                 }
             }  // Finish processing filter options.
 
@@ -1267,8 +1277,7 @@ void FilterListHelper::populateRequestStruct(RequestStruct *requestStructPointer
     requestStructPointer->dispositionInt = disposition;
     requestStructPointer->filterListTitle = filterListTitle;
     requestStructPointer->sublistInt = sublistInt;
-    requestStructPointer->entryStruct.appliedEntryList = entryStructPointer->appliedEntryList;
-    requestStructPointer->entryStruct.originalEntry = entryStructPointer->originalEntry;
+    requestStructPointer->entryStruct = *entryStructPointer;
 }
 
 void FilterListHelper::prepareFilterListString(QString &filterListString, EntryStruct *entryStructPointer) const
index 772d86a7153682ea8881428ee6dfe8ac728663fa..b1c93a04a66b3f972ca874376f3cd33d1e9fb03e 100644 (file)
  * along with Privacy Browser PC.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef FILTERLISTHELPER_H
-#define FILTERLISTHELPER_H
+#ifndef FILTER_LIST_HELPER_H
+#define FILTER_LIST_HELPER_H
 
 // Application headers.
 #include "structs/FilterListStruct.h"
 #include "structs/RequestStruct.h"
-#include "structs/UrlStruct.h"
 
 // Qt framework headers.
 #include <QString>
@@ -57,7 +56,7 @@ public:
     bool checkFilterLists(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer) const;
     QString getDispositionString(int dispositionInt) const;
     QString getNavigationTypeString(int navigationTypeInt) const;
-    QString getRequestOptionDispositionString(const FilterOptionEnum::Disposition filterOptionDisposition) const;
+    QString getRequestOptionDispositionString(const FilterOptionDisposition filterOptionDisposition) const;
     QString getResourceTypeString(int resourceTypeInt) const;
     QString getSublistName(int sublistInt) const;
 
@@ -112,17 +111,16 @@ private:
 
     // The private functions.
     bool blockRequest(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt, EntryStruct *entryStructPointer) const;
-    bool checkAppliedEntry(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
-                           EntryStruct *entryStructPointer, QString &urlString, QString &urlStringWithSeparators) const;
-    bool checkDomain(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
+    bool checkAppliedEntry(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt, QString urlString,
+                           const RequestUrlType requestUrlType, EntryStruct *entryStructPointer) const;
+    bool checkDomain(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
                      EntryStruct *entryStructPointer) const;
-    bool checkIndividualList(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, FilterListStruct *filterListStructPointer) const;
-    bool checkRegularExpression(QWebEngineUrlRequestInfo &urlRequestInfo, UrlStruct &urlStruct, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
+    bool checkIndividualList(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, FilterListStruct *filterListStructPointer) const;
+    bool checkRegularExpression(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
                                 EntryStruct *entryStructPointer) const;
     bool checkRequestOptions(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt,
                              EntryStruct *entryStructPointer) const;
-    bool checkThirdParty(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const bool isThirdPartyRequest, const QString &filterListTitle, const int sublistInt,
-                         EntryStruct *entryStructPointer) const;
+    bool checkThirdParty(QWebEngineUrlRequestInfo &urlRequestInfo, RequestStruct *requestStructPointer, const QString &filterListTitle, const int sublistInt, EntryStruct *entryStructPointer) const;
     FilterListStruct* populateFilterList(const QString &filterListFileName) const;
     void populateRequestStruct(RequestStruct *requestStructPointer, const int disposition, const QString &filterListTitle, const int sublistInt, EntryStruct *entryStructPointer) const;
     void prepareFilterListString(QString &filterListString, EntryStruct *entryStructPointer) const;
index 18944ea5ae0587bb06940c9f2286bd7a4e6b7358..199abcfac9aa6c0a228ea2368a51981f25f2ad73 100644 (file)
@@ -43,6 +43,7 @@ void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &urlReques
     requestStructPointer->requestMethodString = urlRequestInfo.requestMethod();
     requestStructPointer->resourceTypeInt = urlRequestInfo.resourceType();
     requestStructPointer->urlString = urlRequestInfo.requestUrl().toString();
+    requestStructPointer->webPageUrlString = urlRequestInfo.firstPartyUrl().toString();
 
     // Check the filter lists.
     bool continueProcessing = globalFilterListHelperPointer->checkFilterLists(urlRequestInfo, requestStructPointer);
index 3354a6a9e7ef4e70bb33f47c0ee68f6cf2261c64..6b0fed550804c969c0e9f741cc035770d4352d57 100644 (file)
  * along with Privacy Browser PC.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef ENTRYSTRUCT_H
-#define ENTRYSTRUCT_H
-
-// Application headers.
-#include "enums/FilterOptionEnum.h"
+#ifndef ENTRY_STRUCT_H
+#define ENTRY_STRUCT_H
 
 // Qt toolkit headers.
 #include <QStringList>
 
+enum FilterOptionDisposition
+{
+    Null = 0,
+    Apply = 1,
+    Override = 2,
+};
+
 struct EntryStruct
 {
     // The strings.
@@ -47,18 +51,18 @@ struct EntryStruct
     int sizeOfAppliedEntryList;
 
     // The filter options.
-    FilterOptionEnum::Disposition domain = FilterOptionEnum::Disposition::Null;
-    FilterOptionEnum::Disposition font = FilterOptionEnum::Disposition::Null;
-    FilterOptionEnum::Disposition image = FilterOptionEnum::Disposition::Null;
-    FilterOptionEnum::Disposition mainFrame = FilterOptionEnum::Disposition::Null;
-    FilterOptionEnum::Disposition media = FilterOptionEnum::Disposition::Null;
-    FilterOptionEnum::Disposition object = FilterOptionEnum::Disposition::Null;
-    FilterOptionEnum::Disposition other = FilterOptionEnum::Disposition::Null;
-    FilterOptionEnum::Disposition ping = FilterOptionEnum::Disposition::Null;
-    FilterOptionEnum::Disposition script = FilterOptionEnum::Disposition::Null;
-    FilterOptionEnum::Disposition styleSheet = FilterOptionEnum::Disposition::Null;
-    FilterOptionEnum::Disposition subFrame = FilterOptionEnum::Disposition::Null;
-    FilterOptionEnum::Disposition thirdParty = FilterOptionEnum::Disposition::Null;
-    FilterOptionEnum::Disposition xmlHttpRequest = FilterOptionEnum::Disposition::Null;
+    FilterOptionDisposition domain = FilterOptionDisposition::Null;
+    FilterOptionDisposition font = FilterOptionDisposition::Null;
+    FilterOptionDisposition image = FilterOptionDisposition::Null;
+    FilterOptionDisposition mainFrame = FilterOptionDisposition::Null;
+    FilterOptionDisposition media = FilterOptionDisposition::Null;
+    FilterOptionDisposition object = FilterOptionDisposition::Null;
+    FilterOptionDisposition other = FilterOptionDisposition::Null;
+    FilterOptionDisposition ping = FilterOptionDisposition::Null;
+    FilterOptionDisposition script = FilterOptionDisposition::Null;
+    FilterOptionDisposition styleSheet = FilterOptionDisposition::Null;
+    FilterOptionDisposition subFrame = FilterOptionDisposition::Null;
+    FilterOptionDisposition thirdParty = FilterOptionDisposition::Null;
+    FilterOptionDisposition xmlHttpRequest = FilterOptionDisposition::Null;
 };
 #endif
index 2866f9e12d401a868d13be4fa4bd09e2864482a0..b6d7c3d69a0185d484970161f68b7c0493a7c2ce 100644 (file)
  * along with Privacy Browser PC.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef REQUESTSTRUCT_H
-#define REQUESTSTRUCT_H
+#ifndef REQUEST_STRUCT_H
+#define REQUEST_STRUCT_H
 
 // Application headers.
 #include "EntryStruct.h"
 
+enum RequestUrlType
+{
+    Url = 0,
+    TruncatedUrl = 1,
+    UrlWithSeparators = 2,
+    TruncatedUrlWithSeparators = 3
+};
+
 struct RequestStruct
 {
     int dispositionInt = 0;  // `0` is the default disposition.
     EntryStruct entryStruct;
     QString filterListTitle;
+    QString fqdn;
+    bool isThirdPartyRequest;
+    RequestUrlType matchedUrlType;
     int navigationTypeInt;
     QString requestMethodString;
     int resourceTypeInt;
     int sublistInt = -1;  // The sublist should be initialized because it is not always set later.
+    QString truncatedUrlString;
+    QString truncatedUrlStringWithSeparators;
     QString urlString;
+    QString urlStringWithSeparators;
+    QString webPageUrlString;
 };
 #endif
diff --git a/src/structs/UrlStruct.h b/src/structs/UrlStruct.h
deleted file mode 100644 (file)
index 76a0371..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2024 Soren Stoutner <soren@stoutner.com>.
- *
- * This file is part of Privacy Browser PC <https://www.stoutner.com/privacy-browser-pc/>.
- *
- * Privacy Browser PC is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Privacy Browser PC is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Privacy Browser PC.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef URLSTRUCT_H
-#define URLSTRUCT_H
-
-// Qt toolkit headers.
-#include <QString>
-
-struct UrlStruct
-{
-    QString urlString;
-    QString urlStringWithSeparators;
-    QString truncatedUrlString;
-    QString truncatedUrlStringWithSeparators;
-    QString fqdn;
-    bool isThirdPartyRequest;
-};
-#endif
index c465d16f6832c150fe2541af88f87ac3efea2660..4838cacbf7083d9689a5ce1635ee4f24117cc237 100644 (file)
@@ -27,7 +27,7 @@
                 <layout class="QHBoxLayout">
                     <!-- Filter List. -->
                     <item>
-                        <widget class="QLabel" name="filterListLabel">
+                        <widget class="QLabel">
                             <property name="text">
                                 <string>Filter List</string>
                             </property>
@@ -49,7 +49,7 @@
 
                     <!-- Sublist. -->
                     <item>
-                        <widget class="QLabel" name="sublistLabel">
+                        <widget class="QLabel">
                             <property name="text">
                                 <string>Sublist</string>
                             </property>
@@ -75,7 +75,7 @@
             <item>
                 <layout class="QHBoxLayout">
                     <item>
-                        <widget class="QLabel" name="appliedEntryListLabel">
+                        <widget class="QLabel">
                             <property name="text">
                                 <string>Applied Entry List</string>
                             </property>
                 <layout class="QHBoxLayout">
                     <!-- Domain. -->
                     <item>
-                        <widget class="QLabel" name="domainLabel">
+                        <widget class="QLabel">
                             <property name="text">
                                 <string>Domain</string>
                             </property>
 
                     <!-- Third Party. -->
                     <item>
-                        <widget class="QLabel" name="thirdPartyLabel">
+                        <widget class="QLabel">
                             <property name="text">
                                 <string>Third Party</string>
                             </property>
 
                     <!-- Initial Match. -->
                     <item>
-                        <widget class="QLabel" name="initialMatchLabel">
+                        <widget class="QLabel">
                             <property name="text">
                                 <string>Initial Match</string>
                             </property>
 
                     <!-- Final Match. -->
                     <item>
-                        <widget class="QLabel" name="finalMatchLabel">
+                        <widget class="QLabel">
                             <property name="text">
                                 <string>Final Match</string>
                             </property>
                 <layout class="QHBoxLayout">
                     <!-- Domain List. -->
                     <item>
-                        <widget class="QLabel" name="domainListLabel">
+                        <widget class="QLabel">
                             <property name="text">
                                 <string>Domain List</string>
                             </property>
                             <layout class="QGridLayout">
                                 <!-- Font. -->
                                 <item row="0" column="0">
-                                    <widget class="QLabel" name="fontLabel">
+                                    <widget class="QLabel">
                                         <property name="text">
                                             <string>Font</string>
                                         </property>
 
                                 <!-- Image. -->
                                 <item row="0" column="2">
-                                    <widget class="QLabel" name="imageLabel">
+                                    <widget class="QLabel">
                                         <property name="text">
                                             <string>Image</string>
                                         </property>
 
                                 <!-- Main Frame. -->
                                 <item row="0" column="4">
-                                    <widget class="QLabel" name="mainFrameLabel">
+                                    <widget class="QLabel">
                                         <property name="text">
                                             <string>Main Frame</string>
                                         </property>
 
                                 <!-- Media. -->
                                 <item row="0" column="6">
-                                    <widget class="QLabel" name="mediaLabel">
+                                    <widget class="QLabel">
                                         <property name="text">
                                             <string>Media</string>
                                         </property>
 
                                 <!-- Object. -->
                                 <item row="1" column="0">
-                                    <widget class="QLabel" name="objectLabel">
+                                    <widget class="QLabel">
                                         <property name="text">
                                             <string>Object</string>
                                         </property>
 
                                 <!-- Other. -->
                                 <item row="1" column="2">
-                                    <widget class="QLabel" name="otherLabel">
+                                    <widget class="QLabel">
                                         <property name="text">
                                             <string>Other</string>
                                         </property>
 
                                 <!-- Ping. -->
                                 <item row="1" column="4">
-                                    <widget class="QLabel" name="pingLabel">
+                                    <widget class="QLabel">
                                         <property name="text">
                                             <string>Ping</string>
                                         </property>
 
                                 <!-- Script. -->
                                 <item row="1" column="6">
-                                    <widget class="QLabel" name="scriptLabel">
+                                    <widget class="QLabel">
                                         <property name="text">
                                             <string>Script</string>
                                         </property>
 
                                 <!-- Style Sheet. -->
                                 <item row="2" column="0">
-                                    <widget class="QLabel" name="styleSheetLabel">
+                                    <widget class="QLabel">
                                         <property name="text">
                                             <string>Style Sheet</string>
                                         </property>
 
                                 <!-- Sub Frame. -->
                                 <item row="2" column="2">
-                                    <widget class="QLabel" name="subFrameLabel">
+                                    <widget class="QLabel">
                                         <property name="text">
                                             <string>Sub Frame</string>
                                         </property>
 
                                 <!-- XML HTTP Request. -->
                                 <item row="2" column="4">
-                                    <widget class="QLabel" name="xmlHttpRequestLabel">
+                                    <widget class="QLabel">
                                         <property name="text">
                                             <string>XML HTTP Request</string>
                                         </property>
             <item>
                 <layout class="QHBoxLayout">
                     <item>
-                        <widget class="QLabel" name="appliedFilterOptionsLabel">
+                        <widget class="QLabel">
                             <property name="text">
                                 <string>Applied Filter Options</string>
                             </property>
             <item>
                 <layout class="QHBoxLayout">
                     <item>
-                        <widget class="QLabel" name="originalFilterOptionsLabel">
+                        <widget class="QLabel">
                             <property name="text">
                                 <string>Original Filter Options</string>
                             </property>
             <item>
                 <layout class="QHBoxLayout">
                     <item>
-                        <widget class="QLabel" name="originalEntryLabel">
+                        <widget class="QLabel">
                             <property name="text">
                                 <string>Original Entry</string>
                             </property>
index d0a471d54cccebbf8bbc2bfd10210dafe7324549..35a5f139d59e09633c9452ea600cbd32f0c02653 100644 (file)
 
     <widget class="QWidget">
         <layout class="QVBoxLayout">
+            <item>
+                <widget class="QLabel">
+                    <property name="text">
+                        <string>Request</string>
+                    </property>
+
+                    <property name="font">
+                        <font>
+                            <pointsize>22</pointsize>
+                            <bold>true</bold>
+                        </font>
+                    </property>
+
+                    <property name="alignment">
+                        <set>Qt::AlignCenter</set>
+                    </property>
+                </widget>
+            </item>
+
             <!-- Disposition. -->
             <item>
                 <layout class="QHBoxLayout">
                 </layout>
             </item>
 
-            <!-- URL. -->
+            <!-- Web Page URL. -->
             <item>
                 <layout class="QHBoxLayout">
                     <item>
                         <widget class="QLabel">
                             <property name="text">
-                                <string>URL</string>
+                                <string>Web Page URL</string>
                             </property>
                         </widget>
                     </item>
 
                     <item>
-                        <widget class="QLineEdit" name="urlLineEdit">
+                        <widget class="QLineEdit" name="webPageUrlLineEdit">
                             <property name="readOnly">
                                 <bool>true</bool>
                             </property>
                 </layout>
             </item>
 
+            <!-- Request URLs. -->
+            <item>
+                <widget class="QGroupBox">
+                    <!-- Has Request Options. -->
+                    <layout class="QFormLayout">
+                        <!-- Request URL. -->
+                        <item row="0" column="0">
+                            <widget class="QLabel">
+                                <property name="text">
+                                    <string>Request URL</string>
+                                </property>
+                            </widget>
+                        </item>
+
+                        <item row="0" column="1">
+                            <widget class="QLineEdit" name="requestUrlLineEdit">
+                                <property name="readOnly">
+                                    <bool>true</bool>
+                                </property>
+
+                                <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                <property name="focusPolicy">
+                                    <enum>Qt::NoFocus</enum>
+                                </property>
+                            </widget>
+                        </item>
+
+                        <!-- Request URL With Separators. -->
+                        <item row="1" column="0">
+                            <widget class="QLabel">
+                                <property name="text">
+                                    <string>Request URL With Separators</string>
+                                </property>
+                            </widget>
+                        </item>
+
+                        <item row="1" column="1">
+                            <widget class="QLineEdit" name="requestUrlWithSeparatorsLineEdit">
+                                <property name="readOnly">
+                                    <bool>true</bool>
+                                </property>
+
+                                <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                <property name="focusPolicy">
+                                    <enum>Qt::NoFocus</enum>
+                                </property>
+                            </widget>
+                        </item>
+
+                        <!-- Truncated Request URL. -->
+                        <item row="2" column="0">
+                            <widget class="QLabel">
+                                <property name="text">
+                                    <string>Truncated Request URL</string>
+                                </property>
+                            </widget>
+                        </item>
+
+                        <item row="2" column="1">
+                            <widget class="QLineEdit" name="truncatedRequestUrlLineEdit">
+                                <property name="readOnly">
+                                    <bool>true</bool>
+                                </property>
+
+                                <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                <property name="focusPolicy">
+                                    <enum>Qt::NoFocus</enum>
+                                </property>
+                            </widget>
+                        </item>
+
+                        <!-- Truncated Request URL With Separators. -->
+                        <item row="3" column="0">
+                            <widget class="QLabel">
+                                <property name="text">
+                                    <string>Truncated Request URL With Separators</string>
+                                </property>
+                            </widget>
+                        </item>
+
+                        <item row="3" column="1">
+                            <widget class="QLineEdit" name="truncatedRequestUrlWithSeparatorsLineEdit">
+                                <property name="readOnly">
+                                    <bool>true</bool>
+                                </property>
+
+                                <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                <property name="focusPolicy">
+                                    <enum>Qt::NoFocus</enum>
+                                </property>
+                            </widget>
+                        </item>
+                    </layout>
+                </widget>
+            </item>
+
             <item>
                 <layout class="QHBoxLayout">
                     <!-- Request Method. -->
                         </widget>
                     </item>
 
-                    <!-- Resource Type. -->
+                    <!-- Third Party Request. -->
                     <item>
                         <widget class="QLabel">
                             <property name="text">
-                                <string>Resource Type</string>
-                            </property>
-                        </widget>
-                    </item>
-
-                    <item>
-                        <widget class="QLineEdit" name="resourceTypeLineEdit">
-                            <property name="readOnly">
-                                <bool>true</bool>
-                            </property>
-
-                            <!-- Disabling focus allows the arrow keys to activate the buttons. -->
-                            <property name="focusPolicy">
-                                <enum>Qt::NoFocus</enum>
-                            </property>
-                        </widget>
-                    </item>
-                </layout>
-            </item>
-
-            <!-- Horizontal line. -->
-            <item>
-                <widget class="Line" name="horizontalLine">
-                    <property name="orientation">
-                        <enum>Qt::Horizontal</enum>
-                    </property>
-                </widget>
-            </item>
-
-            <!-- Filter List. -->
-            <item>
-                <layout class="QHBoxLayout">
-                    <item>
-                        <widget class="QLabel" name="filterListLabel">
-                            <property name="text">
-                                <string>Filter List</string>
-                            </property>
-                        </widget>
-                    </item>
-
-                    <item>
-                        <widget class="QLineEdit" name="filterListLineEdit">
-                            <property name="readOnly">
-                                <bool>true</bool>
-                            </property>
-
-                            <!-- Disabling focus allows the arrow keys to activate the buttons. -->
-                            <property name="focusPolicy">
-                                <enum>Qt::NoFocus</enum>
-                            </property>
-                        </widget>
-                    </item>
-                </layout>
-            </item>
-
-            <!-- Sublist. -->
-            <item>
-                <layout class="QHBoxLayout">
-                    <item>
-                        <widget class="QLabel" name="sublistLabel">
-                            <property name="text">
-                                <string>Sublist</string>
+                                <string>Third Party</string>
                             </property>
                         </widget>
                     </item>
 
                     <item>
-                        <widget class="QLineEdit" name="sublistListLineEdit">
+                        <widget class="QLineEdit" name="thirdPartyRequestLineEdit">
                             <property name="readOnly">
                                 <bool>true</bool>
                             </property>
                             </property>
                         </widget>
                     </item>
-                </layout>
-            </item>
 
-            <!-- Applied Entry. -->
-            <item>
-                <layout class="QHBoxLayout">
+                    <!-- Resource Type. -->
                     <item>
-                        <widget class="QLabel" name="appliedEntryListLabel">
+                        <widget class="QLabel">
                             <property name="text">
-                                <string>Applied Entry List</string>
+                                <string>Resource Type</string>
                             </property>
                         </widget>
                     </item>
 
                     <item>
-                        <widget class="QLineEdit" name="appliedEntryListLineEdit">
+                        <widget class="QLineEdit" name="resourceTypeLineEdit">
                             <property name="readOnly">
                                 <bool>true</bool>
                             </property>
                 </layout>
             </item>
 
-            <!-- Original Entry. -->
             <item>
-                <layout class="QHBoxLayout">
-                    <item>
-                        <widget class="QLabel" name="originalEntryLabel">
-                            <property name="text">
-                                <string>Original Entry</string>
-                            </property>
-                        </widget>
-                    </item>
-
-                    <item>
-                        <widget class="QLineEdit" name="originalEntryLineEdit">
-                            <property name="readOnly">
-                                <bool>true</bool>
-                            </property>
-
-                            <!-- Disabling focus allows the arrow keys to activate the buttons. -->
-                            <property name="focusPolicy">
-                                <enum>Qt::NoFocus</enum>
-                            </property>
-                        </widget>
-                    </item>
-                </layout>
+                <widget class="QWidget" name="filterListEntryWidget">
+                    <layout class="QVBoxLayout">
+                        <!-- Horizontal line. -->
+                        <item>
+                            <widget class="Line">
+                                <property name="orientation">
+                                    <enum>Qt::Horizontal</enum>
+                                </property>
+                            </widget>
+                        </item>
+
+                        <item>
+                            <widget class="QLabel">
+                                <property name="text">
+                                    <string>Filter List Entry</string>
+                                </property>
+
+                                <property name="font">
+                                    <font>
+                                        <pointsize>22</pointsize>
+                                        <bold>true</bold>
+                                    </font>
+                                </property>
+
+                                <property name="alignment">
+                                    <set>Qt::AlignCenter</set>
+                                </property>
+                            </widget>
+                        </item>
+
+                        <item>
+                            <layout class="QHBoxLayout">
+                                <!-- Filter List. -->
+                                <item>
+                                    <layout class="QHBoxLayout">
+                                        <item>
+                                            <widget class="QLabel">
+                                                <property name="text">
+                                                    <string>Filter List</string>
+                                                </property>
+                                            </widget>
+                                        </item>
+
+                                        <item>
+                                            <widget class="QLineEdit" name="filterListLineEdit">
+                                                <property name="readOnly">
+                                                    <bool>true</bool>
+                                                </property>
+
+                                                <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                                <property name="focusPolicy">
+                                                    <enum>Qt::NoFocus</enum>
+                                                </property>
+                                            </widget>
+                                        </item>
+                                    </layout>
+                                </item>
+
+                                <!-- Sublist. -->
+                                <item>
+                                    <widget class="QLabel">
+                                        <property name="text">
+                                            <string>Sublist</string>
+                                        </property>
+                                    </widget>
+                                </item>
+
+                                <item>
+                                    <widget class="QLineEdit" name="sublistListLineEdit">
+                                        <property name="readOnly">
+                                            <bool>true</bool>
+                                        </property>
+
+                                        <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                        <property name="focusPolicy">
+                                            <enum>Qt::NoFocus</enum>
+                                        </property>
+                                    </widget>
+                                </item>
+                            </layout>
+                        </item>
+
+                        <!-- Applied Entry. -->
+                        <item>
+                            <layout class="QHBoxLayout">
+                                <item>
+                                    <widget class="QLabel">
+                                        <property name="text">
+                                            <string>Applied Entry List</string>
+                                        </property>
+                                    </widget>
+                                </item>
+
+                                <item>
+                                    <widget class="QLineEdit" name="appliedEntryListLineEdit">
+                                        <property name="readOnly">
+                                            <bool>true</bool>
+                                        </property>
+
+                                        <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                        <property name="focusPolicy">
+                                            <enum>Qt::NoFocus</enum>
+                                        </property>
+                                    </widget>
+                                </item>
+                            </layout>
+                        </item>
+
+                        <item>
+                            <layout class="QHBoxLayout">
+                                <!-- Domain. -->
+                                <item>
+                                    <widget class="QLabel">
+                                        <property name="text">
+                                            <string>Domain</string>
+                                        </property>
+                                    </widget>
+                                </item>
+
+                                <item>
+                                    <widget class="QLineEdit" name="domainLineEdit">
+                                        <property name="readOnly">
+                                            <bool>true</bool>
+                                        </property>
+
+                                        <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                        <property name="focusPolicy">
+                                            <enum>Qt::NoFocus</enum>
+                                        </property>
+                                    </widget>
+                                </item>
+
+                                <!-- Third Party Filter. -->
+                                <item>
+                                    <widget class="QLabel">
+                                        <property name="text">
+                                            <string>Third Party</string>
+                                        </property>
+
+                                        <property name="alignment">
+                                            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                                        </property>
+                                    </widget>
+                                </item>
+
+                                <item>
+                                    <widget class="QLineEdit" name="thirdPartyFilterLineEdit">
+                                        <property name="readOnly">
+                                            <bool>true</bool>
+                                        </property>
+
+                                        <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                        <property name="focusPolicy">
+                                            <enum>Qt::NoFocus</enum>
+                                        </property>
+                                    </widget>
+                                </item>
+
+                                <!-- Initial Match. -->
+                                <item>
+                                    <widget class="QLabel">
+                                        <property name="text">
+                                            <string>Initial Match</string>
+                                        </property>
+                                    </widget>
+                                </item>
+
+                                <item>
+                                    <widget class="QLineEdit" name="initialMatchLineEdit">
+                                        <property name="readOnly">
+                                            <bool>true</bool>
+                                        </property>
+
+                                        <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                        <property name="focusPolicy">
+                                            <enum>Qt::NoFocus</enum>
+                                        </property>
+                                    </widget>
+                                </item>
+
+                                <!-- Final Match. -->
+                                <item>
+                                    <widget class="QLabel">
+                                        <property name="text">
+                                            <string>Final Match</string>
+                                        </property>
+                                    </widget>
+                                </item>
+
+                                <item>
+                                    <widget class="QLineEdit" name="finalMatchLineEdit">
+                                        <property name="readOnly">
+                                            <bool>true</bool>
+                                        </property>
+
+                                        <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                        <property name="focusPolicy">
+                                            <enum>Qt::NoFocus</enum>
+                                        </property>
+                                    </widget>
+                                </item>
+                            </layout>
+                        </item>
+
+                        <item>
+                            <layout class="QHBoxLayout">
+                                <!-- Domain List. -->
+                                <item>
+                                    <widget class="QLabel">
+                                        <property name="text">
+                                            <string>Domain List</string>
+                                        </property>
+                                    </widget>
+                                </item>
+
+                                <item>
+                                    <widget class="QLineEdit" name="domainListLineEdit">
+                                        <property name="readOnly">
+                                            <bool>true</bool>
+                                        </property>
+
+                                        <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                        <property name="focusPolicy">
+                                            <enum>Qt::NoFocus</enum>
+                                        </property>
+                                    </widget>
+                                </item>
+                            </layout>
+                        </item>
+
+                        <item>
+                            <!-- Request Options. -->
+                            <widget class="QGroupBox">
+                                <!-- Has Request Options. -->
+                                <layout class="QVBoxLayout">
+                                    <item>
+                                        <layout class="QHBoxLayout">
+                                            <item>
+                                                <spacer>
+                                                    <property name="orientation">
+                                                        <enum>Qt::Horizontal</enum>
+                                                    </property>
+                                                </spacer>
+                                            </item>
+
+                                            <item>
+                                                <widget class="QCheckBox" name="hasRequestOptionsCheckBox">
+                                                    <property name="text">
+                                                        <string>Has Request Options</string>
+                                                    </property>
+
+                                                    <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                                    <property name="focusPolicy">
+                                                        <enum>Qt::NoFocus</enum>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <item>
+                                                <spacer>
+                                                    <property name="orientation">
+                                                        <enum>Qt::Horizontal</enum>
+                                                    </property>
+                                                </spacer>
+                                            </item>
+                                        </layout>
+                                    </item>
+
+                                    <item>
+                                        <layout class="QGridLayout">
+                                            <!-- Font. -->
+                                            <item row="0" column="0">
+                                                <widget class="QLabel">
+                                                    <property name="text">
+                                                        <string>Font</string>
+                                                    </property>
+
+                                                    <property name="alignment">
+                                                        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <item row="0" column="1">
+                                                <widget class="QLineEdit" name="fontLineEdit">
+                                                    <property name="readOnly">
+                                                        <bool>true</bool>
+                                                    </property>
+
+                                                    <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                                    <property name="focusPolicy">
+                                                        <enum>Qt::NoFocus</enum>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <!-- Image. -->
+                                            <item row="0" column="2">
+                                                <widget class="QLabel">
+                                                    <property name="text">
+                                                        <string>Image</string>
+                                                    </property>
+
+                                                    <property name="alignment">
+                                                        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <item row="0" column="3">
+                                                <widget class="QLineEdit" name="imageLineEdit">
+                                                    <property name="readOnly">
+                                                        <bool>true</bool>
+                                                    </property>
+
+                                                    <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                                    <property name="focusPolicy">
+                                                        <enum>Qt::NoFocus</enum>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <!-- Main Frame. -->
+                                            <item row="0" column="4">
+                                                <widget class="QLabel">
+                                                    <property name="text">
+                                                        <string>Main Frame</string>
+                                                    </property>
+
+                                                    <property name="alignment">
+                                                        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <item row="0" column="5">
+                                                <widget class="QLineEdit" name="mainFrameLineEdit">
+                                                    <property name="readOnly">
+                                                        <bool>true</bool>
+                                                    </property>
+
+                                                    <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                                    <property name="focusPolicy">
+                                                        <enum>Qt::NoFocus</enum>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <!-- Media. -->
+                                            <item row="0" column="6">
+                                                <widget class="QLabel">
+                                                    <property name="text">
+                                                        <string>Media</string>
+                                                    </property>
+
+                                                    <property name="alignment">
+                                                        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <item row="0" column="7">
+                                                <widget class="QLineEdit" name="mediaLineEdit">
+                                                    <property name="readOnly">
+                                                        <bool>true</bool>
+                                                    </property>
+
+                                                    <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                                    <property name="focusPolicy">
+                                                        <enum>Qt::NoFocus</enum>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <!-- Object. -->
+                                            <item row="1" column="0">
+                                                <widget class="QLabel">
+                                                    <property name="text">
+                                                        <string>Object</string>
+                                                    </property>
+
+                                                    <property name="alignment">
+                                                        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <item row="1" column="1">
+                                                <widget class="QLineEdit" name="objectLineEdit">
+                                                    <property name="readOnly">
+                                                        <bool>true</bool>
+                                                    </property>
+
+                                                    <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                                    <property name="focusPolicy">
+                                                        <enum>Qt::NoFocus</enum>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <!-- Other. -->
+                                            <item row="1" column="2">
+                                                <widget class="QLabel">
+                                                    <property name="text">
+                                                        <string>Other</string>
+                                                    </property>
+
+                                                    <property name="alignment">
+                                                        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <item row="1" column="3">
+                                                <widget class="QLineEdit" name="otherLineEdit">
+                                                    <property name="readOnly">
+                                                        <bool>true</bool>
+                                                    </property>
+
+                                                    <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                                    <property name="focusPolicy">
+                                                        <enum>Qt::NoFocus</enum>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <!-- Ping. -->
+                                            <item row="1" column="4">
+                                                <widget class="QLabel">
+                                                    <property name="text">
+                                                        <string>Ping</string>
+                                                    </property>
+
+                                                    <property name="alignment">
+                                                        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <item row="1" column="5">
+                                                <widget class="QLineEdit" name="pingLineEdit">
+                                                    <property name="readOnly">
+                                                        <bool>true</bool>
+                                                    </property>
+
+                                                    <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                                    <property name="focusPolicy">
+                                                        <enum>Qt::NoFocus</enum>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <!-- Script. -->
+                                            <item row="1" column="6">
+                                                <widget class="QLabel">
+                                                    <property name="text">
+                                                        <string>Script</string>
+                                                    </property>
+
+                                                    <property name="alignment">
+                                                        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <item row="1" column="7">
+                                                <widget class="QLineEdit" name="scriptLineEdit">
+                                                    <property name="readOnly">
+                                                        <bool>true</bool>
+                                                    </property>
+
+                                                    <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                                    <property name="focusPolicy">
+                                                        <enum>Qt::NoFocus</enum>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <!-- Style Sheet. -->
+                                            <item row="2" column="0">
+                                                <widget class="QLabel">
+                                                    <property name="text">
+                                                        <string>Style Sheet</string>
+                                                    </property>
+
+                                                    <property name="alignment">
+                                                        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <item row="2" column="1">
+                                                <widget class="QLineEdit" name="styleSheetLineEdit">
+                                                    <property name="readOnly">
+                                                        <bool>true</bool>
+                                                    </property>
+
+                                                    <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                                    <property name="focusPolicy">
+                                                        <enum>Qt::NoFocus</enum>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <!-- Sub Frame. -->
+                                            <item row="2" column="2">
+                                                <widget class="QLabel">
+                                                    <property name="text">
+                                                        <string>Sub Frame</string>
+                                                    </property>
+
+                                                    <property name="alignment">
+                                                        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <item row="2" column="3">
+                                                <widget class="QLineEdit" name="subFrameLineEdit">
+                                                    <property name="readOnly">
+                                                        <bool>true</bool>
+                                                    </property>
+
+                                                    <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                                    <property name="focusPolicy">
+                                                        <enum>Qt::NoFocus</enum>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <!-- XML HTTP Request. -->
+                                            <item row="2" column="4">
+                                                <widget class="QLabel">
+                                                    <property name="text">
+                                                        <string>XML HTTP Request</string>
+                                                    </property>
+
+                                                    <property name="alignment">
+                                                        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+                                                    </property>
+                                                </widget>
+                                            </item>
+
+                                            <item row="2" column="5">
+                                                <widget class="QLineEdit" name="xmlHttpRequestLineEdit">
+                                                    <property name="readOnly">
+                                                        <bool>true</bool>
+                                                    </property>
+
+                                                    <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                                    <property name="focusPolicy">
+                                                        <enum>Qt::NoFocus</enum>
+                                                    </property>
+                                                </widget>
+                                            </item>
+                                        </layout>
+                                    </item>
+                                </layout>
+                            </widget>
+                        </item>
+
+                        <!-- Applied Filter Options. -->
+                        <item>
+                            <layout class="QHBoxLayout">
+                                <item>
+                                    <widget class="QLabel">
+                                        <property name="text">
+                                            <string>Applied Filter Options</string>
+                                        </property>
+                                    </widget>
+                                </item>
+
+                                <item>
+                                    <widget class="QLineEdit" name="appliedFilterOptionsLineEdit">
+                                        <property name="readOnly">
+                                            <bool>true</bool>
+                                        </property>
+
+                                        <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                        <property name="focusPolicy">
+                                            <enum>Qt::NoFocus</enum>
+                                        </property>
+                                    </widget>
+                                </item>
+                            </layout>
+                        </item>
+
+                        <!-- Original Filter Options. -->
+                        <item>
+                            <layout class="QHBoxLayout">
+                                <item>
+                                    <widget class="QLabel">
+                                        <property name="text">
+                                            <string>Original Filter Options</string>
+                                        </property>
+                                    </widget>
+                                </item>
+
+                                <item>
+                                    <widget class="QLineEdit" name="originalFilterOptionsLineEdit">
+                                        <property name="readOnly">
+                                            <bool>true</bool>
+                                        </property>
+
+                                        <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                        <property name="focusPolicy">
+                                            <enum>Qt::NoFocus</enum>
+                                        </property>
+                                    </widget>
+                                </item>
+                            </layout>
+                        </item>
+
+                        <!-- Original Entry. -->
+                        <item>
+                            <layout class="QHBoxLayout">
+                                <item>
+                                    <widget class="QLabel">
+                                        <property name="text">
+                                            <string>Original Entry</string>
+                                        </property>
+                                    </widget>
+                                </item>
+
+                                <item>
+                                    <widget class="QLineEdit" name="originalEntryLineEdit">
+                                        <property name="readOnly">
+                                            <bool>true</bool>
+                                        </property>
+
+                                        <!-- Disabling focus allows the arrow keys to activate the buttons. -->
+                                        <property name="focusPolicy">
+                                            <enum>Qt::NoFocus</enum>
+                                        </property>
+                                    </widget>
+                                </item>
+                            </layout>
+                        </item>
+                    </layout>
+                </widget>
             </item>
 
             <!-- Spacer. -->