File indexing completed on 2024-05-12 05:00:23

0001 /* This file is part of the KDE project
0002     SPDX-FileCopyrightText: 2023 Stefano Crocco <stefano.crocco@alice.it>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "implementations/konqbrowser.h"
0008 #include "interfaces/cookiejar.h"
0009 #include "konqapplication.h"
0010 #include "konqmainwindow.h"
0011 #include "konqview.h"
0012 
0013 #include <konqdebug.h>
0014 
0015 #include <KSharedConfig>
0016 #include <KConfigGroup>
0017 #include <KParts/ReadOnlyPart>
0018 
0019 using namespace KonqInterfaces;
0020 
0021 #if QT_VERSION_MAJOR == 6
0022 #define CHROME_VERSION "108.0.5359.220"
0023 #else
0024 #define CHROME_VERSION "87.0.4280.144"
0025 #endif
0026 
0027 QString KonqBrowser::konquerorUserAgent() {
0028     QString s_konqUserAgent{QStringLiteral("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/%1 Chrome/%2 Safari/537.36 Konqueror (WebEngine)").arg(qVersion()).arg(CHROME_VERSION)};
0029     return s_konqUserAgent;
0030 }
0031 
0032 KonqBrowser::KonqBrowser(QObject* parent) : Browser(parent), m_cookieJar(nullptr)
0033 {
0034     applyConfiguration();
0035 }
0036 
0037 KonqBrowser::~KonqBrowser()
0038 {
0039 }
0040 
0041 void KonqBrowser::setCookieJar(CookieJar* jar)
0042 {
0043     m_cookieJar = jar;
0044 }
0045 
0046 CookieJar* KonqBrowser::cookieJar() const
0047 {
0048     return m_cookieJar;
0049 }
0050 
0051 QString KonqBrowser::konqUserAgent() const
0052 {
0053     return konquerorUserAgent();
0054 }
0055 
0056 QString KonqBrowser::defaultUserAgent() const
0057 {
0058     return m_userAgent.defaultUA;
0059 }
0060 
0061 QString KonqBrowser::userAgent() const
0062 {
0063     return m_userAgent.currentUserAgent();
0064 }
0065 
0066 void KonqBrowser::readDefaultUserAgent()
0067 {
0068     const QString oldUA = m_userAgent.currentUserAgent();
0069     KConfigGroup grp = KSharedConfig::openConfig()->group("UserAgent");
0070     if (grp.readEntry("UseDefaultUserAgent", true)) {
0071         m_userAgent.defaultUA = konquerorUserAgent();
0072     } else {
0073         m_userAgent.defaultUA = grp.readEntry("CustomUserAgent", konquerorUserAgent());
0074     }
0075     if (m_userAgent.usingDefaultUA && m_userAgent.defaultUA != oldUA) {
0076         emit userAgentChanged(m_userAgent.defaultUA);
0077     }
0078 }
0079 
0080 void KonqBrowser::applyConfiguration()
0081 {
0082     readDefaultUserAgent();
0083 }
0084 
0085 void KonqBrowser::setTemporaryUserAgent(const QString& newUA)
0086 {
0087     const QString oldUA = userAgent();
0088     m_userAgent.usingDefaultUA = false;
0089     m_userAgent.temporaryUA = newUA;
0090     if (oldUA != newUA) {
0091         emit userAgentChanged(newUA);
0092     }
0093 }
0094 
0095 void KonqBrowser::clearTemporaryUserAgent()
0096 {
0097     const QString oldUA = m_userAgent.currentUserAgent();
0098     m_userAgent.usingDefaultUA = true;
0099     m_userAgent.temporaryUA.clear();
0100     const QString newUA = m_userAgent.currentUserAgent();
0101     if (oldUA != newUA) {
0102         emit userAgentChanged(newUA);
0103     }
0104 }
0105 
0106 bool KonqBrowser::canNavigateTo(KParts::ReadOnlyPart* part, const QUrl &url) const
0107 {
0108     if (!part || !part->widget()) {
0109         return true;
0110     }
0111     KonqMainWindow *mw = qobject_cast<KonqMainWindow*>(part->widget()->window());
0112     if (!mw) {
0113         qCDebug(KONQUEROR_LOG()) << "Part window is not a KonqMainWindow. This shouldn't happen";
0114         return true;
0115     }
0116     KonqView *v = mw->childView(part);
0117     return v ? v->canNavigateTo(url) : true;
0118 }