X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=blobdiff_plain;f=src%2Fviews%2FBrowserView.cpp;fp=src%2Fviews%2FBrowserView.cpp;h=0000000000000000000000000000000000000000;hp=f17a237d6d33d962db9315eb3a9602504f79bddc;hb=0d23ee5e9b43b247cdda0a4cbb73f8b1a70f4500;hpb=e28b208d6f953d24bd05927a16775d103714fd36 diff --git a/src/views/BrowserView.cpp b/src/views/BrowserView.cpp deleted file mode 100644 index f17a237..0000000 --- a/src/views/BrowserView.cpp +++ /dev/null @@ -1,754 +0,0 @@ -/* - * Copyright © 2022 Soren Stoutner . - * - * This file is part of 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 . - */ - -// Application headers. -#include "BrowserView.h" -#include "Settings.h" -#include "ui_BrowserView.h" -#include "databases/CookiesDatabase.h" -#include "databases/DomainsDatabase.h" -#include "dialogs/SaveDialog.h" -#include "filters/MouseEventFilter.h" -#include "helpers/SearchEngineHelper.h" -#include "helpers/UserAgentHelper.h" -#include "interceptors/UrlRequestInterceptor.h" -#include "windows/BrowserWindow.h" - -// KDE Framework headers. -#include -#include - -// Qt toolkit headers. -#include -#include -#include -#include -#include - -// Initialize the public static variables. -QString BrowserView::webEngineDefaultUserAgent = QStringLiteral(""); - -// Construct the class. -BrowserView::BrowserView(QWidget *parent) : QWidget(parent) -{ - // Initialize the variables. - privacyWebEngineListPointer = new QList; - - // Instantiate the browser view UI. - Ui::BrowserView browserViewUi; - - // Setup the UI. - browserViewUi.setupUi(this); - - // Get handles for the views. - webEngineViewPointer = browserViewUi.webEngineView; - - // Create an off-the-record profile (the default when no profile name is specified). - webEngineProfilePointer = new QWebEngineProfile(QStringLiteral("")); - - // Create a WebEngine page. - webEnginePagePointer = new QWebEnginePage(webEngineProfilePointer); - - // Set the WebEngine page. - webEngineViewPointer->setPage(webEnginePagePointer); - - // Handle full screen requests. - connect(webEnginePagePointer, SIGNAL(fullScreenRequested(QWebEngineFullScreenRequest)), this, SLOT(fullScreenRequested(QWebEngineFullScreenRequest))); - - // Get handles for the aspects of the WebEngine. - webEngineHistoryPointer = webEnginePagePointer->history(); - webEngineSettingsPointer = webEngineViewPointer->settings(); - webEngineCookieStorePointer = webEngineProfilePointer->cookieStore(); - - // Initialize the current privacy web engine pointer. - currentPrivacyWebEnginePointer = new PrivacyWebEngine(webEngineViewPointer); - - // Populate the privacy web engine list. - privacyWebEngineListPointer->append(currentPrivacyWebEnginePointer); - - // Set the local storage filter. - webEngineCookieStorePointer->setCookieFilter([this](const QWebEngineCookieStore::FilterRequest &filterRequest) - { - //qDebug().noquote().nospace() << "Page URL: " << filterRequest.firstPartyUrl << ", Local storage URL: " << filterRequest.origin << ", Is third-party: " << filterRequest.thirdParty; - - // Block all third party local storage requests, including the sneaky ones that don't register a first party URL. - if (filterRequest.thirdParty || (filterRequest.firstPartyUrl == QStringLiteral(""))) - { - //qDebug() << "Request blocked."; - - // Return false. - return false; - } - - /* TODO. Waiting for a solution to . - // Check each tab to see if this local storage request should be allowed. - for (PrivacyWebEngine *privacyWebEnginePointer : *privacyWebEngineListPointer) - { - //qDebug().noquote().nospace() << "Local storage: " << privacyWebEnginePointer->localStorageEnabled << ". WebEngine URL: " << webEngineViewPointer->url().host() << ". Request Host: " << filterRequest.firstPartyUrl.host(); - - // Allow this local storage request if it comes from a tab with local storage enabled. - if (privacyWebEnginePointer->localStorageEnabled && (webEngineViewPointer->url().host() == filterRequest.firstPartyUrl.host())) - { - //qDebug() << "Request allowed."; - - // Return true. - return true; - } - } - */ - - // Allow the request if it is first party and local storage is enabled. - if (!filterRequest.thirdParty && currentPrivacyWebEnginePointer->localStorageEnabled) - { - // Return true. - return true; - } - - //qDebug() << "Request blocked."; - - // Block any remaining local storage requests. - return false; - }); - - // Process cookie changes. - connect(webEngineCookieStorePointer, SIGNAL(cookieAdded(QNetworkCookie)), this, SLOT(cookieAdded(QNetworkCookie))); - connect(webEngineCookieStorePointer, SIGNAL(cookieRemoved(QNetworkCookie)), this, SLOT(cookieRemoved(QNetworkCookie))); - - // Get a list of durable cookies. - QList *durableCookiesListPointer = CookiesDatabase::getCookies(); - - // Add the durable cookies to the store. - for (QNetworkCookie *cookiePointer : *durableCookiesListPointer) - addCookieToStore(*cookiePointer); - - // Store a copy of the WebEngine default user agent. - webEngineDefaultUserAgent = webEngineProfilePointer->httpUserAgent(); - - // Update the URL line edit when the URL changes. - connect(webEngineViewPointer, SIGNAL(urlChanged(const QUrl)), this, SLOT(updateUrl(const QUrl))); - - // Update the progress bar. - connect(webEngineViewPointer, SIGNAL(loadStarted()), this, SLOT(loadStarted())); - connect(webEngineViewPointer, SIGNAL(loadProgress(const int)), this, SLOT(loadProgress(const int))); - connect(webEngineViewPointer, SIGNAL(loadFinished(const bool)), this, SLOT(loadFinished())); - - // Instantiate the mouse event filter pointer. - MouseEventFilter *mouseEventFilterPointer = new MouseEventFilter(); - - // Install the mouse event filter. - qApp->installEventFilter(mouseEventFilterPointer); - - // Process mouse forward and back commands. - connect(mouseEventFilterPointer, SIGNAL(mouseBack()), this, SLOT(mouseBack())); - connect(mouseEventFilterPointer, SIGNAL(mouseForward()), this, SLOT(mouseForward())); - - // Listen for hovered link URLs. - connect(webEnginePagePointer, SIGNAL(linkHovered(const QString)), this, SLOT(pageLinkHovered(const QString))); - - // Instantiate the URL request interceptor. - UrlRequestInterceptor *urlRequestInterceptorPointer = new UrlRequestInterceptor(); - - // Set the URL request interceptor. - webEngineProfilePointer->setUrlRequestInterceptor(urlRequestInterceptorPointer); - - // Handle file downloads. - connect(webEngineProfilePointer, SIGNAL(downloadRequested(QWebEngineDownloadItem *)), this, SLOT(showSaveDialog(QWebEngineDownloadItem *))); - - // Reapply the domain settings when the host changes. - connect(urlRequestInterceptorPointer, SIGNAL(applyDomainSettings(QString)), this, SLOT(applyDomainSettingsWithoutReloading(QString))); - - // Don't allow JavaScript to open windows. - webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, false); - - // Allow keyboard navigation. - webEngineSettingsPointer->setAttribute(QWebEngineSettings::SpatialNavigationEnabled, true); - - // Enable full screen support. - webEngineSettingsPointer->setAttribute(QWebEngineSettings::FullScreenSupportEnabled, true); - - // Require user interaction to play media. - webEngineSettingsPointer->setAttribute(QWebEngineSettings::PlaybackRequiresUserGesture, true); - - // Limit WebRTC to public IP addresses. - webEngineSettingsPointer->setAttribute(QWebEngineSettings::WebRTCPublicInterfacesOnly, true); - - // Set the focus on the WebEngine view. - webEngineViewPointer->setFocus(); -} - -BrowserView::~BrowserView() -{ - // Delay the deletion of the WebEngine page to prevent the following error: `Release of profile requested but WebEnginePage still not deleted. Expect troubles !` - webEnginePagePointer->deleteLater(); -} - -// The cookie is copied instead of referenced so that changes made to the cookie do not create a race condition with the display of the cookie in the dialog. -void BrowserView::addCookieToStore(QNetworkCookie cookie) const -{ - // Create a url. - QUrl url; - - // Check to see if the domain does not start with a `.` because Qt makes this harder than it should be. - if (!cookie.domain().startsWith(QStringLiteral("."))) - { - // Populate the URL. - url.setHost(cookie.domain()); - url.setScheme(QStringLiteral("https")); - - // Clear the domain from the cookie. - cookie.setDomain(QStringLiteral("")); - } - - // Add the cookie to the store. - webEngineCookieStorePointer->setCookie(cookie, url); -} - -void BrowserView::applyApplicationSettings() -{ - // Set the search engine URL. - searchEngineUrl = SearchEngineHelper::getSearchUrl(Settings::searchEngine()); - - // Emit the update search engine actions signal. - emit updateSearchEngineActions(Settings::searchEngine(), true); -} - -// This exists as a separate function from `applyDomainSettings()` so it can be listed as a slot and function without the need for a boolean argument. -// Once has been resolved this can be `const`. -void BrowserView::applyDomainSettingsAndReload() -{ - // Apply the domain settings. `true` reloads the website. - applyDomainSettings(webEngineViewPointer->url().host(), true); -} - -// This exists as a separate function from `applyDomainSettings()` so it can be listed as a slot and function without the need for a boolean argument. -// Once has been resolved this can be `const`. -void BrowserView::applyDomainSettingsWithoutReloading(const QString &hostname) -{ - // Apply the domain settings `false` does not reload the website. - applyDomainSettings(hostname, false); -} - -// Once has been resolved this can be `const`. -void BrowserView::applyDomainSettings(const QString &hostname, const bool reloadWebsite) -{ - // Get the record for the hostname. - QSqlQuery domainQuery = DomainsDatabase::getDomainQuery(hostname); - - // Check if the hostname has domain settings. - if (domainQuery.isValid()) // The hostname has domain settings. - { - // Get the domain record. - QSqlRecord domainRecord = domainQuery.record(); - - // Set the JavaScript status. - switch (domainRecord.field(DomainsDatabase::JAVASCRIPT).value().toInt()) - { - // Set the default JavaScript status. - case (DomainsDatabase::SYSTEM_DEFAULT): - { - webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, Settings::javaScriptEnabled()); - - break; - } - - // Disable JavaScript. - case (DomainsDatabase::DISABLED): - { - webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, false); - - break; - } - - // Enable JavaScript. - case (DomainsDatabase::ENABLED): - { - webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, true); - - break; - } - } - - // Set the local storage status. - switch (domainRecord.field(DomainsDatabase::LOCAL_STORAGE).value().toInt()) - { - // Set the default local storage status. - case (DomainsDatabase::SYSTEM_DEFAULT): - { - currentPrivacyWebEnginePointer->localStorageEnabled = Settings::localStorageEnabled(); - - break; - } - - // Disable local storage. - case (DomainsDatabase::DISABLED): - { - currentPrivacyWebEnginePointer->localStorageEnabled = false; - - break; - } - - // Enable local storage. - case (DomainsDatabase::ENABLED): - { - currentPrivacyWebEnginePointer->localStorageEnabled = true; - - break; - } - } - - // Set the DOM storage status. - switch (domainRecord.field(DomainsDatabase::DOM_STORAGE).value().toInt()) - { - // Set the default DOM storage status. - case (DomainsDatabase::SYSTEM_DEFAULT): - { - webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, Settings::domStorageEnabled()); - - break; - } - - // Disable DOM storage. - case (DomainsDatabase::DISABLED): - { - webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, false); - - break; - } - - // Enable DOM storage. - case (DomainsDatabase::ENABLED): - { - webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, true); - - break; - } - } - - // Set the user agent. - webEngineProfilePointer->setHttpUserAgent(UserAgentHelper::getResultingDomainSettingsUserAgent(domainRecord.field(DomainsDatabase::USER_AGENT).value().toString())); - - // Check if a custom zoom factor is set. - if (domainRecord.field(DomainsDatabase::ZOOM_FACTOR).value().toInt()) - { - // Store the current zoom factor. - currentZoomFactor = domainRecord.field(DomainsDatabase::CUSTOM_ZOOM_FACTOR).value().toDouble(); - } - else - { - // Reset the current zoom factor. - currentZoomFactor = Settings::zoomFactor(); - } - - // Set the zoom factor. The use of `currentZoomFactor` can be removed once has been resolved. - webEngineViewPointer->setZoomFactor(currentZoomFactor); - - // Apply the domain settings palette to the URL line edit. - emit updateDomainSettingsIndicator(true, domainRecord.field(DomainsDatabase::DOMAIN_NAME).value().toString()); - } - else // The hostname does not have domain settings. - { - // Set the JavaScript status. - webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, Settings::javaScriptEnabled()); - - // Set the local storage status. - currentPrivacyWebEnginePointer->localStorageEnabled = Settings::localStorageEnabled(); - - // Set DOM storage. - webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, Settings::domStorageEnabled()); - - // Set the user agent. - webEngineProfilePointer->setHttpUserAgent(UserAgentHelper::getUserAgentFromDatabaseName(Settings::userAgent())); - - // Store the current zoom factor. This can be removed once has been resolved. - currentZoomFactor = Settings::zoomFactor(); - - // Set the zoom factor. - webEngineViewPointer->setZoomFactor(Settings::zoomFactor()); - - // Apply the no domain settings palette to the URL line edit. - emit updateDomainSettingsIndicator(false, QStringLiteral("")); - } - - // Emit the update actions signals. - emit updateJavaScriptAction(webEngineSettingsPointer->testAttribute(QWebEngineSettings::JavascriptEnabled)); - emit updateLocalStorageAction(currentPrivacyWebEnginePointer->localStorageEnabled); - emit updateDomStorageAction(webEngineSettingsPointer->testAttribute(QWebEngineSettings::LocalStorageEnabled)); - emit updateUserAgentActions(webEngineProfilePointer->httpUserAgent(), true); - emit updateZoomFactorAction(webEngineViewPointer->zoomFactor()); - - // Reload the website if requested. - if (reloadWebsite) - webEngineViewPointer->reload(); -} - -void BrowserView::applyOnTheFlySearchEngine(QAction *searchEngineActionPointer) -{ - // Store the search engine name. - QString searchEngineName = searchEngineActionPointer->text(); - - // Strip out any `&` characters. - searchEngineName.remove('&'); - - // Store the search engine string. - searchEngineUrl = SearchEngineHelper::getSearchUrl(searchEngineName); - - // Update the search engine actionas. - emit updateSearchEngineActions(searchEngineName, false); -} - -void BrowserView::applyOnTheFlyUserAgent(QAction *userAgentActionPointer) const -{ - // Get the user agent name. - QString userAgentName = userAgentActionPointer->text(); - - // Strip out any `&` characters. - userAgentName.remove('&'); - - // Apply the user agent. - webEngineProfilePointer->setHttpUserAgent(UserAgentHelper::getUserAgentFromTranslatedName(userAgentName)); - - // Update the user agent actions. - emit updateUserAgentActions(webEngineProfilePointer->httpUserAgent(), false); - - // Reload the website. - webEngineViewPointer->reload(); -} - -// This can be const once has been resolved. -void BrowserView::applyOnTheFlyZoomFactor(const double &zoomFactor) -{ - // Update the current zoom factor. This can be removed once has been resolved. - currentZoomFactor = zoomFactor; - - // Set the zoom factor. - webEngineViewPointer->setZoomFactor(zoomFactor); -} - -void BrowserView::back() const -{ - // Go back. - webEngineViewPointer->back(); -} - -void BrowserView::cookieAdded(const QNetworkCookie &cookie) const -{ - // Add the cookie to the cookie list. - emit addCookie(cookie); -} - -void BrowserView::cookieRemoved(const QNetworkCookie &cookie) const -{ - // Remove the cookie from the cookie list. - emit removeCookie(cookie); -} - -void BrowserView::deleteAllCookies() const -{ - // Delete all the cookies. - webEngineCookieStorePointer->deleteAllCookies(); -} - -void BrowserView::deleteCookieFromStore(const QNetworkCookie &cookie) const -{ - // Delete the cookie. - webEngineCookieStorePointer->deleteCookie(cookie); -} - -void BrowserView::forward() const -{ - // Go forward. - webEngineViewPointer->forward(); -} - -void BrowserView::fullScreenRequested(QWebEngineFullScreenRequest fullScreenRequest) const -{ - // Make it so. - emit fullScreenRequested(fullScreenRequest.toggleOn()); - - // Accept the request. - fullScreenRequest.accept(); -} - -void BrowserView::home() const -{ - // Load the homepage. - webEngineViewPointer->load(QUrl::fromUserInput(Settings::homepage())); -} - -void BrowserView::loadFinished() const -{ - // Hide the progress bar. - emit hideProgressBar(); -} - -void BrowserView::loadInitialWebsite() -{ - // Apply the application settings. - applyApplicationSettings(); - - // Get the arguments. - QStringList argumentsStringList = qApp->arguments(); - - // Check to see if the arguments lists contains a URL. - if (argumentsStringList.size() > 1) - { - // Load the URL from the arguments list. - webEngineViewPointer->load(QUrl::fromUserInput(argumentsStringList.at(1))); - } - else - { - // Load the homepage. - home(); - } -} - -void BrowserView::loadProgress(const int &progress) const -{ - // Show the progress bar. - emit showProgressBar(progress); -} - -void BrowserView::loadStarted() const -{ - // Show the progress bar. - emit showProgressBar(0); -} - -void BrowserView::loadUrlFromLineEdit(QString url) const -{ - // Decide if the text is more likely to be a URL or a search. - if (url.startsWith("file://")) // The text is likely a file URL. - { - // Load the URL. - webEngineViewPointer->load(QUrl::fromUserInput(url)); - } - else if (url.contains(".")) // The text is likely a URL. - { - // Check if the URL does not start with a valid protocol. - if (!url.startsWith("http")) - { - // Add `https://` to the beginning of the URL. - url = "https://" + url; - } - - // Load the URL. - webEngineViewPointer->load(QUrl::fromUserInput(url)); - } - else // The text is likely a search. - { - // Load the search. - webEngineViewPointer->load(QUrl::fromUserInput(searchEngineUrl + url)); - } -} - -void BrowserView::mouseBack() const -{ - // Go back if possible. - if (webEngineViewPointer->isActiveWindow() && webEngineHistoryPointer->canGoBack()) - { - // Clear the URL line edit focus. - emit clearUrlLineEditFocus(); - - // Go back. - webEngineViewPointer->back(); - } -} - -void BrowserView::mouseForward() const -{ - // Go forward if possible. - if (webEngineViewPointer->isActiveWindow() && webEngineHistoryPointer->canGoForward()) - { - // Clear the URL line edit focus. - emit clearUrlLineEditFocus(); - - // Go forward. - webEngineViewPointer->forward(); - } -} - -void BrowserView::pageLinkHovered(const QString &linkUrl) const -{ - // Emit a signal so that the browser window can update the status bar. - emit linkHovered(linkUrl); -} - -void BrowserView::print() const -{ - // Create a printer. - QPrinter printer; - - // Set the resolution to be 300 dpi. - printer.setResolution(300); - - // Create a printer dialog. - QPrintDialog printDialog(&printer, webEngineViewPointer); - - // Display the dialog and print the page if instructed. - if (printDialog.exec() == QDialog::Accepted) - printWebpage(&printer); -} - -void BrowserView::printPreview() const -{ - // Create a printer. - QPrinter printer; - - // Set the resolution to be 300 dpi. - printer.setResolution(300); - - // Create a print preview dialog. - QPrintPreviewDialog printPreviewDialog(&printer, webEngineViewPointer); - - // Generate the print preview. - connect(&printPreviewDialog, SIGNAL(paintRequested(QPrinter *)), this, SLOT(printWebpage(QPrinter *))); - - // Display the dialog. - printPreviewDialog.exec(); -} - -void BrowserView::printWebpage(QPrinter *printerPointer) const -{ - // Create an event loop. For some reason, the print preview doesn't produce any output unless it is run inside an event loop. - QEventLoop eventLoop; - - // Print the webpage, converting the callback above into a `QWebEngineCallback`. - // Printing requires that the printer be a pointer, not a reference, or it will crash with much cursing. - webEnginePagePointer->print(printerPointer, [&eventLoop](bool printSuccess) - { - // Instruct the compiler to ignore the unused parameter. - (void) printSuccess; - - // Quit the loop. - eventLoop.quit(); - }); - - // Execute the loop. - eventLoop.exec(); -} - -void BrowserView::refresh() const -{ - // Reload the website. - webEngineViewPointer->reload(); -} - -void BrowserView::showSaveDialog(QWebEngineDownloadItem *downloadItemPointer) const -{ - // Instantiate the save dialog. - SaveDialog *saveDialogPointer = new SaveDialog(downloadItemPointer); - - // Connect the save button. - connect(saveDialogPointer, SIGNAL(showSaveFilePickerDialog(QUrl &, QString &)), this, SLOT(showSaveFilePickerDialog(QUrl &, QString &))); - - // Show the dialog. - saveDialogPointer->show(); -} - -void BrowserView::showSaveFilePickerDialog(QUrl &downloadUrl, QString &suggestedFileName) -{ - // Get the download location. - QString downloadDirectory = Settings::downloadLocation(); - - // Resolve the system download directory if specified. - if (downloadDirectory == QStringLiteral("System Download Directory")) - downloadDirectory = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - - // Create a save file dialog. - QFileDialog *saveFileDialogPointer = new QFileDialog(this, i18nc("Save file dialog caption", "Save File"), downloadDirectory); - - // Tell the dialog to use a save button. - saveFileDialogPointer->setAcceptMode(QFileDialog::AcceptSave); - - // Populate the file name from the download item pointer. - saveFileDialogPointer->selectFile(suggestedFileName); - - // Prevent interaction with the parent window while the dialog is open. - saveFileDialogPointer->setWindowModality(Qt::WindowModal); - - // Process the saving of the file. The save file dialog pointer must be captured directly instead of by reference or nasty crashes occur. - auto saveFile = [saveFileDialogPointer, &downloadUrl] () { - // Get the save location. The dialog box should only allow the selecting of one file location. - QUrl saveLocation = saveFileDialogPointer->selectedUrls().value(0); - - // Create a file copy job. `-1` creates the file with default permissions. - KIO::FileCopyJob *fileCopyJobPointer = KIO::file_copy(downloadUrl, saveLocation, -1, KIO::Overwrite); - - // Set the download job to display any error messages. - fileCopyJobPointer->uiDelegate()->setAutoErrorHandlingEnabled(true); - - // Start the download. - fileCopyJobPointer->start(); - }; - - // Handle clicks on the save button. - connect(saveFileDialogPointer, &QDialog::accepted, this, saveFile); - - // Show the dialog. - saveFileDialogPointer->show(); -} - -void BrowserView::toggleDomStorage() const -{ - // Toggle DOM storage. - webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, !webEngineSettingsPointer->testAttribute(QWebEngineSettings::LocalStorageEnabled)); - - // Update the DOM storage action. - emit updateDomStorageAction(webEngineSettingsPointer->testAttribute(QWebEngineSettings::LocalStorageEnabled)); - - // Reload the website. - webEngineViewPointer->reload(); -} - -void BrowserView::toggleJavaScript() const -{ - // Toggle JavaScript. - webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, !webEngineSettingsPointer->testAttribute(QWebEngineSettings::JavascriptEnabled)); - - // Update the JavaScript action. - emit updateJavaScriptAction(webEngineSettingsPointer->testAttribute(QWebEngineSettings::JavascriptEnabled)); - - // Reload the website. - webEngineViewPointer->reload(); -} - -void BrowserView::toggleLocalStorage() -{ - // Toggle local storeage. - currentPrivacyWebEnginePointer->localStorageEnabled = !currentPrivacyWebEnginePointer->localStorageEnabled; - - // Update the local storage action. - emit updateLocalStorageAction(currentPrivacyWebEnginePointer->localStorageEnabled); - - // Reload the website. - webEngineViewPointer->reload(); -} - -void BrowserView::updateUrl(const QUrl &url) const -{ - // Update the URL line edit. - emit updateUrlLineEdit(url); - - // Update the status of the forward and back buttons. - emit updateBackAction(webEngineHistoryPointer->canGoBack()); - emit updateForwardAction(webEngineHistoryPointer->canGoForward()); - - // Reapply the zoom factor. This is a bug in QWebEngineView that resets the zoom with every load. - webEngineViewPointer->setZoomFactor(currentZoomFactor); -}