2929#include " FrmWebBrowser.h"
3030#include " FrmPopup.h"
3131#include " CaptureFullPage.h"
32+ #include " History/FrmHistory.h"
3233
3334static Q_LOGGING_CATEGORY (log, " WebBrowser.Browser" )
3435CFrmWebBrowser::CFrmWebBrowser(CParameterWebBrowser *pPara, bool bMenuBar, QWidget *parent)
@@ -65,6 +66,7 @@ CFrmWebBrowser::CFrmWebBrowser(CParameterWebBrowser *pPara, bool bMenuBar, QWidg
6566 , m_pCaptureFulPage(nullptr )
6667 , m_pRecord(nullptr )
6768 , m_pMultimediaRecord(nullptr )
69+ , m_pHistoryDatabase(nullptr )
6870{
6971 qDebug (log) << Q_FUNC_INFO;
7072 bool check = false ;
@@ -227,6 +229,17 @@ CFrmWebBrowser::CFrmWebBrowser(CParameterWebBrowser *pPara, bool bMenuBar, QWidg
227229
228230 check = connect (&m_tmRecord, &QTimer::timeout, this , &CFrmWebBrowser::slotRecordTimeout);
229231 Q_ASSERT (check);
232+
233+ m_pHistoryDatabase = new CHistoryDatabase (this );
234+ if (m_pHistoryDatabase) {
235+ QString szDb = GetProfile ()->persistentStoragePath ()
236+ + QDir::separator () + " History.db" ;
237+ bool bRet = m_pHistoryDatabase->openDatabase (szDb);
238+ if (!bRet) {
239+ delete m_pHistoryDatabase;
240+ m_pHistoryDatabase = nullptr ;
241+ }
242+ }
230243}
231244
232245CFrmWebBrowser::~CFrmWebBrowser ()
@@ -343,10 +356,13 @@ void CFrmWebBrowser::SetConnect(CFrmWebView* pWeb)
343356 }
344357 });
345358 check = connect (pWeb, &QWebEngineView::urlChanged,
346- this , [&](const QUrl &url){
359+ this , [&](const QUrl &url) {
347360 CFrmWebView* pWeb = qobject_cast<CFrmWebView*>(sender ());
348361 if (IsCurrentView (pWeb))
349362 m_pUrlLineEdit->setText (url.toString ());
363+ if (m_pHistoryDatabase) {
364+ m_pHistoryDatabase->addHistoryEntry (url.toString (), " " );
365+ }
350366 });
351367 Q_ASSERT (check);
352368 check = connect (pWeb, &CFrmWebView::titleChanged,
@@ -359,6 +375,9 @@ void CFrmWebBrowser::SetConnect(CFrmWebView* pWeb)
359375 setWindowTitle (title);
360376 emit sigUpdateTitle ();
361377 }
378+ if (m_pHistoryDatabase) {
379+ m_pHistoryDatabase->updateHistoryEntry (pWeb->url ().toString (), title);
380+ }
362381 });
363382 Q_ASSERT (check);
364383 check = connect (pWeb, &CFrmWebView::favIconChanged,
@@ -371,6 +390,9 @@ void CFrmWebBrowser::SetConnect(CFrmWebView* pWeb)
371390 setWindowIcon (icon);
372391 emit sigUpdateTitle ();
373392 }
393+ if (m_pHistoryDatabase) {
394+ m_pHistoryDatabase->updateHistoryEntry (pWeb->url ().toString (), QString (), icon);
395+ }
374396 });
375397 Q_ASSERT (check);
376398 check = connect (pWeb, &CFrmWebView::sigLinkHovered,
@@ -442,7 +464,16 @@ QWebEngineProfile* CFrmWebBrowser::GetProfile(bool offTheRecord)
442464 bool check = connect (m_profile.get (), &QWebEngineProfile::downloadRequested,
443465 &m_DownloadManager, &CFrmDownloadManager::slotDownloadRequested);
444466 Q_ASSERT (check);
467+ // m_profile->setPersistentCookiesPolicy(QWebEngineProfile::ForcePersistentCookies);
468+ // m_profile->setPersistentStoragePath(m_profile->cachePath() + QDir::separator() + "Persistent");
469+ // m_profile->setHttpCacheMaximumSize(50);
445470 qDebug (log) << " User agent:" << m_profile->httpUserAgent ()
471+ #if QT_VERSION > QT_VERSION_CHECK(6, 8, 0)
472+ // << "AllPermissions:" << m_profile->listAllPermissions()
473+ << " persistentPermissionsPolicy:" << m_profile->persistentPermissionsPolicy ()
474+ #endif
475+ << " persistentCookiesPolicy:" << m_profile->persistentCookiesPolicy ()
476+ << " httpCacheMaximumSize:" << m_profile->httpCacheMaximumSize ()
446477 << " Persistent path:" << m_profile->persistentStoragePath ()
447478 << " Cache path:" << m_profile->cachePath ()
448479 << " Storage name:" << m_profile->storageName ()
@@ -544,7 +575,7 @@ int CFrmWebBrowser::InitMenu(QMenu *pMenu)
544575 pMenu->addAction (m_pForward);
545576 pMenu->addAction (m_pRefresh);
546577 m_pStop = pMenu->addAction (
547- QIcon::fromTheme (" media-playback-stop" ), tr (" Stop" ), this , [&](){
578+ QIcon::fromTheme (" media-playback-stop" ), tr (" Stop" ), this , [&]() {
548579 CFrmWebView* pWeb = CurrentView ();
549580 if (pWeb && pWeb->page ())
550581 pWeb->page ()->action (QWebEnginePage::Stop)->trigger ();
@@ -553,11 +584,34 @@ int CFrmWebBrowser::InitMenu(QMenu *pMenu)
553584 m_pStop->setShortcuts (QKeySequence::Cancel);
554585 m_pStop->setStatusTip (m_pStop->text ());
555586
587+ pMenu->addSeparator ();
588+ pMenu->addAction (tr (" History" ), this , [&]() {
589+ CFrmHistory* pHistory = new CFrmHistory (m_pHistoryDatabase, &m_pPara->m_History );
590+ if (!pHistory) return ;
591+ pHistory->setAttribute (Qt::WA_DeleteOnClose);
592+ connect (this , &CFrmWebBrowser::destroyed, pHistory, &CFrmHistory::close);
593+ connect (pHistory, &CFrmHistory::sigOpenUrl, this , [&](const QString& url) {
594+ CFrmWebView* pWeb = CurrentView ();
595+ if (!pWeb) {
596+ pWeb = qobject_cast<CFrmWebView*>(CreateWindow (QWebEnginePage::WebBrowserTab));
597+ }
598+ if (pWeb)
599+ pWeb->load (url);
600+ });
601+ connect (pHistory, &CFrmHistory::sigOpenUrlInNewTab,
602+ this , [&](const QString& url) {
603+ auto pWeb = qobject_cast<CFrmWebView*>(CreateWindow (QWebEnginePage::WebBrowserTab));
604+ if (pWeb)
605+ pWeb->load (url);
606+ });
607+ pHistory->show ();
608+ });
609+
556610 pMenu->addSeparator ();
557611 pMenu->addAction (m_pAddPage);
558612 m_pAddPageIncognito = pMenu->addAction (
559613 QIcon::fromTheme (" add" ), tr (" Add incognito tab" ),
560- this , [&](){
614+ this , [&]() {
561615 CreateWindow (QWebEnginePage::WebBrowserTab, true );
562616 if (!m_pPara->GetTabUrl ().isEmpty ()) {
563617 m_pUrlLineEdit->setText (m_pPara->GetTabUrl ());
@@ -567,14 +621,14 @@ int CFrmWebBrowser::InitMenu(QMenu *pMenu)
567621 m_pAddPageIncognito->setStatusTip (m_pAddPageIncognito->text ());
568622 m_pAddWindow = pMenu->addAction (
569623 QIcon::fromTheme (" add" ), tr (" Add window" ),
570- this , [&](){
624+ this , [&]() {
571625 CreateWindow (QWebEnginePage::WebBrowserWindow);
572626 });
573627 m_pAddWindow->setVisible (false );
574628 m_pAddWindow->setStatusTip (m_pAddWindow->text ());
575629 m_pAddWindowIncognito = pMenu->addAction (
576630 QIcon::fromTheme (" add" ), tr (" Add Incognito Window" ),
577- this , [&](){
631+ this , [&]() {
578632 CreateWindow (QWebEnginePage::WebBrowserWindow, true );
579633 });
580634 m_pAddWindowIncognito->setVisible (false );
@@ -583,7 +637,7 @@ int CFrmWebBrowser::InitMenu(QMenu *pMenu)
583637 pMenu->addSeparator ();
584638 m_pFind = pMenu->addAction (
585639 QIcon::fromTheme (" edit-find" ), tr (" &Find" ), this ,
586- [&](){
640+ [&]() {
587641 CFrmWebView* pWeb = CurrentView ();
588642 if (pWeb) {
589643 bool ok = false ;
0 commit comments