├── extra └── debian │ ├── compat │ ├── source │ ├── format │ └── lintian-overrides │ ├── rules │ ├── viper-browser.lintian-overrides │ ├── changelog │ ├── copyright │ └── control ├── tests ├── CMakeLists.txt └── core │ ├── CMakeLists.txt │ ├── url_suggestion │ └── CMakeLists.txt │ ├── icons │ └── CMakeLists.txt │ ├── adblock │ └── CMakeLists.txt │ ├── database │ ├── CMakeLists.txt │ └── FakeDatabaseWorker.cpp │ ├── utility │ └── CMakeLists.txt │ ├── history │ └── CMakeLists.txt │ └── bookmarks │ └── CMakeLists.txt ├── .qmake.conf ├── src ├── core │ ├── adblock │ │ ├── FilterBucket.cpp │ │ ├── FilterBucket.h │ │ ├── RecommendedSubscriptions.h │ │ ├── RecommendedSubscriptions.cpp │ │ └── AdBlockLogTableModel.h │ ├── database │ │ ├── CMakeLists.txt │ │ ├── sqlite │ │ │ ├── CMakeLists.txt │ │ │ ├── SQLiteWrapper.h │ │ │ ├── Badge.h │ │ │ ├── Blob.h │ │ │ ├── Row.h │ │ │ └── internal │ │ │ │ ├── implementation.cpp │ │ │ │ └── implementation.h │ │ ├── bindings │ │ │ └── QtSQLite.h │ │ ├── DatabaseWorker.cpp │ │ └── DatabaseWorker.h │ ├── text_finder │ │ └── ITextFinder.cpp │ ├── web │ │ ├── public_suffix │ │ │ ├── PublicSuffixRule.h │ │ │ ├── PublicSuffixRuleParser.h │ │ │ ├── PublicSuffixTree.h │ │ │ ├── PublicSuffixTreeNode.h │ │ │ ├── PublicSuffixRuleParser.cpp │ │ │ └── PublicSuffixManager.h │ │ ├── URL.h │ │ ├── URL.cpp │ │ ├── WebActionProxy.h │ │ └── WebHitTestResult.cpp │ ├── credentials │ │ └── CredentialStore.cpp │ ├── settings │ │ └── ISettingsObserver.h │ ├── icons │ │ ├── FaviconStoreBridge.cpp │ │ └── FaviconStoreBridge.h │ ├── autofill │ │ ├── AutoFillBridge.cpp │ │ └── AutoFillBridge.h │ ├── user_scripts │ │ ├── WebEngineScriptAdapter.h │ │ └── WebEngineScriptAdapter.cpp │ ├── network │ │ ├── ViperSchemeHandler.h │ │ ├── NetworkAccessManager.h │ │ ├── BlockedSchemeHandler.h │ │ ├── SchemeRegistry.h │ │ ├── NetworkAccessManager.cpp │ │ ├── ViperNetworkReply.h │ │ └── ViperSchemeHandler.cpp │ ├── history │ │ ├── ClearHistoryOptions.h │ │ └── URLRecord.cpp │ ├── cookies │ │ └── DetailedCookieTableModel.h │ ├── url_suggestion │ │ ├── URLSuggestion.cpp │ │ └── URLSuggestionListModel.cpp │ ├── bookmarks │ │ ├── BookmarkExporter.h │ │ └── BookmarkImporter.h │ ├── session │ │ └── SessionManager.h │ └── utility │ │ └── FastHash.h ├── plugins │ ├── credential_store_kwallet │ │ ├── credentialstorekwallet.json │ │ └── CMakeLists.txt │ ├── credential_store_secret │ │ ├── credentialstoresecret.json │ │ └── CMakeLists.txt │ └── CMakeLists.txt ├── app │ ├── assets │ │ ├── images │ │ │ ├── logo.png │ │ │ ├── stop.png │ │ │ ├── new-tab.png │ │ │ ├── reload.png │ │ │ ├── edit-find.png │ │ │ ├── plus_icon.png │ │ │ ├── arrow-back.png │ │ │ ├── bookmarked.png │ │ │ ├── https_secure.png │ │ │ ├── reload-white.png │ │ │ ├── search_icon.png │ │ │ ├── stop-white.png │ │ │ ├── window-close.png │ │ │ ├── arrow-forward.png │ │ │ ├── blank_favicon.png │ │ │ ├── document-save.png │ │ │ ├── https_insecure.png │ │ │ ├── new-tab-white.png │ │ │ ├── not_bookmarked.png │ │ │ ├── arrow-back-white.png │ │ │ ├── edit-find-white.png │ │ │ ├── search_icon_white.png │ │ │ ├── arrow-forward-white.png │ │ │ ├── document-save-thick.png │ │ │ ├── document-save-white.png │ │ │ ├── https_secure_bright.png │ │ │ ├── https_insecure_bright.png │ │ │ ├── folder.svg │ │ │ ├── AdBlock.svg │ │ │ ├── AdBlock-white.svg │ │ │ └── folder-new.svg │ │ ├── pdfjs │ │ │ ├── cmaps │ │ │ │ ├── H.bcmap │ │ │ │ ├── V.bcmap │ │ │ │ ├── 78-H.bcmap │ │ │ │ ├── 78-V.bcmap │ │ │ │ ├── Add-H.bcmap │ │ │ │ ├── Add-V.bcmap │ │ │ │ ├── B5-H.bcmap │ │ │ │ ├── B5-V.bcmap │ │ │ │ ├── EUC-H.bcmap │ │ │ │ ├── EUC-V.bcmap │ │ │ │ ├── Ext-H.bcmap │ │ │ │ ├── Ext-V.bcmap │ │ │ │ ├── GB-H.bcmap │ │ │ │ ├── GB-V.bcmap │ │ │ │ ├── GBT-H.bcmap │ │ │ │ ├── GBT-V.bcmap │ │ │ │ ├── KSC-H.bcmap │ │ │ │ ├── KSC-V.bcmap │ │ │ │ ├── NWP-H.bcmap │ │ │ │ ├── NWP-V.bcmap │ │ │ │ ├── Roman.bcmap │ │ │ │ ├── B5pc-H.bcmap │ │ │ │ ├── B5pc-V.bcmap │ │ │ │ ├── CNS1-H.bcmap │ │ │ │ ├── CNS1-V.bcmap │ │ │ │ ├── CNS2-H.bcmap │ │ │ │ ├── CNS2-V.bcmap │ │ │ │ ├── GBK2K-H.bcmap │ │ │ │ ├── GBK2K-V.bcmap │ │ │ │ ├── Hankaku.bcmap │ │ │ │ ├── RKSJ-H.bcmap │ │ │ │ ├── RKSJ-V.bcmap │ │ │ │ ├── 78-EUC-H.bcmap │ │ │ │ ├── 78-EUC-V.bcmap │ │ │ │ ├── 78-RKSJ-H.bcmap │ │ │ │ ├── 78-RKSJ-V.bcmap │ │ │ │ ├── Add-RKSJ-H.bcmap │ │ │ │ ├── Add-RKSJ-V.bcmap │ │ │ │ ├── CNS-EUC-H.bcmap │ │ │ │ ├── CNS-EUC-V.bcmap │ │ │ │ ├── ETHK-B5-H.bcmap │ │ │ │ ├── ETHK-B5-V.bcmap │ │ │ │ ├── ETen-B5-H.bcmap │ │ │ │ ├── ETen-B5-V.bcmap │ │ │ │ ├── Ext-RKSJ-H.bcmap │ │ │ │ ├── Ext-RKSJ-V.bcmap │ │ │ │ ├── GB-EUC-H.bcmap │ │ │ │ ├── GB-EUC-V.bcmap │ │ │ │ ├── GBK-EUC-H.bcmap │ │ │ │ ├── GBK-EUC-V.bcmap │ │ │ │ ├── GBKp-EUC-H.bcmap │ │ │ │ ├── GBKp-EUC-V.bcmap │ │ │ │ ├── GBT-EUC-H.bcmap │ │ │ │ ├── GBT-EUC-V.bcmap │ │ │ │ ├── GBpc-EUC-H.bcmap │ │ │ │ ├── GBpc-EUC-V.bcmap │ │ │ │ ├── HKdla-B5-H.bcmap │ │ │ │ ├── HKdla-B5-V.bcmap │ │ │ │ ├── HKdlb-B5-H.bcmap │ │ │ │ ├── HKdlb-B5-V.bcmap │ │ │ │ ├── HKscs-B5-H.bcmap │ │ │ │ ├── HKscs-B5-V.bcmap │ │ │ │ ├── Hiragana.bcmap │ │ │ │ ├── KSC-EUC-H.bcmap │ │ │ │ ├── KSC-EUC-V.bcmap │ │ │ │ ├── Katakana.bcmap │ │ │ │ ├── WP-Symbol.bcmap │ │ │ │ ├── 78ms-RKSJ-H.bcmap │ │ │ │ ├── 78ms-RKSJ-V.bcmap │ │ │ │ ├── 83pv-RKSJ-H.bcmap │ │ │ │ ├── 90ms-RKSJ-H.bcmap │ │ │ │ ├── 90ms-RKSJ-V.bcmap │ │ │ │ ├── 90msp-RKSJ-H.bcmap │ │ │ │ ├── 90msp-RKSJ-V.bcmap │ │ │ │ ├── 90pv-RKSJ-H.bcmap │ │ │ │ ├── 90pv-RKSJ-V.bcmap │ │ │ │ ├── Adobe-CNS1-0.bcmap │ │ │ │ ├── Adobe-CNS1-1.bcmap │ │ │ │ ├── Adobe-CNS1-2.bcmap │ │ │ │ ├── Adobe-CNS1-3.bcmap │ │ │ │ ├── Adobe-CNS1-4.bcmap │ │ │ │ ├── Adobe-CNS1-5.bcmap │ │ │ │ ├── Adobe-CNS1-6.bcmap │ │ │ │ ├── Adobe-GB1-0.bcmap │ │ │ │ ├── Adobe-GB1-1.bcmap │ │ │ │ ├── Adobe-GB1-2.bcmap │ │ │ │ ├── Adobe-GB1-3.bcmap │ │ │ │ ├── Adobe-GB1-4.bcmap │ │ │ │ ├── Adobe-GB1-5.bcmap │ │ │ │ ├── ETenms-B5-H.bcmap │ │ │ │ ├── ETenms-B5-V.bcmap │ │ │ │ ├── GBTpc-EUC-H.bcmap │ │ │ │ ├── GBTpc-EUC-V.bcmap │ │ │ │ ├── HKgccs-B5-H.bcmap │ │ │ │ ├── HKgccs-B5-V.bcmap │ │ │ │ ├── HKm314-B5-H.bcmap │ │ │ │ ├── HKm314-B5-V.bcmap │ │ │ │ ├── HKm471-B5-H.bcmap │ │ │ │ ├── HKm471-B5-V.bcmap │ │ │ │ ├── KSC-Johab-H.bcmap │ │ │ │ ├── KSC-Johab-V.bcmap │ │ │ │ ├── KSCms-UHC-H.bcmap │ │ │ │ ├── KSCms-UHC-V.bcmap │ │ │ │ ├── KSCpc-EUC-H.bcmap │ │ │ │ ├── KSCpc-EUC-V.bcmap │ │ │ │ ├── UniGB-UCS2-H.bcmap │ │ │ │ ├── UniGB-UCS2-V.bcmap │ │ │ │ ├── UniGB-UTF8-H.bcmap │ │ │ │ ├── UniGB-UTF8-V.bcmap │ │ │ │ ├── UniKS-UCS2-H.bcmap │ │ │ │ ├── UniKS-UCS2-V.bcmap │ │ │ │ ├── UniKS-UTF8-H.bcmap │ │ │ │ ├── UniKS-UTF8-V.bcmap │ │ │ │ ├── Adobe-CNS1-UCS2.bcmap │ │ │ │ ├── Adobe-GB1-UCS2.bcmap │ │ │ │ ├── Adobe-Japan1-0.bcmap │ │ │ │ ├── Adobe-Japan1-1.bcmap │ │ │ │ ├── Adobe-Japan1-2.bcmap │ │ │ │ ├── Adobe-Japan1-3.bcmap │ │ │ │ ├── Adobe-Japan1-4.bcmap │ │ │ │ ├── Adobe-Japan1-5.bcmap │ │ │ │ ├── Adobe-Japan1-6.bcmap │ │ │ │ ├── Adobe-Korea1-0.bcmap │ │ │ │ ├── Adobe-Korea1-1.bcmap │ │ │ │ ├── Adobe-Korea1-2.bcmap │ │ │ │ ├── KSCms-UHC-HW-H.bcmap │ │ │ │ ├── KSCms-UHC-HW-V.bcmap │ │ │ │ ├── UniCNS-UCS2-H.bcmap │ │ │ │ ├── UniCNS-UCS2-V.bcmap │ │ │ │ ├── UniCNS-UTF16-H.bcmap │ │ │ │ ├── UniCNS-UTF16-V.bcmap │ │ │ │ ├── UniCNS-UTF32-H.bcmap │ │ │ │ ├── UniCNS-UTF32-V.bcmap │ │ │ │ ├── UniCNS-UTF8-H.bcmap │ │ │ │ ├── UniCNS-UTF8-V.bcmap │ │ │ │ ├── UniGB-UTF16-H.bcmap │ │ │ │ ├── UniGB-UTF16-V.bcmap │ │ │ │ ├── UniGB-UTF32-H.bcmap │ │ │ │ ├── UniGB-UTF32-V.bcmap │ │ │ │ ├── UniJIS-UCS2-H.bcmap │ │ │ │ ├── UniJIS-UCS2-V.bcmap │ │ │ │ ├── UniJIS-UTF16-H.bcmap │ │ │ │ ├── UniJIS-UTF16-V.bcmap │ │ │ │ ├── UniJIS-UTF32-H.bcmap │ │ │ │ ├── UniJIS-UTF32-V.bcmap │ │ │ │ ├── UniJIS-UTF8-H.bcmap │ │ │ │ ├── UniJIS-UTF8-V.bcmap │ │ │ │ ├── UniKS-UTF16-H.bcmap │ │ │ │ ├── UniKS-UTF16-V.bcmap │ │ │ │ ├── UniKS-UTF32-H.bcmap │ │ │ │ ├── UniKS-UTF32-V.bcmap │ │ │ │ ├── Adobe-Japan1-UCS2.bcmap │ │ │ │ ├── Adobe-Korea1-UCS2.bcmap │ │ │ │ ├── UniJIS-UCS2-HW-H.bcmap │ │ │ │ ├── UniJIS-UCS2-HW-V.bcmap │ │ │ │ ├── UniJIS2004-UTF8-H.bcmap │ │ │ │ ├── UniJIS2004-UTF8-V.bcmap │ │ │ │ ├── UniJISPro-UCS2-V.bcmap │ │ │ │ ├── UniJISPro-UTF8-V.bcmap │ │ │ │ ├── UniJIS2004-UTF16-H.bcmap │ │ │ │ ├── UniJIS2004-UTF16-V.bcmap │ │ │ │ ├── UniJIS2004-UTF32-H.bcmap │ │ │ │ ├── UniJIS2004-UTF32-V.bcmap │ │ │ │ ├── UniJISPro-UCS2-HW-V.bcmap │ │ │ │ ├── UniJISX0213-UTF32-H.bcmap │ │ │ │ ├── UniJISX0213-UTF32-V.bcmap │ │ │ │ ├── UniJISX02132004-UTF32-H.bcmap │ │ │ │ └── UniJISX02132004-UTF32-V.bcmap │ │ │ └── images │ │ │ │ ├── grab.cur │ │ │ │ ├── shadow.png │ │ │ │ ├── grabbing.cur │ │ │ │ ├── texture.png │ │ │ │ ├── loading-icon.gif │ │ │ │ ├── loading-small.png │ │ │ │ ├── loading-small@2x.png │ │ │ │ ├── findbarButton-next.png │ │ │ │ ├── treeitem-collapsed.png │ │ │ │ ├── treeitem-expanded.png │ │ │ │ ├── findbarButton-next@2x.png │ │ │ │ ├── toolbarButton-pageUp.png │ │ │ │ ├── toolbarButton-print.png │ │ │ │ ├── toolbarButton-search.png │ │ │ │ ├── toolbarButton-zoomIn.png │ │ │ │ ├── toolbarButton-zoomOut.png │ │ │ │ ├── treeitem-collapsed@2x.png │ │ │ │ ├── treeitem-expanded@2x.png │ │ │ │ ├── findbarButton-next-rtl.png │ │ │ │ ├── findbarButton-previous.png │ │ │ │ ├── toolbarButton-bookmark.png │ │ │ │ ├── toolbarButton-download.png │ │ │ │ ├── toolbarButton-openFile.png │ │ │ │ ├── toolbarButton-pageDown.png │ │ │ │ ├── toolbarButton-pageUp@2x.png │ │ │ │ ├── toolbarButton-print@2x.png │ │ │ │ ├── toolbarButton-search@2x.png │ │ │ │ ├── toolbarButton-zoomIn@2x.png │ │ │ │ ├── treeitem-collapsed-rtl.png │ │ │ │ ├── findbarButton-next-rtl@2x.png │ │ │ │ ├── findbarButton-previous-rtl.png │ │ │ │ ├── findbarButton-previous@2x.png │ │ │ │ ├── toolbarButton-bookmark@2x.png │ │ │ │ ├── toolbarButton-download@2x.png │ │ │ │ ├── toolbarButton-menuArrows.png │ │ │ │ ├── toolbarButton-openFile@2x.png │ │ │ │ ├── toolbarButton-pageDown-rtl.png │ │ │ │ ├── toolbarButton-pageDown@2x.png │ │ │ │ ├── toolbarButton-pageUp-rtl.png │ │ │ │ ├── toolbarButton-viewOutline.png │ │ │ │ ├── toolbarButton-zoomOut@2x.png │ │ │ │ ├── treeitem-collapsed-rtl@2x.png │ │ │ │ ├── toolbarButton-menuArrows@2x.png │ │ │ │ ├── toolbarButton-pageUp-rtl@2x.png │ │ │ │ ├── toolbarButton-sidebarToggle.png │ │ │ │ ├── toolbarButton-viewOutline@2x.png │ │ │ │ ├── toolbarButton-viewThumbnail.png │ │ │ │ ├── findbarButton-previous-rtl@2x.png │ │ │ │ ├── secondaryToolbarButton-handTool.png │ │ │ │ ├── secondaryToolbarButton-lastPage.png │ │ │ │ ├── secondaryToolbarButton-rotateCw.png │ │ │ │ ├── toolbarButton-pageDown-rtl@2x.png │ │ │ │ ├── toolbarButton-presentationMode.png │ │ │ │ ├── toolbarButton-sidebarToggle-rtl.png │ │ │ │ ├── toolbarButton-sidebarToggle@2x.png │ │ │ │ ├── toolbarButton-viewAttachments.png │ │ │ │ ├── toolbarButton-viewOutline-rtl.png │ │ │ │ ├── toolbarButton-viewThumbnail@2x.png │ │ │ │ ├── secondaryToolbarButton-firstPage.png │ │ │ │ ├── secondaryToolbarButton-rotateCcw.png │ │ │ │ ├── secondaryToolbarButton-selectTool.png │ │ │ │ ├── secondaryToolbarButton-spreadEven.png │ │ │ │ ├── secondaryToolbarButton-spreadNone.png │ │ │ │ ├── secondaryToolbarButton-spreadOdd.png │ │ │ │ ├── toolbarButton-presentationMode@2x.png │ │ │ │ ├── toolbarButton-viewAttachments@2x.png │ │ │ │ ├── toolbarButton-viewOutline-rtl@2x.png │ │ │ │ ├── secondaryToolbarButton-firstPage@2x.png │ │ │ │ ├── secondaryToolbarButton-handTool@2x.png │ │ │ │ ├── secondaryToolbarButton-lastPage@2x.png │ │ │ │ ├── secondaryToolbarButton-rotateCcw@2x.png │ │ │ │ ├── secondaryToolbarButton-rotateCw@2x.png │ │ │ │ ├── secondaryToolbarButton-scrollWrapped.png │ │ │ │ ├── secondaryToolbarButton-selectTool@2x.png │ │ │ │ ├── secondaryToolbarButton-spreadEven@2x.png │ │ │ │ ├── secondaryToolbarButton-spreadNone@2x.png │ │ │ │ ├── secondaryToolbarButton-spreadOdd@2x.png │ │ │ │ ├── toolbarButton-secondaryToolbarToggle.png │ │ │ │ ├── toolbarButton-sidebarToggle-rtl@2x.png │ │ │ │ ├── secondaryToolbarButton-scrollVertical.png │ │ │ │ ├── secondaryToolbarButton-documentProperties.png │ │ │ │ ├── secondaryToolbarButton-scrollHorizontal.png │ │ │ │ ├── secondaryToolbarButton-scrollVertical@2x.png │ │ │ │ ├── secondaryToolbarButton-scrollWrapped@2x.png │ │ │ │ ├── toolbarButton-secondaryToolbarToggle-rtl.png │ │ │ │ ├── toolbarButton-secondaryToolbarToggle@2x.png │ │ │ │ ├── secondaryToolbarButton-scrollHorizontal@2x.png │ │ │ │ ├── toolbarButton-secondaryToolbarToggle-rtl@2x.png │ │ │ │ ├── secondaryToolbarButton-documentProperties@2x.png │ │ │ │ ├── annotation-noicon.svg │ │ │ │ ├── annotation-insert.svg │ │ │ │ ├── annotation-check.svg │ │ │ │ ├── annotation-newparagraph.svg │ │ │ │ ├── annotation-comment.svg │ │ │ │ ├── annotation-paragraph.svg │ │ │ │ ├── annotation-note.svg │ │ │ │ └── annotation-key.svg │ │ ├── html │ │ │ ├── blank.html │ │ │ └── crash.html │ │ ├── javascript │ │ │ ├── ExtensionAPI.js │ │ │ ├── GetFavicon.js │ │ │ └── AutoFill.js │ │ ├── search_engines.json │ │ └── adblock_recommended.json │ └── CMakeLists.txt ├── CMakeLists.txt ├── config.h.in └── ui │ ├── web │ ├── WebInspector.cpp │ ├── WebDialog.h │ ├── WebDialog.cpp │ ├── WebInspector.h │ ├── WebLoadObserver.h │ ├── ViewSourceWindow.h │ ├── ViewSourceWindow.ui │ ├── WebLoadObserver.cpp │ └── ViewSourceWindow.cpp │ ├── widgets │ ├── CheckableTableView.cpp │ ├── CheckableTableView.h │ ├── FileChooserLineEdit.h │ └── FindTextWidget.h │ ├── user_scripts │ ├── AddUserScriptDialog.cpp │ └── AddUserScriptDialog.h │ ├── preferences │ ├── AddSearchEngineDialog.cpp │ ├── AddSearchEngineDialog.h │ ├── AdvancedTab.h │ └── SearchTab.h │ ├── network │ ├── AuthDialog.cpp │ ├── CertificateGeneralTab.h │ ├── AuthDialog.h │ └── CertificateViewer.ui │ ├── url_suggestion │ └── URLSuggestionItemDelegate.h │ ├── bookmarks │ ├── FolderNavigationAction.cpp │ └── FolderNavigationAction.h │ ├── cookies │ └── CookieModifyDialog.h │ ├── autofill │ └── AutoFillCredentialsView.h │ ├── user_agents │ └── UserAgentMenu.h │ └── adblock │ └── AdBlockSubscribeDialog.h ├── data ├── viper-browser.png └── viper-browser.desktop ├── .gitignore ├── .github ├── setup.sh ├── FUNDING.yml └── deploy.sh ├── .lgtm.yml ├── .gitattributes └── cmake ├── KF5WalletTargets-none.cmake ├── KF5WalletConfigVersion.cmake └── KF5WalletConfig.cmake /extra/debian/compat: -------------------------------------------------------------------------------- 1 | 11 2 | -------------------------------------------------------------------------------- /extra/debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (quilt) 2 | -------------------------------------------------------------------------------- /tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(core) 2 | -------------------------------------------------------------------------------- /.qmake.conf: -------------------------------------------------------------------------------- 1 | VIPER_BUILD_DIR = $$shadowed($$PWD) 2 | -------------------------------------------------------------------------------- /extra/debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | %: 3 | dh $@ 4 | -------------------------------------------------------------------------------- /extra/debian/source/lintian-overrides: -------------------------------------------------------------------------------- 1 | source-is-missing 2 | -------------------------------------------------------------------------------- /src/core/adblock/FilterBucket.cpp: -------------------------------------------------------------------------------- 1 | #include "FilterBucket.h" 2 | -------------------------------------------------------------------------------- /src/core/database/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(sqlite) 2 | -------------------------------------------------------------------------------- /src/plugins/credential_store_kwallet/credentialstorekwallet.json: -------------------------------------------------------------------------------- 1 | { } 2 | -------------------------------------------------------------------------------- /src/plugins/credential_store_secret/credentialstoresecret.json: -------------------------------------------------------------------------------- 1 | { } 2 | -------------------------------------------------------------------------------- /extra/debian/viper-browser.lintian-overrides: -------------------------------------------------------------------------------- 1 | binary-without-manpage usr/bin/viper-browser 2 | -------------------------------------------------------------------------------- /data/viper-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/data/viper-browser.png -------------------------------------------------------------------------------- /src/app/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/logo.png -------------------------------------------------------------------------------- /src/app/assets/images/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/stop.png -------------------------------------------------------------------------------- /src/app/assets/images/new-tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/new-tab.png -------------------------------------------------------------------------------- /src/app/assets/images/reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/reload.png -------------------------------------------------------------------------------- /src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(app) 2 | add_subdirectory(core) 3 | add_subdirectory(ui) 4 | add_subdirectory(plugins) 5 | -------------------------------------------------------------------------------- /src/app/assets/images/edit-find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/edit-find.png -------------------------------------------------------------------------------- /src/app/assets/images/plus_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/plus_icon.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/V.bcmap -------------------------------------------------------------------------------- /src/app/assets/images/arrow-back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/arrow-back.png -------------------------------------------------------------------------------- /src/app/assets/images/bookmarked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/bookmarked.png -------------------------------------------------------------------------------- /src/app/assets/images/https_secure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/https_secure.png -------------------------------------------------------------------------------- /src/app/assets/images/reload-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/reload-white.png -------------------------------------------------------------------------------- /src/app/assets/images/search_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/search_icon.png -------------------------------------------------------------------------------- /src/app/assets/images/stop-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/stop-white.png -------------------------------------------------------------------------------- /src/app/assets/images/window-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/window-close.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/78-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/78-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/78-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/78-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Add-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Add-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Add-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Add-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/B5-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/B5-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/EUC-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/EUC-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Ext-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Ext-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Ext-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Ext-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GB-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GB-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GB-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GB-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBT-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBT-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBT-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBT-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/KSC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/KSC-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/KSC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/KSC-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/NWP-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/NWP-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/NWP-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/NWP-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Roman.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Roman.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/grab.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/grab.cur -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/shadow.png -------------------------------------------------------------------------------- /src/app/assets/images/arrow-forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/arrow-forward.png -------------------------------------------------------------------------------- /src/app/assets/images/blank_favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/blank_favicon.png -------------------------------------------------------------------------------- /src/app/assets/images/document-save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/document-save.png -------------------------------------------------------------------------------- /src/app/assets/images/https_insecure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/https_insecure.png -------------------------------------------------------------------------------- /src/app/assets/images/new-tab-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/new-tab-white.png -------------------------------------------------------------------------------- /src/app/assets/images/not_bookmarked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/not_bookmarked.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/B5pc-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/B5pc-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/B5pc-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/B5pc-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/CNS1-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/CNS1-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/CNS1-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/CNS1-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/CNS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/CNS2-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/CNS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/CNS2-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBK2K-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBK2K-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBK2K-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBK2K-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Hankaku.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Hankaku.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/grabbing.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/grabbing.cur -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/texture.png -------------------------------------------------------------------------------- /src/app/assets/images/arrow-back-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/arrow-back-white.png -------------------------------------------------------------------------------- /src/app/assets/images/edit-find-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/edit-find-white.png -------------------------------------------------------------------------------- /src/app/assets/images/search_icon_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/search_icon_white.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/78-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/78-EUC-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/78-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/78-EUC-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/78-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/78-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/78-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/78-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Add-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Add-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Add-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Add-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/CNS-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/CNS-EUC-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/CNS-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/CNS-EUC-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/ETHK-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/ETHK-B5-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/ETHK-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/ETHK-B5-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/ETen-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/ETen-B5-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/ETen-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/ETen-B5-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Ext-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Ext-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Ext-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Ext-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GB-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GB-EUC-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GB-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GB-EUC-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBK-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBK-EUC-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBK-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBK-EUC-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBKp-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBKp-EUC-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBKp-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBKp-EUC-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBT-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBT-EUC-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBT-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBT-EUC-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBpc-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBpc-EUC-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBpc-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBpc-EUC-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/HKdla-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/HKdla-B5-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/HKdla-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/HKdla-B5-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/HKdlb-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/HKdlb-B5-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/HKdlb-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/HKdlb-B5-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/HKscs-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/HKscs-B5-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/HKscs-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/HKscs-B5-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Hiragana.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Hiragana.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/KSC-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/KSC-EUC-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/KSC-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/KSC-EUC-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Katakana.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Katakana.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/WP-Symbol.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/WP-Symbol.bcmap -------------------------------------------------------------------------------- /src/app/assets/images/arrow-forward-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/arrow-forward-white.png -------------------------------------------------------------------------------- /src/app/assets/images/document-save-thick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/document-save-thick.png -------------------------------------------------------------------------------- /src/app/assets/images/document-save-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/document-save-white.png -------------------------------------------------------------------------------- /src/app/assets/images/https_secure_bright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/https_secure_bright.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/78ms-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/78ms-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/78ms-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/78ms-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/83pv-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/83pv-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/90ms-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/90ms-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/90ms-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/90ms-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/90msp-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/90msp-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/90msp-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/90msp-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/90pv-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/90pv-RKSJ-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/90pv-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/90pv-RKSJ-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-CNS1-0.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-CNS1-0.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-CNS1-1.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-CNS1-1.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-CNS1-2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-CNS1-2.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-CNS1-3.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-CNS1-3.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-CNS1-4.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-CNS1-4.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-CNS1-5.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-CNS1-5.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-CNS1-6.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-CNS1-6.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-GB1-0.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-GB1-0.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-GB1-1.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-GB1-1.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-GB1-2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-GB1-2.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-GB1-3.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-GB1-3.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-GB1-4.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-GB1-4.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-GB1-5.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-GB1-5.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/ETenms-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/ETenms-B5-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/ETenms-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/ETenms-B5-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBTpc-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBTpc-EUC-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/GBTpc-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/GBTpc-EUC-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/HKgccs-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/HKgccs-B5-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/HKgccs-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/HKgccs-B5-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/HKm314-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/HKm314-B5-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/HKm314-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/HKm314-B5-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/HKm471-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/HKm471-B5-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/HKm471-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/HKm471-B5-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/KSC-Johab-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/KSC-Johab-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/KSC-Johab-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/KSC-Johab-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/KSCms-UHC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/KSCms-UHC-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/KSCms-UHC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/KSCms-UHC-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/KSCpc-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/KSCpc-EUC-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/KSCpc-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/KSCpc-EUC-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniGB-UCS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniGB-UCS2-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniGB-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniGB-UCS2-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniGB-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniGB-UTF8-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniGB-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniGB-UTF8-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniKS-UCS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniKS-UCS2-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniKS-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniKS-UCS2-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniKS-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniKS-UTF8-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniKS-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniKS-UTF8-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/loading-icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/loading-icon.gif -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/loading-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/loading-small.png -------------------------------------------------------------------------------- /src/app/assets/images/https_insecure_bright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/images/https_insecure_bright.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-Japan1-0.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-Japan1-0.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-Japan1-1.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-Japan1-1.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-Japan1-2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-Japan1-2.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-Japan1-3.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-Japan1-3.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-Japan1-4.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-Japan1-4.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-Japan1-5.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-Japan1-5.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-Japan1-6.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-Japan1-6.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-Korea1-0.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-Korea1-0.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-Korea1-1.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-Korea1-1.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-Korea1-2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-Korea1-2.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniCNS-UCS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniCNS-UCS2-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniCNS-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniCNS-UCS2-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniCNS-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniCNS-UTF16-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniCNS-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniCNS-UTF16-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniCNS-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniCNS-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniCNS-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniCNS-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniCNS-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniCNS-UTF8-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniCNS-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniCNS-UTF8-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniGB-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniGB-UTF16-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniGB-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniGB-UTF16-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniGB-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniGB-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniGB-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniGB-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS-UCS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS-UCS2-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS-UCS2-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS-UTF16-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS-UTF16-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS-UTF8-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS-UTF8-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniKS-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniKS-UTF16-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniKS-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniKS-UTF16-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniKS-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniKS-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniKS-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniKS-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/loading-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/loading-small@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/findbarButton-next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/findbarButton-next.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/treeitem-collapsed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/treeitem-collapsed.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/treeitem-expanded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/treeitem-expanded.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/findbarButton-next@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/findbarButton-next@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-pageUp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-pageUp.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-print.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-search.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-zoomIn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-zoomIn.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-zoomOut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-zoomOut.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/treeitem-collapsed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/treeitem-collapsed@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/treeitem-expanded@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/treeitem-expanded@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/findbarButton-next-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/findbarButton-next-rtl.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/findbarButton-previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/findbarButton-previous.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-bookmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-bookmark.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-download.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-openFile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-openFile.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-pageDown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-pageDown.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-pageUp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-pageUp@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-print@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-print@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-search@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-search@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-zoomIn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-zoomIn@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/treeitem-collapsed-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/treeitem-collapsed-rtl.png -------------------------------------------------------------------------------- /src/app/assets/html/blank.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | New Tab 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/findbarButton-next-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/findbarButton-next-rtl@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/findbarButton-previous-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/findbarButton-previous-rtl.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/findbarButton-previous@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/findbarButton-previous@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-bookmark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-bookmark@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-download@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-download@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-menuArrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-menuArrows.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-openFile@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-openFile@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-pageDown-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-pageDown-rtl.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-pageDown@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-pageDown@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-pageUp-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-pageUp-rtl.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-viewOutline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-viewOutline.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-zoomOut@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-zoomOut@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/treeitem-collapsed-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/treeitem-collapsed-rtl@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-menuArrows@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-menuArrows@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-pageUp-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-pageUp-rtl@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-sidebarToggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-sidebarToggle.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-viewOutline@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-viewOutline@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-viewThumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-viewThumbnail.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/findbarButton-previous-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/findbarButton-previous-rtl@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-handTool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-handTool.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-lastPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-lastPage.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-rotateCw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-rotateCw.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-pageDown-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-pageDown-rtl@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-presentationMode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-presentationMode.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-sidebarToggle-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-sidebarToggle-rtl.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-sidebarToggle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-sidebarToggle@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-viewAttachments.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-viewAttachments.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-viewOutline-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-viewOutline-rtl.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-viewThumbnail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-viewThumbnail@2x.png -------------------------------------------------------------------------------- /extra/debian/changelog: -------------------------------------------------------------------------------- 1 | viper-browser (git-1) buster; urgency=low 2 | 3 | * Initial packaging 4 | 5 | -- Timothy Vaccarelli Fri, 28 Aug 2020 12:41:05 -0500 6 | -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-firstPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-firstPage.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-rotateCcw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-rotateCcw.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-selectTool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-selectTool.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-spreadEven.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-spreadEven.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-spreadNone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-spreadNone.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-spreadOdd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-spreadOdd.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-presentationMode@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-presentationMode@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-viewAttachments@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-viewAttachments@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-viewOutline-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-viewOutline-rtl@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-firstPage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-firstPage@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-handTool@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-handTool@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-lastPage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-lastPage@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-rotateCcw@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-rotateCcw@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-rotateCw@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-rotateCw@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-scrollWrapped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-scrollWrapped.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-selectTool@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-selectTool@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-spreadEven@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-spreadEven@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-spreadNone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-spreadNone@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-spreadOdd@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-spreadOdd@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-secondaryToolbarToggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-secondaryToolbarToggle.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-sidebarToggle-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-sidebarToggle-rtl@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-scrollVertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-scrollVertical.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-documentProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-documentProperties.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-scrollHorizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-scrollHorizontal.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-scrollVertical@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-scrollVertical@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-scrollWrapped@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-scrollWrapped@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-secondaryToolbarToggle-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-secondaryToolbarToggle-rtl.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-secondaryToolbarToggle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-secondaryToolbarToggle@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-scrollHorizontal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-scrollHorizontal@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/secondaryToolbarButton-documentProperties@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LeFroid/Viper-Browser/HEAD/src/app/assets/pdfjs/images/secondaryToolbarButton-documentProperties@2x.png -------------------------------------------------------------------------------- /src/app/assets/javascript/ExtensionAPI.js: -------------------------------------------------------------------------------- 1 | const __extUID = '{{EXT_UID}}'; 2 | 3 | chrome.storage.get = function(keys, callback) { 4 | result = chrome.storage.getResult(__extUID, keys); 5 | callback(result); 6 | } 7 | 8 | -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/annotation-noicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /tests/core/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(adblock) 2 | add_subdirectory(bookmarks) 3 | add_subdirectory(database) 4 | add_subdirectory(history) 5 | add_subdirectory(icons) 6 | add_subdirectory(url_suggestion) 7 | add_subdirectory(utility) 8 | -------------------------------------------------------------------------------- /src/config.h.in: -------------------------------------------------------------------------------- 1 | #ifndef _VIPER_BROWSER_CONFIG_H_ 2 | #define _VIPER_BROWSER_CONFIG_H_ 3 | 4 | #define VIPER_PLUGIN_DIR "${VIPER_PLUGIN_DIR}" 5 | #define VIPER_VERSION_STR "${CMAKE_PROJECT_VERSION}-SNAPSHOT" 6 | 7 | #endif // _VIPER_BROWSER_CONFIG_H_ 8 | 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | https_insecure.xcf 2 | https_secure.xcf 3 | search_icon.xcf 4 | Preferences_Window_Content_Tab.png 5 | build-Browser-Clang_Desktop-Debug/ 6 | build-debug/ 7 | build-profile/ 8 | documentation/ 9 | Browser/Browser.pro.user 10 | src/config.h 11 | -------------------------------------------------------------------------------- /src/core/database/sqlite/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(sqlite-wrapper_src 2 | internal/implementation.cpp 3 | Database.cpp 4 | PreparedStatement.cpp 5 | ) 6 | add_library(sqlite-wrapper-cpp STATIC ${sqlite-wrapper_src}) 7 | target_link_libraries(sqlite-wrapper-cpp ${SQLite3_LIBRARY}) 8 | 9 | -------------------------------------------------------------------------------- /src/core/text_finder/ITextFinder.cpp: -------------------------------------------------------------------------------- 1 | #include "ITextFinder.h" 2 | 3 | ITextFinder::ITextFinder(QObject *parent) : 4 | QObject(parent), 5 | m_searchTerm(), 6 | m_highlightAll(false), 7 | m_matchCase(false), 8 | m_numOccurrences(0), 9 | m_occurrenceCounter(0) 10 | { 11 | } 12 | -------------------------------------------------------------------------------- /src/core/database/sqlite/SQLiteWrapper.h: -------------------------------------------------------------------------------- 1 | #ifndef _SQLITE_WRAPPER_H_ 2 | #define _SQLITE_WRAPPER_H_ 3 | 4 | #include "sqlite3.h" 5 | 6 | #include "Badge.h" 7 | #include "Blob.h" 8 | #include "Row.h" 9 | #include "PreparedStatement.h" 10 | #include "Database.h" 11 | 12 | #endif // _SQLITE_WRAPPER_H_ 13 | 14 | -------------------------------------------------------------------------------- /src/app/assets/html/crash.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %1 5 | 6 | 7 |
8 |

Uh oh...

9 |

An error occurred while attempting to load this web page. Try reloading the page or navigating elsewhere.

10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /data/viper-browser.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Name=Viper Browser 4 | Comment=Fast and lightweight Qt web browser 5 | Exec=viper-browser %u 6 | Terminal=false 7 | X-MultipleArgs=false 8 | Categories=Network;WebBrowser; 9 | Icon=viper-browser 10 | MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https; 11 | -------------------------------------------------------------------------------- /src/core/database/sqlite/Badge.h: -------------------------------------------------------------------------------- 1 | #ifndef _SQLITE_BADGE_H_ 2 | #define _SQLITE_BADGE_H_ 3 | 4 | namespace sqlite 5 | { 6 | 7 | /// Skeleton class, used to restrict the callers of a public 8 | /// class method 9 | template 10 | class Badge 11 | { 12 | friend T; 13 | Badge() {} 14 | }; 15 | 16 | } 17 | 18 | #endif // _SQLITE_BADGE_H_ 19 | 20 | -------------------------------------------------------------------------------- /src/plugins/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | if ((NOT DISABLE_KWALLET) AND KF5Wallet_FOUND) 2 | message("-- Building Plugin: KWallet Integration") 3 | add_subdirectory(credential_store_kwallet) 4 | endif() 5 | 6 | if ((NOT DISABLE_LIBSECRET) AND Secret_FOUND) 7 | message("-- Building Plugin: Secret Integration") 8 | add_subdirectory(credential_store_secret) 9 | endif() 10 | -------------------------------------------------------------------------------- /src/core/database/sqlite/Blob.h: -------------------------------------------------------------------------------- 1 | #ifndef _SQLITE_BLOB_H_ 2 | #define _SQLITE_BLOB_H_ 3 | 4 | #include 5 | 6 | namespace sqlite 7 | { 8 | /// Wrapper for BLOB types. Used to differentiate itself from strings in the template-based API 9 | struct Blob 10 | { 11 | std::string data; 12 | }; 13 | } 14 | 15 | #endif // _SQLITE_BLOB_H_ 16 | 17 | -------------------------------------------------------------------------------- /tests/core/url_suggestion/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include_directories( 2 | ${CMAKE_CURRENT_BINARY_DIR} 3 | ${CMAKE_CURRENT_SOURCE_DIR} 4 | ) 5 | 6 | add_executable(HistorySuggestorTest HistorySuggestorTest.cpp) 7 | target_link_libraries(HistorySuggestorTest viper-core viper-ui Qt6::Test Threads::Threads) 8 | 9 | add_test(NAME HistorySuggestor-Test COMMAND HistorySuggestorTest) 10 | -------------------------------------------------------------------------------- /src/plugins/credential_store_kwallet/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(credential_store_kwallet_src 2 | CredentialStoreKWallet.cpp 3 | ) 4 | 5 | add_library(CredentialStoreKwallet SHARED ${credential_store_kwallet_src}) 6 | 7 | target_link_libraries(CredentialStoreKwallet 8 | viper-core 9 | Qt6::Core 10 | KF5::Wallet 11 | ) 12 | install(TARGETS CredentialStoreKwallet DESTINATION "${VIPER_PLUGIN_DIR}") 13 | -------------------------------------------------------------------------------- /tests/core/icons/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include_directories( 2 | ${CMAKE_CURRENT_BINARY_DIR} 3 | ${CMAKE_CURRENT_SOURCE_DIR} 4 | ) 5 | 6 | set(FaviconManagerTest_src 7 | FaviconManagerTest.cpp 8 | ) 9 | 10 | add_executable(FaviconManagerTest ${FaviconManagerTest_src}) 11 | 12 | target_link_libraries(FaviconManagerTest viper-core viper-ui Qt6::Test Threads::Threads) 13 | 14 | #add_test(NAME FaviconManager-Test COMMAND FaviconManagerTest) 15 | -------------------------------------------------------------------------------- /tests/core/adblock/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include_directories( 2 | ${CMAKE_CURRENT_BINARY_DIR} 3 | ${CMAKE_CURRENT_SOURCE_DIR} 4 | ) 5 | 6 | set(AdBlockFilterTest_src 7 | AdBlockFilterTest.cpp 8 | AdBlockManager.cpp 9 | ) 10 | 11 | add_executable(AdBlockFilterTest ${AdBlockFilterTest_src}) 12 | 13 | target_link_libraries(AdBlockFilterTest viper-core Qt6::Test Qt6::WebEngineCore) 14 | 15 | add_test(NAME AdBlockFilter-Test COMMAND AdBlockFilterTest) 16 | -------------------------------------------------------------------------------- /src/plugins/credential_store_secret/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(credential_store_secret_src 2 | CredentialStoreSecret.cpp 3 | ) 4 | 5 | add_library(CredentialStoreSecret SHARED ${credential_store_secret_src}) 6 | 7 | target_include_directories(CredentialStoreSecret PUBLIC ${Secret_INCLUDE_DIRS}) 8 | target_link_libraries(CredentialStoreSecret 9 | viper-core 10 | Qt6::Core 11 | ${Secret_LIBRARIES} 12 | ) 13 | install(TARGETS CredentialStoreSecret DESTINATION "${VIPER_PLUGIN_DIR}") 14 | -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/annotation-insert.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /tests/core/database/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include_directories( 2 | ${CMAKE_CURRENT_BINARY_DIR} 3 | ${CMAKE_CURRENT_SOURCE_DIR} 4 | ) 5 | 6 | set(DatabaseWorkerTest_src 7 | FakeDatabaseWorker.cpp 8 | DatabaseWorkerTest.cpp 9 | ) 10 | 11 | add_executable(DatabaseWorkerTest ${DatabaseWorkerTest_src}) 12 | 13 | target_link_libraries(DatabaseWorkerTest viper-core sqlite-wrapper-cpp Qt6::Test Qt6::WebEngineCore) 14 | 15 | add_test(NAME DatabaseWorker-Test COMMAND DatabaseWorkerTest) 16 | -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/annotation-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/annotation-newparagraph.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/core/web/public_suffix/PublicSuffixRule.h: -------------------------------------------------------------------------------- 1 | #ifndef _PUBLIC_SUFFIX_RULE_H_ 2 | #define _PUBLIC_SUFFIX_RULE_H_ 3 | 4 | #include 5 | 6 | enum class PublicSuffixRuleType 7 | { 8 | Normal, 9 | Wildcard, 10 | Exception, 11 | None // Special case to fit into the tree structure 12 | }; 13 | 14 | struct PublicSuffixRule 15 | { 16 | PublicSuffixRuleType type {PublicSuffixRuleType::None}; 17 | int numLabels {0}; 18 | QString value {}; 19 | }; 20 | 21 | #endif // _PUBLIC_SUFFIX_RULE_H_ 22 | 23 | -------------------------------------------------------------------------------- /src/ui/web/WebInspector.cpp: -------------------------------------------------------------------------------- 1 | #include "WebInspector.h" 2 | 3 | WebInspector::WebInspector(bool privateView, QWidget* parent) : 4 | WebView(privateView, parent), 5 | m_active(false) 6 | { 7 | setObjectName(QLatin1String("inspectorView")); 8 | setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 9 | setContextMenuPolicy(Qt::NoContextMenu); 10 | } 11 | 12 | bool WebInspector::isActive() const 13 | { 14 | return m_active; 15 | } 16 | 17 | void WebInspector::setActive(bool value) 18 | { 19 | m_active = value; 20 | } 21 | -------------------------------------------------------------------------------- /extra/debian/copyright: -------------------------------------------------------------------------------- 1 | Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 2 | Upstream-Name: Viper-Browser 3 | Upstream-Contact: Timothy Vaccarelli 4 | Source: https://github.com/LeFroid/Viper-Browser 5 | 6 | Files: * 7 | Copyright: 2017-2020, Timothy Vaccarelli 8 | License: GPL-3+ 9 | 10 | Files: src/app/assets/AdBlockResources.txt 11 | Copyright: gorhill 12 | License: GPL-3+ 13 | 14 | License: GPL-3+ 15 | The text of the license is available on Debian systems in 16 | the /usr/share/common-licenses/GPL-3 file. 17 | 18 | -------------------------------------------------------------------------------- /.github/setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | sudo add-apt-repository ppa:beineri/opt-qt-5.15.2-focal -y 4 | sudo apt-get update -qq 5 | sudo apt-get install -qq qt515base qt515connectivity qt515multimedia qt515svg qt515translations qt515tools qt515webchannel qt515webengine mesa-common-dev libgl-dev 6 | sudo apt-get install -qq libglu1-mesa-dev freeglut3-dev mesa-common-dev 7 | source /opt/qt515/bin/qt515-env.sh 8 | export QTHOME=/opt/qt515 9 | export PATH=/opt/cmake/bin:/opt/qt515/bin:${PATH} 10 | export CMAKE_PREFIX_PATH=/opt/qt515:${CMAKE_PREFIX_PATH} 11 | mkdir -p $GITHUB_WORKSPACE/build 12 | -------------------------------------------------------------------------------- /src/core/credentials/CredentialStore.cpp: -------------------------------------------------------------------------------- 1 | #include "CredentialStore.h" 2 | 3 | QDataStream& operator<<(QDataStream &out, const WebCredentials &creds) 4 | { 5 | out << creds.Host; 6 | out << creds.LastLogin; 7 | out << creds.Username; 8 | out << creds.Password; 9 | out << creds.FormData; 10 | 11 | return out; 12 | } 13 | 14 | QDataStream& operator>>(QDataStream &in, WebCredentials &creds) 15 | { 16 | in >> creds.Host; 17 | in >> creds.LastLogin; 18 | in >> creds.Username; 19 | in >> creds.Password; 20 | in >> creds.FormData; 21 | 22 | return in; 23 | } 24 | -------------------------------------------------------------------------------- /src/app/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | #set(CMAKE_AUTORCC ON) 2 | include_directories(${CMAKE_CURRENT_BINARY_DIR}) 3 | include_directories(${CMAKE_CURRENT_BINARY_DIR}/assets) 4 | include_directories(${CMAKE_SOURCE_DIR}/src/app/assets) 5 | 6 | qt6_add_resources(viper_qrc assets/application.qrc) 7 | 8 | set(viper_browser_src 9 | main.cpp 10 | ) 11 | 12 | add_executable(viper-browser ${viper_qrc} ${viper_browser_src}) 13 | 14 | target_link_libraries(viper-browser 15 | sqlite-wrapper-cpp 16 | viper-core 17 | viper-ui 18 | Threads::Threads 19 | ) 20 | 21 | 22 | install(TARGETS viper-browser DESTINATION bin) 23 | -------------------------------------------------------------------------------- /src/ui/web/WebDialog.h: -------------------------------------------------------------------------------- 1 | #ifndef WEBDIALOG_H 2 | #define WEBDIALOG_H 3 | 4 | #include 5 | 6 | class QWebEngineView; 7 | class WebView; 8 | 9 | /** 10 | * @class WebDialog 11 | * @brief Widget used to display popup windows 12 | */ 13 | class WebDialog : public QWidget 14 | { 15 | Q_OBJECT 16 | public: 17 | explicit WebDialog(bool isPrivate, QWidget *parent = nullptr); 18 | 19 | /// Returns the view associated with the dialog 20 | QWebEngineView *getView() const; 21 | 22 | private: 23 | /// Web view associated with the dialog 24 | WebView *m_view; 25 | }; 26 | 27 | #endif // WEBDIALOG_H 28 | -------------------------------------------------------------------------------- /src/core/settings/ISettingsObserver.h: -------------------------------------------------------------------------------- 1 | #ifndef ISETTINGSOBSERVER_H 2 | #define ISETTINGSOBSERVER_H 3 | 4 | #include "BrowserSetting.h" 5 | 6 | #include 7 | 8 | /** 9 | * @class ISettingsObserver 10 | * @brief Defines an interface for classes that need to subscribe 11 | * to event notifications when there is a change to a browser 12 | * setting 13 | */ 14 | class ISettingsObserver 15 | { 16 | private: 17 | /// Called when a browser setting has been changed to the given value 18 | virtual void onSettingChanged(BrowserSetting setting, const QVariant &value) = 0; 19 | }; 20 | 21 | #endif // ISETTINGSOBSERVER_H 22 | -------------------------------------------------------------------------------- /src/app/assets/images/folder.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/core/icons/FaviconStoreBridge.cpp: -------------------------------------------------------------------------------- 1 | #include "BrowserApplication.h" 2 | #include "FaviconManager.h" 3 | #include "FaviconStoreBridge.h" 4 | #include "WebPage.h" 5 | #include 6 | 7 | FaviconStoreBridge::FaviconStoreBridge(FaviconManager *faviconManager, WebPage *parent) : 8 | QObject(parent), 9 | m_page(parent), 10 | m_faviconManager(faviconManager) 11 | { 12 | } 13 | 14 | FaviconStoreBridge::~FaviconStoreBridge() 15 | { 16 | } 17 | 18 | void FaviconStoreBridge::updateIconUrl(const QString &faviconUrl) 19 | { 20 | if (faviconUrl.isEmpty()) 21 | return; 22 | 23 | m_faviconManager->updateIcon(QUrl(faviconUrl), m_page->url(), m_page->icon()); 24 | } 25 | -------------------------------------------------------------------------------- /src/core/autofill/AutoFillBridge.cpp: -------------------------------------------------------------------------------- 1 | #include "AutoFillBridge.h" 2 | #include "AutoFill.h" 3 | #include "BrowserApplication.h" 4 | #include "Settings.h" 5 | #include "WebPage.h" 6 | 7 | #include 8 | 9 | AutoFillBridge::AutoFillBridge(AutoFill *autoFill, WebPage *parent) : 10 | QObject(parent), 11 | m_page(parent), 12 | m_autoFill(autoFill) 13 | { 14 | } 15 | 16 | AutoFillBridge::~AutoFillBridge() 17 | { 18 | } 19 | 20 | void AutoFillBridge::onFormSubmitted(const QString &pageUrl, const QString &username, const QString &password, const QMap &formData) 21 | { 22 | m_autoFill->onFormSubmitted(m_page, pageUrl, username, password, formData); 23 | } 24 | -------------------------------------------------------------------------------- /tests/core/utility/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include_directories( 2 | ${CMAKE_CURRENT_BINARY_DIR} 3 | ${CMAKE_CURRENT_SOURCE_DIR} 4 | ${CMAKE_SOURCE_DIR}/src 5 | ) 6 | 7 | set(FastHashTest_src 8 | FastHashTest.cpp 9 | ) 10 | 11 | set(CommonUtil_RegExpTest_src 12 | CommonUtil_RegExpTest.cpp 13 | ) 14 | 15 | add_executable(FastHashTest ${FastHashTest_src}) 16 | add_executable(CommonUtil-RegExpTest ${CommonUtil_RegExpTest_src}) 17 | 18 | target_link_libraries(FastHashTest viper-core Qt6::Test) 19 | target_link_libraries(CommonUtil-RegExpTest viper-core Qt6::Test) 20 | 21 | add_test(NAME FastHash-Test COMMAND FastHashTest) 22 | add_test(NAME CommonUtil-RegExp-Test COMMAND CommonUtil-RegExpTest) 23 | -------------------------------------------------------------------------------- /src/core/web/URL.h: -------------------------------------------------------------------------------- 1 | #ifndef URL_H 2 | #define URL_H 3 | 4 | #include 5 | 6 | /** 7 | * @class URL 8 | * @brief Acts as a wrapper for the \ref QUrl class, extending its functionality 9 | */ 10 | class URL : public QUrl 11 | { 12 | public: 13 | /// Default constructor 14 | URL(); 15 | 16 | /// Constructs a copy of the given URL 17 | URL(const QUrl &other); 18 | 19 | /// Constructs a URL from the given string a parsing mode 20 | URL(const QString &url, ParsingMode parsingMode = URL::TolerantMode); 21 | 22 | /// Returns the second-level domain of the URL (ex: websiteA.com; websiteB.co.uk) 23 | QString getSecondLevelDomain() const; 24 | }; 25 | 26 | #endif // URL_H 27 | -------------------------------------------------------------------------------- /tests/core/history/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include_directories( 2 | ${CMAKE_CURRENT_BINARY_DIR} 3 | ${CMAKE_CURRENT_SOURCE_DIR} 4 | ) 5 | 6 | set(HistoryManagerTest_src 7 | HistoryManagerTest.cpp 8 | ) 9 | set(HistoryStoreTest_src 10 | HistoryStoreTest.cpp 11 | ) 12 | 13 | add_executable(HistoryManagerTest ${HistoryManagerTest_src}) 14 | add_executable(HistoryStoreTest ${HistoryStoreTest_src}) 15 | 16 | target_link_libraries(HistoryManagerTest viper-core viper-ui Qt6::Test Threads::Threads) 17 | target_link_libraries(HistoryStoreTest viper-core viper-ui Qt6::Test Threads::Threads) 18 | 19 | add_test(NAME HistoryManager-Test COMMAND HistoryManagerTest) 20 | add_test(NAME HistoryStore-Test COMMAND HistoryStoreTest) 21 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: LeFroid 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /src/ui/widgets/CheckableTableView.cpp: -------------------------------------------------------------------------------- 1 | #include "CheckableTableView.h" 2 | 3 | CheckableTableView::CheckableTableView(QWidget *parent) : 4 | QTableView(parent) 5 | { 6 | } 7 | 8 | void CheckableTableView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) 9 | { 10 | QAbstractItemModel *tableModel = model(); 11 | QModelIndexList indexListSelected = selected.indexes(); 12 | QVariant emptyVal; 13 | for (auto idx : indexListSelected) 14 | { 15 | // If column 0, check or uncheck the item 16 | if (idx.column() == 0) 17 | tableModel->setData(idx, emptyVal, Qt::CheckStateRole); 18 | } 19 | 20 | QTableView::selectionChanged(selected, deselected); 21 | } 22 | -------------------------------------------------------------------------------- /src/app/assets/javascript/GetFavicon.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var onWebChannelSetup = function(cb) { 3 | if (window._webchannel_initialized) { 4 | cb(); 5 | } else { 6 | document.addEventListener("_webchannel_setup", cb); 7 | } 8 | }; 9 | 10 | function qualifyURL(url) { 11 | var a = document.createElement('a'); 12 | a.href = url; 13 | return a.href; 14 | } 15 | 16 | var lnk = document.querySelector("link[rel*='icon']"); 17 | if (lnk !== undefined && lnk !== null) { 18 | var favUrl = qualifyURL(lnk.href); 19 | onWebChannelSetup(() => { 20 | window.viper.favicons.updateIconUrl(favUrl); 21 | }); 22 | } 23 | })(); 24 | -------------------------------------------------------------------------------- /.github/deploy.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | cd $GITHUB_WORKSPACE 4 | export VERSION=$(git rev-list master --count) 5 | cd $GITHUB_WORKSPACE/build 6 | export GITHUB_TOKEN=$1 7 | alias qmake=qmake-qt5 8 | export PATH=/opt/cmake/bin:/opt/qt515/bin:${PATH} 9 | wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/5/linuxdeployqt-5-x86_64.AppImage" 10 | chmod a+x linuxdeployqt-5-x86_64.AppImage 11 | ./linuxdeployqt-5-x86_64.AppImage appdir/usr/share/applications/*.desktop -appimage -exclude-libs="libnss3.so,libnssutil3.so" 12 | find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq 13 | wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh 14 | ls -al . 15 | bash upload.sh Viper*.AppImage* 16 | -------------------------------------------------------------------------------- /src/ui/widgets/CheckableTableView.h: -------------------------------------------------------------------------------- 1 | #ifndef CHECKABLETABLEVIEW_H 2 | #define CHECKABLETABLEVIEW_H 3 | 4 | #include 5 | 6 | /** 7 | * @class CheckableTableView 8 | * @brief Subclasses the QTableView class that defines custom selection behavior 9 | * of the checkboxes belonging to the first column of each row in the view 10 | */ 11 | class CheckableTableView : public QTableView 12 | { 13 | public: 14 | /// Table view constructor 15 | CheckableTableView(QWidget *parent = nullptr); 16 | 17 | protected: 18 | /// Defines custom selection behavior for the first column of the table 19 | void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override; 20 | }; 21 | 22 | #endif // CHECKABLETABLEVIEW_H 23 | -------------------------------------------------------------------------------- /src/ui/user_scripts/AddUserScriptDialog.cpp: -------------------------------------------------------------------------------- 1 | #include "AddUserScriptDialog.h" 2 | #include "ui_AddUserScriptDialog.h" 3 | 4 | AddUserScriptDialog::AddUserScriptDialog(QWidget *parent) : 5 | QDialog(parent), 6 | ui(new Ui::AddUserScriptDialog) 7 | { 8 | setAttribute(Qt::WA_DeleteOnClose, true); 9 | ui->setupUi(this); 10 | 11 | connect(this, &AddUserScriptDialog::accepted, this, &AddUserScriptDialog::onAccepted); 12 | } 13 | 14 | AddUserScriptDialog::~AddUserScriptDialog() 15 | { 16 | delete ui; 17 | } 18 | 19 | void AddUserScriptDialog::onAccepted() 20 | { 21 | emit informationEntered(ui->lineEditName->text(), ui->lineEditNamespace->text(), 22 | ui->lineEditDescription->text(), ui->lineEditVersion->text()); 23 | } 24 | -------------------------------------------------------------------------------- /.lgtm.yml: -------------------------------------------------------------------------------- 1 | extraction: 2 | cpp: 3 | prepare: 4 | packages: 5 | - cmake 6 | - pkg-config 7 | - libqt5core5a 8 | - libqt5gui5 9 | - libqt5network5 10 | - libqt5concurrent5 11 | - libqt5printsupport5 12 | - libqt5sql5 13 | - libqt5svg5 14 | - libqt5svg5-dev 15 | - qtdeclarative5-dev 16 | - libqt5quickwidgets5 17 | - libqt5widgets5 18 | - qtbase5-dev 19 | - qtwebengine5-dev 20 | configure: 21 | command: 22 | - mkdir build 23 | - cd build 24 | - cmake .. 25 | index: 26 | build_command: 27 | - cd build 28 | - make 29 | javascript: 30 | index: 31 | exclude: 32 | - src/app/assets 33 | -------------------------------------------------------------------------------- /src/ui/web/WebDialog.cpp: -------------------------------------------------------------------------------- 1 | #include "WebDialog.h" 2 | #include "WebView.h" 3 | 4 | #include 5 | 6 | WebDialog::WebDialog(bool isPrivate, QWidget *parent) : 7 | QWidget(parent), 8 | m_view(new WebView(isPrivate, this)) 9 | { 10 | setAttribute(Qt::WA_DeleteOnClose); 11 | setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); 12 | 13 | QGridLayout *grid = new QGridLayout; 14 | grid->setContentsMargins(0, 0, 0, 0); 15 | setLayout(grid); 16 | 17 | grid->addWidget(m_view); 18 | m_view->show(); 19 | m_view->setFocus(); 20 | 21 | connect(m_view, &WebView::titleChanged, this, &QWidget::setWindowTitle); 22 | } 23 | 24 | QWebEngineView *WebDialog::getView() const 25 | { 26 | return static_cast(m_view); 27 | } 28 | -------------------------------------------------------------------------------- /tests/core/bookmarks/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include_directories( 2 | ${CMAKE_CURRENT_BINARY_DIR} 3 | ${CMAKE_CURRENT_SOURCE_DIR} 4 | ) 5 | 6 | set(BookmarkManagerTest_src 7 | BookmarkManagerTest.cpp 8 | ) 9 | 10 | set(BookmarkIntegrationTest_src 11 | BookmarkIntegrationTest.cpp 12 | ) 13 | 14 | add_executable(BookmarkManagerTest ${BookmarkManagerTest_src}) 15 | add_executable(BookmarkIntegrationTest ${BookmarkIntegrationTest_src}) 16 | 17 | target_link_libraries(BookmarkManagerTest viper-core viper-ui Qt6::Test Threads::Threads) 18 | target_link_libraries(BookmarkIntegrationTest viper-core viper-ui Qt6::Test Threads::Threads) 19 | 20 | add_test(NAME BookmarkManager-Test COMMAND BookmarkManagerTest) 21 | add_test(NAME BookmarkIntegration-Test COMMAND BookmarkIntegrationTest) 22 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | #sources 2 | *.c text diff=cpp 3 | *.cc text diff=cpp 4 | *.cxx text diff=cpp 5 | *.cpp text diff=cpp 6 | *.c++ text diff=cpp 7 | *.hpp text diff=cpp 8 | *.h text diff=cpp 9 | *.h++ text diff=cpp 10 | *.hh text diff=cpp 11 | 12 | # Compiled Object files 13 | *.slo binary 14 | *.lo binary 15 | *.o binary 16 | *.obj binary 17 | 18 | # Precompiled Headers 19 | *.gch binary 20 | *.pch binary 21 | 22 | # Compiled Dynamic libraries 23 | *.so binary 24 | *.dylib binary 25 | *.dll binary 26 | 27 | # Compiled Static libraries 28 | *.lai binary 29 | *.la binary 30 | *.a binary 31 | *.lib binary 32 | 33 | # Executables 34 | *.exe binary 35 | *.out binary 36 | *.app binary 37 | 38 | # JS 39 | src/app/assets/pdfjs/* linguist-vendored 40 | *.map linguist-vendored 41 | *.bcmap linguist-vendored 42 | -------------------------------------------------------------------------------- /src/core/adblock/FilterBucket.h: -------------------------------------------------------------------------------- 1 | #ifndef FILTERBUCKET_H 2 | #define FILTERBUCKET_H 3 | 4 | #include "AdBlockFilter.h" 5 | #include 6 | 7 | /* 8 | 35 // fedcba9876543210 9 | 36 // | | ||| 10 | 37 // | | ||| 11 | 38 // | | ||| 12 | 39 // | | ||| 13 | 40 // | | ||+---- bit 0: [BlockAction | AllowAction] 14 | 41 // | | |+----- bit 1: `important` 15 | 42 // | | +------ bit 2- 3: party [0 - 3] 16 | 43 // | +-------- bit 4- 8: type [0 - 31] 17 | 44 // +------------- bit 9-15: unused 18 | */ 19 | 20 | namespace adblock 21 | { 22 | 23 | using filter_mask_t = uint16_t; 24 | 25 | class FilterBucket 26 | { 27 | public: 28 | FilterBucket() = default; 29 | }; 30 | 31 | } 32 | 33 | #endif // FILTERBUCKET_H 34 | -------------------------------------------------------------------------------- /src/ui/preferences/AddSearchEngineDialog.cpp: -------------------------------------------------------------------------------- 1 | #include "AddSearchEngineDialog.h" 2 | #include "ui_AddSearchEngineDialog.h" 3 | 4 | AddSearchEngineDialog::AddSearchEngineDialog(QWidget *parent) : 5 | QDialog(parent), 6 | ui(new Ui::AddSearchEngineDialog) 7 | { 8 | ui->setupUi(this); 9 | 10 | connect(ui->buttonBox, &QDialogButtonBox::accepted, [=](){ 11 | QString engineName = ui->lineEditName->text(), queryUrl = ui->lineEditQueryURL->text(); 12 | if (!engineName.isEmpty() && !queryUrl.isEmpty()) 13 | emit searchEngineAdded(engineName, queryUrl); 14 | }); 15 | } 16 | 17 | void AddSearchEngineDialog::clearValues() 18 | { 19 | ui->lineEditName->clear(); 20 | ui->lineEditQueryURL->clear(); 21 | } 22 | 23 | AddSearchEngineDialog::~AddSearchEngineDialog() 24 | { 25 | delete ui; 26 | } 27 | -------------------------------------------------------------------------------- /src/ui/network/AuthDialog.cpp: -------------------------------------------------------------------------------- 1 | #include "AuthDialog.h" 2 | #include "ui_AuthDialog.h" 3 | 4 | #include 5 | 6 | AuthDialog::AuthDialog(QWidget *parent) : 7 | QDialog(parent), 8 | ui(new Ui::AuthDialog) 9 | { 10 | ui->setupUi(this); 11 | 12 | QIcon questionIcon(style()->standardIcon(QStyle::SP_MessageBoxQuestion)); 13 | ui->labelIcon->setPixmap(questionIcon.pixmap(32, 32)); 14 | 15 | ui->labelMessage->setWordWrap(true); 16 | } 17 | 18 | AuthDialog::~AuthDialog() 19 | { 20 | delete ui; 21 | } 22 | 23 | void AuthDialog::setMessage(const QString &message) 24 | { 25 | ui->labelMessage->setText(message); 26 | } 27 | 28 | QString AuthDialog::getUsername() const 29 | { 30 | return ui->lineEditUsername->text(); 31 | } 32 | 33 | QString AuthDialog::getPassword() const 34 | { 35 | return ui->lineEditPassword->text(); 36 | } 37 | -------------------------------------------------------------------------------- /src/core/adblock/RecommendedSubscriptions.h: -------------------------------------------------------------------------------- 1 | #ifndef ADBLOCK_RECOMMENDED_SUBSCRIPTIONS_H 2 | #define ADBLOCK_RECOMMENDED_SUBSCRIPTIONS_H 3 | 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | 10 | namespace adblock 11 | { 12 | 13 | /** 14 | * @class RecommendedSubscriptions 15 | * @brief Contains a list of recommended ad-block style filter subscriptions. 16 | * The data is populated from the resource ":/adblock_recommended.json" 17 | */ 18 | class RecommendedSubscriptions final : public std::vector> 19 | { 20 | public: 21 | /// Constructs the recommended subscription container, pre-loading all subscription pairs 22 | RecommendedSubscriptions(); 23 | 24 | private: 25 | /// Loads the recommendations 26 | void load(); 27 | }; 28 | 29 | } 30 | 31 | #endif // ADBLOCK_RECOMMENDED_SUBSCRIPTIONS_H 32 | -------------------------------------------------------------------------------- /src/core/user_scripts/WebEngineScriptAdapter.h: -------------------------------------------------------------------------------- 1 | #ifndef WEBENGINESCRIPTADAPTER_H 2 | #define WEBENGINESCRIPTADAPTER_H 3 | 4 | #include "UserScript.h" 5 | 6 | #include 7 | 8 | /** 9 | * @class WebEngineScriptAdapter 10 | * @brief Handles conversion between UserScript API and QWebEngineScript system 11 | */ 12 | class WebEngineScriptAdapter 13 | { 14 | public: 15 | /// Constructs the WebEngineScriptAdapter given a reference to an existing user script 16 | explicit WebEngineScriptAdapter(const UserScript &script); 17 | 18 | /// Returns a QWebEngineScript that represents the data contained in a \ref UserScript 19 | const QWebEngineScript &getScript(); 20 | 21 | private: 22 | /// The QWebEngineScript representing the original \ref UserScript passed to the adapter 23 | QWebEngineScript m_script; 24 | }; 25 | 26 | #endif // WEBENGINESCRIPTADAPTER_H 27 | -------------------------------------------------------------------------------- /src/ui/web/WebInspector.h: -------------------------------------------------------------------------------- 1 | #ifndef WEBINSPECTOR_H 2 | #define WEBINSPECTOR_H 3 | 4 | #include "WebView.h" 5 | 6 | /** 7 | * @class WebInspector 8 | * @brief Acts as the inspector to a specific \ref WebView . 9 | */ 10 | class WebInspector : public WebView 11 | { 12 | Q_OBJECT 13 | 14 | public: 15 | /// Constructs the web inspector. If privateView is true, this inspector is associated 16 | /// with a private browsing profile 17 | explicit WebInspector(bool privateView, QWidget* parent = nullptr); 18 | 19 | /// Returns true if the inspector is visible alongside its web view, returns false otherwise 20 | bool isActive() const; 21 | 22 | /// Sets the activity state of the inspector 23 | void setActive(bool value); 24 | 25 | private: 26 | /// Flag indicating whether or not the inspector is active or visible 27 | bool m_active; 28 | }; 29 | 30 | #endif // WEBINSPECTOR_H 31 | -------------------------------------------------------------------------------- /src/core/network/ViperSchemeHandler.h: -------------------------------------------------------------------------------- 1 | #ifndef VIPERSCHEMEHANDLER_H 2 | #define VIPERSCHEMEHANDLER_H 3 | 4 | #include 5 | 6 | class QIODevice; 7 | class QWebEngineUrlRequestJob; 8 | 9 | /** 10 | * @class ViperSchemeHandler 11 | * @brief Implements the viper scheme (wrapper for qrc) for the QtWebEngine backend 12 | */ 13 | class ViperSchemeHandler : public QWebEngineUrlSchemeHandler 14 | { 15 | Q_OBJECT 16 | 17 | public: 18 | /// Constructs the viper scheme handler with an optional parent 19 | ViperSchemeHandler(QObject *parent = nullptr); 20 | 21 | /// Called whenever a request for the viper scheme is started 22 | void requestStarted(QWebEngineUrlRequestJob *request) override; 23 | 24 | private: 25 | /// Loads the qrc file associated with the viper scheme request 26 | QIODevice *loadFile(QWebEngineUrlRequestJob *request); 27 | }; 28 | 29 | #endif // VIPERSCHEMEHANDLER_H 30 | -------------------------------------------------------------------------------- /src/app/assets/search_engines.json: -------------------------------------------------------------------------------- 1 | { 2 | "Default": "StartPage", 3 | "Engines": [ 4 | { 5 | "Name": "Google", 6 | "Query": "https://www.google.com/search?q=%s" 7 | }, 8 | { 9 | "Name": "DuckDuckGo", 10 | "Query": "https://duckduckgo.com/?q=%s" 11 | }, 12 | { 13 | "Name": "StartPage", 14 | "PostURL": "https://www.startpage.com/do/search", 15 | "PostTemplate": "language=english&cat=web&query=%s", 16 | "Query": "https://www.startpage.com/do/dsearch?query=%s&cat=web&pl=opensearch&language=english" 17 | }, 18 | { 19 | "Name": "SearX", 20 | "PostURL": "https://searx.org/", 21 | "PostTemplate": "q=%s&time_range=&categories=general&language=en-US", 22 | "Query": "https://searx.org/?q=%s&categories=general&language=en-US" 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /src/core/history/ClearHistoryOptions.h: -------------------------------------------------------------------------------- 1 | #ifndef CLEARHISTORYOPTIONS_H 2 | #define CLEARHISTORYOPTIONS_H 3 | 4 | #include 5 | #include 6 | 7 | /// History types that are chosen to be removed 8 | enum class HistoryType : uint32_t 9 | { 10 | None = 0x0, /// Nothing selected 11 | Browsing = 0x1, /// Browsing and download history 12 | Search = 0x2, /// Form and search data 13 | Cache = 0x4 /// Browser cache 14 | }; 15 | constexpr enum HistoryType operator |(const enum HistoryType selfValue, const enum HistoryType inValue) 16 | { 17 | return (enum HistoryType)(uint32_t(selfValue) | uint32_t(inValue)); 18 | } 19 | constexpr enum HistoryType operator &(const enum HistoryType selfValue, const enum HistoryType inValue) 20 | { 21 | return (enum HistoryType)(uint32_t(selfValue) & uint32_t(inValue)); 22 | } 23 | 24 | Q_DECLARE_METATYPE(HistoryType) 25 | 26 | #endif // CLEARHISTORYOPTIONS_H 27 | -------------------------------------------------------------------------------- /src/ui/url_suggestion/URLSuggestionItemDelegate.h: -------------------------------------------------------------------------------- 1 | #ifndef URLSUGGESTIONITEMDELEGATE_H 2 | #define URLSUGGESTIONITEMDELEGATE_H 3 | 4 | #include 5 | 6 | class URLSuggestionItemDelegate : public QStyledItemDelegate 7 | { 8 | public: 9 | URLSuggestionItemDelegate(QObject *parent = nullptr); 10 | 11 | /// Renders the delegate using the given painter and style option for the item specified by index. 12 | void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; 13 | 14 | /// Returns the size needed by the delegate to display the item specified by index, taking into account the style information provided by option. 15 | QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; 16 | 17 | private: 18 | /// Padding between items in the paint() method 19 | int m_padding; 20 | }; 21 | 22 | #endif // URLSUGGESTIONITEMDELEGATE_H 23 | -------------------------------------------------------------------------------- /src/core/network/NetworkAccessManager.h: -------------------------------------------------------------------------------- 1 | #ifndef NETWORKACCESSMANAGER_H 2 | #define NETWORKACCESSMANAGER_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | /** 10 | * @class NetworkAccessManager 11 | * @brief Handles all network requests - defaulting to the \ref QNetworkAccessManager 12 | * implementation for all requests with the exception of a few types of activity 13 | * such as the blocking of unwanted ads (via \ref AdBlockManager class) 14 | */ 15 | class NetworkAccessManager : public QNetworkAccessManager 16 | { 17 | Q_OBJECT 18 | 19 | public: 20 | /// Constructs the network access manager, optionally setting a parent object 21 | NetworkAccessManager(QObject *parent = nullptr); 22 | 23 | protected: 24 | virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData) override; 25 | }; 26 | 27 | #endif // NETWORKACCESSMANAGER_H 28 | -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/annotation-comment.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /src/core/cookies/DetailedCookieTableModel.h: -------------------------------------------------------------------------------- 1 | #ifndef DETAILEDCOOKIETABLEMODEL_H 2 | #define DETAILEDCOOKIETABLEMODEL_H 3 | 4 | #include 5 | #include 6 | 7 | class DetailedCookieTableModel : public QAbstractTableModel 8 | { 9 | friend class CookieWidget; 10 | 11 | Q_OBJECT 12 | 13 | public: 14 | explicit DetailedCookieTableModel(QObject *parent = nullptr); 15 | 16 | // Basic functionality: 17 | int rowCount(const QModelIndex &parent = QModelIndex()) const override; 18 | int columnCount(const QModelIndex &parent = QModelIndex()) const override; 19 | 20 | QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 21 | 22 | protected: 23 | /// Sets the cookie to be displayed by the model 24 | void setCookie(const QNetworkCookie &cookie); 25 | 26 | private: 27 | /// Cookie being displayed by the table 28 | QNetworkCookie m_cookie; 29 | }; 30 | 31 | #endif // DETAILEDCOOKIETABLEMODEL_H 32 | -------------------------------------------------------------------------------- /src/core/database/sqlite/Row.h: -------------------------------------------------------------------------------- 1 | #ifndef _SQLITE_ROW_H_ 2 | #define _SQLITE_ROW_H_ 3 | 4 | namespace sqlite 5 | { 6 | 7 | class PreparedStatement; 8 | 9 | /** 10 | * @struct Row 11 | * @brief Provides an interface for SQLite API consumers that would like 12 | * to serialize or deserialize a data type in the same manner as 13 | * a primitive type. This enables the use of stream operators 14 | * to or from a \ref PreparedStatement , as well as the ability 15 | * to call PreparedStatement.read(Row), PreparedStatement.write(Row), 16 | * and PreparedStatement.bind(index, Row) 17 | */ 18 | struct Row 19 | { 20 | // Serialize the data structure into the prepared statement's bound parameters 21 | virtual void marshal(PreparedStatement &stmt) const = 0; 22 | 23 | // Deserialize the result of a query into the data structure 24 | virtual void unmarshal(PreparedStatement &stmt) = 0; 25 | }; 26 | 27 | } 28 | 29 | #endif // _SQLITE_ROW_H_ 30 | 31 | -------------------------------------------------------------------------------- /src/app/assets/adblock_recommended.json: -------------------------------------------------------------------------------- 1 | { 2 | "uBlock Filters": { 3 | "source": "https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters.txt" 4 | }, 5 | "uBlock Filters - Privacy": { 6 | "source": "https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/privacy.txt" 7 | }, 8 | "uBlock Filters - Resource Abuse": { 9 | "source": "https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/resource-abuse.txt" 10 | }, 11 | "uBlock Filters - Unbreak": { 12 | "source": "https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/unbreak.txt" 13 | }, 14 | "EasyList": { 15 | "source": "https://easylist.to/easylist/easylist.txt" 16 | }, 17 | "EasyPrivacy": { 18 | "source": "https://easylist.to/easylist/easyprivacy.txt" 19 | }, 20 | "I don't care about cookie warnings": { 21 | "source": "https://www.i-dont-care-about-cookies.eu/abp" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/core/web/URL.cpp: -------------------------------------------------------------------------------- 1 | #include "public_suffix/PublicSuffixManager.h" 2 | #include "URL.h" 3 | 4 | URL::URL() : 5 | QUrl() 6 | { 7 | } 8 | 9 | URL::URL(const QUrl &other) : 10 | QUrl(other) 11 | { 12 | } 13 | 14 | URL::URL(const QString &url, URL::ParsingMode parsingMode) : 15 | QUrl(url, parsingMode) 16 | { 17 | } 18 | 19 | QString URL::getSecondLevelDomain() const 20 | { 21 | PublicSuffixManager &suffixManager = PublicSuffixManager::instance(); 22 | const QString topLevelDomain = suffixManager.findTld(host().toLower()); 23 | const QString host = this->host(); 24 | 25 | if (topLevelDomain.isEmpty() || host.isEmpty()) 26 | return QString(); 27 | 28 | QString domain = host.left(host.size() - topLevelDomain.size()); 29 | 30 | if (domain.count(QChar('.')) == 0) 31 | return host; 32 | 33 | while (domain.count(QChar('.')) > 1) 34 | domain = domain.mid(domain.indexOf(QChar('.')) + 1); 35 | 36 | return domain + topLevelDomain; 37 | } 38 | -------------------------------------------------------------------------------- /src/ui/network/CertificateGeneralTab.h: -------------------------------------------------------------------------------- 1 | #ifndef CERTIFICATEGENERALTAB_H 2 | #define CERTIFICATEGENERALTAB_H 3 | 4 | #include 5 | #include 6 | 7 | namespace Ui { 8 | class CertificateGeneralTab; 9 | } 10 | 11 | /** 12 | * @class CertificateGeneralTab 13 | * @brief Contains website-specific certificate information, without displaying details such as the 14 | * public key algorithm and such 15 | */ 16 | class CertificateGeneralTab : public QWidget 17 | { 18 | Q_OBJECT 19 | 20 | public: 21 | explicit CertificateGeneralTab(QWidget *parent = 0); 22 | ~CertificateGeneralTab(); 23 | 24 | /// Clears any existing certificate from use, resetting the UI elements associated with it 25 | void clearCertificate(); 26 | 27 | /// Sets the certificate to be displayed by the widget 28 | void setCertificate(const QSslCertificate &cert); 29 | 30 | private: 31 | Ui::CertificateGeneralTab *ui; 32 | }; 33 | 34 | #endif // CERTIFICATEGENERALTAB_H 35 | -------------------------------------------------------------------------------- /src/core/web/public_suffix/PublicSuffixRuleParser.h: -------------------------------------------------------------------------------- 1 | #ifndef _PUBLIC_SUFFIX_RULE_PARSER_H_ 2 | #define _PUBLIC_SUFFIX_RULE_PARSER_H_ 3 | 4 | #include "public_suffix/PublicSuffixRule.h" 5 | 6 | #include 7 | #include 8 | 9 | /** 10 | * @class PublicSuffixRuleParser 11 | * @brief Loads the public suffix list (see: https://publicsuffix.org/) into a set of 12 | * rules that can be interpreted by the application 13 | */ 14 | class PublicSuffixRuleParser 15 | { 16 | public: 17 | /** 18 | * @brief loadRules Opens the file with the given filename and parses the public suffix rules 19 | * @param fileName Name of the file (QRC file) 20 | * @return Vector of rules as defined in the file. 21 | */ 22 | std::vector loadRules(const QString &fileName); 23 | 24 | private: 25 | /// Parses a single line of text for a public suffix rule 26 | PublicSuffixRule parseLine(QString line); 27 | }; 28 | 29 | #endif // _PUBLIC_SUFFIX_RULE_PARSER_H_ 30 | -------------------------------------------------------------------------------- /cmake/KF5WalletTargets-none.cmake: -------------------------------------------------------------------------------- 1 | #---------------------------------------------------------------- 2 | # Generated CMake target import file for configuration "None". 3 | #---------------------------------------------------------------- 4 | 5 | # Commands may need to know the format version. 6 | set(CMAKE_IMPORT_FILE_VERSION 1) 7 | 8 | # Import target "KF5::Wallet" for configuration "None" 9 | set_property(TARGET KF5::Wallet APPEND PROPERTY IMPORTED_CONFIGURATIONS NONE) 10 | set_target_properties(KF5::Wallet PROPERTIES 11 | IMPORTED_LINK_DEPENDENT_LIBRARIES_NONE "Qt5::DBus;Qt5::Widgets;KF5::WindowSystem;KF5::ConfigCore" 12 | IMPORTED_LOCATION_NONE "${_IMPORT_PREFIX}/lib64/libKF5Wallet.so.5.45.0" 13 | IMPORTED_SONAME_NONE "libKF5Wallet.so.5" 14 | ) 15 | 16 | list(APPEND _IMPORT_CHECK_TARGETS KF5::Wallet ) 17 | list(APPEND _IMPORT_CHECK_FILES_FOR_KF5::Wallet "${_IMPORT_PREFIX}/lib64/libKF5Wallet.so.5.45.0" ) 18 | 19 | # Commands beyond this point should not need to know the version. 20 | set(CMAKE_IMPORT_FILE_VERSION) 21 | -------------------------------------------------------------------------------- /src/app/assets/images/AdBlock.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.15, written by Peter Selinger 2001-2017 9 | 10 | 12 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/app/assets/javascript/AutoFill.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var autoFillVals = {}; 3 | %1 4 | 5 | var fillInFor = function(doc) { 6 | var inputElems = doc.getElementsByTagName('input'); 7 | for (let e of inputElems) { 8 | let eType = e.type.toLowerCase(); 9 | let eMode = ('inputmode' in e) ? e.inputmode.toLowerCase() : eType; 10 | if (eType == 'email' || eMode == 'email' 11 | || eType == 'password' || eType == 'text' || eMode == 'text') { 12 | if (e.name in autoFillVals) { 13 | e.value = autoFillVals[e.name]; 14 | } 15 | } 16 | } 17 | }; 18 | 19 | fillInFor(document); 20 | var subFrames = document.getElementsByTagName('iframe'); 21 | if (subFrames && subFrames.length > 0) { 22 | for (var i = 0; i < subFrames.length; ++i) { 23 | try { 24 | fillInFor(subFrames[i].contentDocument); 25 | } catch(ex) {} 26 | } 27 | } 28 | })(); 29 | -------------------------------------------------------------------------------- /src/ui/bookmarks/FolderNavigationAction.cpp: -------------------------------------------------------------------------------- 1 | #include "FolderNavigationAction.h" 2 | #include "BookmarkNode.h" 3 | #include "BookmarkTableModel.h" 4 | #include "BookmarkWidget.h" 5 | 6 | #include 7 | 8 | FolderNavigationAction::FolderNavigationAction(const QModelIndex &index, 9 | BookmarkTableModel *tableModel, 10 | BookmarkWidget *bookmarkUi, 11 | QTreeView *treeView) : 12 | m_index(index), 13 | m_tableModel(tableModel), 14 | m_bookmarkUi(bookmarkUi), 15 | m_treeView(treeView) 16 | { 17 | } 18 | 19 | void FolderNavigationAction::execute() 20 | { 21 | if (!m_index.isValid()) 22 | return; 23 | 24 | BookmarkNode *folder = static_cast(m_index.internalPointer()); 25 | m_tableModel->setCurrentFolder(folder); 26 | 27 | if (m_index != m_treeView->currentIndex()) 28 | m_treeView->setCurrentIndex(m_index); 29 | 30 | m_bookmarkUi->showInfoForNode(folder); 31 | } 32 | -------------------------------------------------------------------------------- /src/ui/web/WebLoadObserver.h: -------------------------------------------------------------------------------- 1 | #ifndef WEBLOADOBSERVER_H 2 | #define WEBLOADOBSERVER_H 3 | 4 | #include 5 | 6 | class HistoryManager; 7 | class WebWidget; 8 | 9 | /** 10 | * @class WebLoadObserver 11 | * @brief Observes a \ref WebWidget , waiting for a loadFinished() signal so it may 12 | * notify the \ref HistoryManager of such an event. 13 | */ 14 | class WebLoadObserver : public QObject 15 | { 16 | Q_OBJECT 17 | 18 | public: 19 | /// Constructs the load observer given a pointer to the history manager and the observer's parent 20 | explicit WebLoadObserver(HistoryManager *historyManager, WebWidget *parent); 21 | 22 | private Q_SLOTS: 23 | /// Handles the load finished event - notifying the history manager if the load was a success 24 | void onLoadFinished(bool ok); 25 | 26 | private: 27 | /// Pointer to the application's history manager 28 | HistoryManager *m_historyManager; 29 | 30 | /// Pointer to the web widget that this object is observing 31 | WebWidget *m_webWidget; 32 | }; 33 | 34 | #endif // WEBLOADOBSERVER_H 35 | -------------------------------------------------------------------------------- /src/core/database/bindings/QtSQLite.h: -------------------------------------------------------------------------------- 1 | #ifndef DATABASE_BINDINGS_QT_SQLITE_H_ 2 | #define DATABASE_BINDINGS_QT_SQLITE_H_ 3 | 4 | #include "SQLiteWrapper.h" 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | /// Bindings of native Qt types to the sqlite wrapper 11 | 12 | sqlite::PreparedStatement &operator<<(sqlite::PreparedStatement &stmt, const QDateTime &input); 13 | sqlite::PreparedStatement &operator<<(sqlite::PreparedStatement &stmt, const QString &input); 14 | sqlite::PreparedStatement &operator<<(sqlite::PreparedStatement &stmt, const QUrl &input); 15 | sqlite::PreparedStatement &operator<<(sqlite::PreparedStatement &stmt, const QByteArray &input); 16 | 17 | sqlite::PreparedStatement &operator>>(sqlite::PreparedStatement &stmt, QDateTime &output); 18 | sqlite::PreparedStatement &operator>>(sqlite::PreparedStatement &stmt, QString &output); 19 | sqlite::PreparedStatement &operator>>(sqlite::PreparedStatement &stmt, QUrl &output); 20 | sqlite::PreparedStatement &operator>>(sqlite::PreparedStatement &stmt, QByteArray &output); 21 | 22 | #endif // DATABASE_BINDINGS_QT_SQLITE_H_ 23 | -------------------------------------------------------------------------------- /src/ui/network/AuthDialog.h: -------------------------------------------------------------------------------- 1 | #ifndef AUTHDIALOG_H 2 | #define AUTHDIALOG_H 3 | 4 | #include 5 | 6 | namespace Ui { 7 | class AuthDialog; 8 | } 9 | 10 | /** 11 | * @class AuthDialog 12 | * @brief Dialog used to provide input to a QAuthenticator for standard or proxy authentication 13 | */ 14 | class AuthDialog : public QDialog 15 | { 16 | friend class NetworkAccessManager; 17 | friend class WebPage; 18 | 19 | Q_OBJECT 20 | 21 | public: 22 | /// Constructs the dialog with a given parent 23 | explicit AuthDialog(QWidget *parent = nullptr); 24 | 25 | /// AuthDialog destructor 26 | ~AuthDialog(); 27 | 28 | /// Sets the message to be displayed above the credentials input region of the dialog 29 | void setMessage(const QString &message); 30 | 31 | protected: 32 | /// Returns the username as entered by the user 33 | QString getUsername() const; 34 | 35 | /// Returns the password as entered by the user 36 | QString getPassword() const; 37 | 38 | private: 39 | /// Pointer to the UI elements 40 | Ui::AuthDialog *ui; 41 | }; 42 | 43 | #endif // AUTHDIALOG_H 44 | -------------------------------------------------------------------------------- /src/core/icons/FaviconStoreBridge.h: -------------------------------------------------------------------------------- 1 | #ifndef FAVICONSTOREBRIDGE_H 2 | #define FAVICONSTOREBRIDGE_H 3 | 4 | #include 5 | 6 | class FaviconManager; 7 | class WebPage; 8 | 9 | /** 10 | * @class FaviconStoreBridge 11 | * @brief Bridge between the favicon url-searching script injected into each \ref WebPage , 12 | * and the favicon management system 13 | */ 14 | class FaviconStoreBridge : public QObject 15 | { 16 | Q_OBJECT 17 | 18 | public: 19 | /// Constructs the favicon bridge, given a pointer to the favicon manager and the parent web page 20 | explicit FaviconStoreBridge(FaviconManager *faviconManager, WebPage *parent); 21 | 22 | /// Destructor 23 | ~FaviconStoreBridge(); 24 | 25 | public Q_SLOTS: 26 | /// Called when the parent web page has finished loading and has located the URL of its favicon 27 | void updateIconUrl(const QString &faviconUrl); 28 | 29 | private: 30 | /// Pointer to the page that owns this bridge 31 | WebPage *m_page; 32 | 33 | /// Pointer to the favicon manager 34 | FaviconManager *m_faviconManager; 35 | }; 36 | 37 | #endif // FAVICONSTOREBRIDGE_H 38 | -------------------------------------------------------------------------------- /src/app/assets/images/AdBlock-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.15, written by Peter Selinger 2001-2017 9 | 10 | 11 | 13 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/core/url_suggestion/URLSuggestion.cpp: -------------------------------------------------------------------------------- 1 | #include "BookmarkNode.h" 2 | #include "URLRecord.h" 3 | #include "URLSuggestion.h" 4 | 5 | URLSuggestion::URLSuggestion(const BookmarkNode *bookmark, const HistoryEntry &historyEntry, MatchType matchType) : 6 | Favicon(bookmark->getIcon()), 7 | Title(bookmark->getName()), 8 | URL(bookmark->getURL().toString()), 9 | LastVisit(historyEntry.LastVisit), 10 | URLTypedCount(historyEntry.URLTypedCount), 11 | VisitCount(historyEntry.NumVisits), 12 | PercentMatch(0), 13 | IsHostMatch(false), 14 | IsBookmark(true), 15 | Type(matchType), 16 | HistoryId(historyEntry.VisitID) 17 | { 18 | } 19 | 20 | URLSuggestion::URLSuggestion(const URLRecord &record, const QIcon &icon, MatchType matchType) : 21 | Favicon(icon), 22 | Title(record.getTitle()), 23 | URL(record.getUrl().toString()), 24 | LastVisit(record.getLastVisit()), 25 | URLTypedCount(record.getUrlTypedCount()), 26 | VisitCount(record.getNumVisits()), 27 | PercentMatch(0), 28 | IsHostMatch(false), 29 | IsBookmark(false), 30 | Type(matchType), 31 | HistoryId(record.getVisitId()) 32 | { 33 | } 34 | -------------------------------------------------------------------------------- /src/app/assets/images/folder-new.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/core/network/BlockedSchemeHandler.h: -------------------------------------------------------------------------------- 1 | #ifndef BLOCKEDSCHEMEHANDLER_H 2 | #define BLOCKEDSCHEMEHANDLER_H 3 | 4 | #include "ServiceLocator.h" 5 | #include 6 | 7 | namespace adblock { 8 | class AdBlockManager; 9 | } 10 | 11 | class QIODevice; 12 | class QWebEngineUrlRequestJob; 13 | 14 | /** 15 | * @class BlockedSchemeHandler 16 | * @ingroup AdBlock 17 | * @brief Handler for blocked URI schemes, usd by the AdBlock system when 18 | * redirecting filtered requests 19 | */ 20 | class BlockedSchemeHandler : public QWebEngineUrlSchemeHandler 21 | { 22 | Q_OBJECT 23 | 24 | public: 25 | /// Constructs the scheme handler with a given parent object 26 | BlockedSchemeHandler(const ViperServiceLocator &serviceLocator, QObject *parent = nullptr); 27 | 28 | /// Called whenever a request for the blocked scheme is started 29 | void requestStarted(QWebEngineUrlRequestJob *request) override; 30 | 31 | private: 32 | /// Advertisement blocker 33 | adblock::AdBlockManager *m_adBlockManager; 34 | 35 | /// Service locator 36 | const ViperServiceLocator &m_serviceLocator; 37 | }; 38 | 39 | #endif // BLOCKEDSCHEMEHANDLER_H 40 | -------------------------------------------------------------------------------- /src/ui/preferences/AddSearchEngineDialog.h: -------------------------------------------------------------------------------- 1 | #ifndef ADDSEARCHENGINEDIALOG_H 2 | #define ADDSEARCHENGINEDIALOG_H 3 | 4 | #include 5 | 6 | namespace Ui { 7 | class AddSearchEngineDialog; 8 | } 9 | 10 | /** 11 | * @class AddSearchEngineDialog 12 | * @brief Input dialog that allows the user to add a new search engine to the 13 | * collection used by the quick search tool. 14 | */ 15 | class AddSearchEngineDialog : public QDialog 16 | { 17 | Q_OBJECT 18 | public: 19 | explicit AddSearchEngineDialog(QWidget *parent = 0); 20 | ~AddSearchEngineDialog(); 21 | 22 | /// Clears the values in the line edit widgets 23 | void clearValues(); 24 | 25 | /// Returns the name assigned to the search engine 26 | QString getName() const; 27 | 28 | /// Returns the query URL associated with the search engine 29 | QString getQueryURL() const; 30 | 31 | Q_SIGNALS: 32 | /// Emitted when the user hits the "Ok" button to confirm the addition of a new search engine 33 | void searchEngineAdded(const QString &name, const QString &queryUrl); 34 | 35 | private: 36 | Ui::AddSearchEngineDialog *ui; 37 | }; 38 | 39 | #endif // ADDSEARCHENGINEDIALOG_H 40 | -------------------------------------------------------------------------------- /src/core/adblock/RecommendedSubscriptions.cpp: -------------------------------------------------------------------------------- 1 | #include "RecommendedSubscriptions.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | namespace adblock 9 | { 10 | 11 | RecommendedSubscriptions::RecommendedSubscriptions() : 12 | std::vector>() 13 | { 14 | load(); 15 | } 16 | 17 | void RecommendedSubscriptions::load() 18 | { 19 | if (!empty()) 20 | return; 21 | 22 | QFile f(QStringLiteral(":/adblock_recommended.json")); 23 | if (!f.exists() || !f.open(QIODevice::ReadOnly)) 24 | return; 25 | 26 | QByteArray subData = f.readAll(); 27 | f.close(); 28 | 29 | // Parse the JSON object for recommended subscription objects 30 | QJsonDocument subscriptionDoc(QJsonDocument::fromJson(subData)); 31 | QJsonObject subscriptionObj = subscriptionDoc.object(); 32 | for (auto it = subscriptionObj.begin(); it != subscriptionObj.end(); ++it) 33 | { 34 | const QString name = it.key(); 35 | const QJsonObject itemInfo = it.value().toObject(); 36 | push_back(std::make_pair(name, QUrl(itemInfo.value(QLatin1String("source")).toString()))); 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/annotation-paragraph.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/annotation-note.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 14 | 21 | 28 | 35 | 42 | 43 | -------------------------------------------------------------------------------- /src/core/database/DatabaseWorker.cpp: -------------------------------------------------------------------------------- 1 | #include "DatabaseWorker.h" 2 | 3 | #include 4 | 5 | DatabaseWorker::DatabaseWorker(const QString &dbFile) : 6 | m_database(dbFile.toStdString()) 7 | { 8 | if (!m_database.isValid()) 9 | qWarning() << "Unable to open database " << dbFile; 10 | 11 | // Turn synchronous setting off 12 | if (!m_database.execute("PRAGMA journal_mode=WAL")) 13 | qWarning() << "In DatabaseWorker constructor - could not set journal mode."; 14 | 15 | // Foreign keys 16 | if (!m_database.execute("PRAGMA foreign_keys=\"1\"")) 17 | qWarning() << "In DatabaseWorker constructor - could not enable foreign keys."; 18 | } 19 | 20 | DatabaseWorker::~DatabaseWorker() 21 | { 22 | } 23 | 24 | bool DatabaseWorker::exec(const QString &queryString) 25 | { 26 | return m_database.execute(queryString.toStdString()); 27 | } 28 | 29 | bool DatabaseWorker::hasTable(const QString &tableName) 30 | { 31 | sqlite::PreparedStatement stmt = m_database.prepare(R"(SELECT COUNT(*) FROM sqlite_master WHERE type = 'table' AND name = ?)"); 32 | stmt << tableName; 33 | if (stmt.next()) 34 | { 35 | int result = 0; 36 | stmt >> result; 37 | return result == 1; 38 | } 39 | 40 | return false; 41 | } 42 | -------------------------------------------------------------------------------- /src/core/network/SchemeRegistry.h: -------------------------------------------------------------------------------- 1 | #ifndef SCHEMEREGISTRY_H 2 | #define SCHEMEREGISTRY_H 3 | 4 | #include 5 | #include 6 | 7 | /** 8 | * @class SchemeRegistry 9 | * @brief Defines parsing parameters and security definitions of custom network schemes, 10 | * which are then registered with the web engine. 11 | */ 12 | class SchemeRegistry 13 | { 14 | public: 15 | /// Registers all custom scheme information with the web engine. 16 | /// This method must be called before the \ref BrowserApplication class is initialized 17 | static void registerSchemes(); 18 | 19 | /** 20 | * @brief Determines whether or not the given scheme is secure 21 | * @param scheme The scheme (ex: http, ftp, file) 22 | * @return True if the scheme is secure, false otherwise 23 | */ 24 | static bool isSecure(const QString &scheme); 25 | 26 | /// Returns true if the given scheme should be whitelisted by the advertisement blocking system 27 | static bool isSchemeWhitelisted(const QString &scheme); 28 | 29 | private: 30 | /// Array of secure schemes 31 | static const std::array SecureSchemes; 32 | 33 | /// Array of whitelisted schemes 34 | static const std::array WhitelistedSchemes; 35 | }; 36 | 37 | #endif // SCHEMEREGISTRY_H 38 | -------------------------------------------------------------------------------- /src/ui/user_scripts/AddUserScriptDialog.h: -------------------------------------------------------------------------------- 1 | #ifndef ADDUSERSCRIPTDIALOG_H 2 | #define ADDUSERSCRIPTDIALOG_H 3 | 4 | #include 5 | 6 | namespace Ui { 7 | class AddUserScriptDialog; 8 | } 9 | 10 | /** 11 | * @class AddUserScriptDialog 12 | * @brief Used prior to the creation of a new user script, allows the user to enter some 13 | * meta-information such as the script's name, namespace, description and version 14 | */ 15 | class AddUserScriptDialog : public QDialog 16 | { 17 | Q_OBJECT 18 | 19 | public: 20 | /// Constructs the dialog with an optional pointer to a parent widget 21 | explicit AddUserScriptDialog(QWidget *parent = nullptr); 22 | 23 | /// AddUserScriptDialolg destructor 24 | ~AddUserScriptDialog(); 25 | 26 | Q_SIGNALS: 27 | /// Emitted if the user hits the "Ok" button, confirming the creation of a new user script 28 | void informationEntered(const QString &name, const QString &nameSpace, const QString &description, const QString &version); 29 | 30 | private Q_SLOTS: 31 | /// Called when the "Ok" button is entered, emits the informationEntered(..) signal with script meta-information 32 | void onAccepted(); 33 | 34 | private: 35 | /// Pointer to the UI form elements 36 | Ui::AddUserScriptDialog *ui; 37 | }; 38 | 39 | #endif // ADDUSERSCRIPTDIALOG_H 40 | -------------------------------------------------------------------------------- /src/core/database/sqlite/internal/implementation.cpp: -------------------------------------------------------------------------------- 1 | #include "sqlite3.h" 2 | #include "internal/implementation.h" 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | namespace sqlite 9 | { 10 | namespace internal 11 | { 12 | 13 | int busyHandler(void*, int numTries) 14 | { 15 | // Give up after long enough (5s) 16 | if (numTries * BusyTimeoutIntervalMs >= 5000) 17 | return 0; 18 | 19 | std::this_thread::sleep_for(std::chrono::milliseconds{BusyTimeoutIntervalMs}); 20 | return 1; 21 | } 22 | 23 | void sqliteLogCallback(void*, int errCode, const char *msg) 24 | { 25 | std::cerr << "[SQLite3] [" << errCode << "]: " << msg << std::endl; 26 | } 27 | 28 | Implementation::Implementation() : 29 | m_isConfigured{false}, 30 | m_mutex{} 31 | { 32 | } 33 | 34 | Implementation &Implementation::instance() 35 | { 36 | static Implementation impl; 37 | return impl; 38 | } 39 | 40 | void Implementation::init() 41 | { 42 | std::lock_guard _{ m_mutex }; 43 | if (!m_isConfigured) 44 | { 45 | m_isConfigured = true; 46 | initBackend(); 47 | } 48 | } 49 | 50 | void Implementation::initBackend() 51 | { 52 | sqlite3_config(SQLITE_CONFIG_MULTITHREAD); 53 | sqlite3_config(SQLITE_CONFIG_LOG, sqliteLogCallback); 54 | } 55 | 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/core/history/URLRecord.cpp: -------------------------------------------------------------------------------- 1 | #include "URLRecord.h" 2 | 3 | URLRecord::URLRecord(HistoryEntry &&entry, std::vector &&visits) noexcept : 4 | m_historyEntry(std::move(entry)), 5 | m_visits(std::move(visits)) 6 | { 7 | } 8 | 9 | URLRecord::URLRecord(HistoryEntry &&entry) noexcept : 10 | m_historyEntry(std::move(entry)), 11 | m_visits() 12 | { 13 | } 14 | 15 | const VisitEntry &URLRecord::getLastVisit() const 16 | { 17 | return m_historyEntry.LastVisit; 18 | } 19 | 20 | int URLRecord::getNumVisits() const 21 | { 22 | return m_historyEntry.NumVisits; 23 | } 24 | 25 | int URLRecord::getUrlTypedCount() const 26 | { 27 | return m_historyEntry.URLTypedCount; 28 | } 29 | 30 | const QUrl &URLRecord::getUrl() const 31 | { 32 | return m_historyEntry.URL; 33 | } 34 | 35 | const QString &URLRecord::getTitle() const 36 | { 37 | return m_historyEntry.Title; 38 | } 39 | 40 | int URLRecord::getVisitId() const 41 | { 42 | return m_historyEntry.VisitID; 43 | } 44 | 45 | const std::vector &URLRecord::getVisits() const 46 | { 47 | return m_visits; 48 | } 49 | 50 | void URLRecord::addVisit(VisitEntry entry) 51 | { 52 | m_historyEntry.NumVisits++; 53 | 54 | if (entry > m_historyEntry.LastVisit) 55 | m_historyEntry.LastVisit = entry; 56 | 57 | m_visits.push_back(entry); 58 | } 59 | -------------------------------------------------------------------------------- /src/ui/web/ViewSourceWindow.h: -------------------------------------------------------------------------------- 1 | #ifndef VIEWSOURCEWINDOW_H 2 | #define VIEWSOURCEWINDOW_H 3 | 4 | #include 5 | #include 6 | 7 | namespace Ui { 8 | class ViewSourceWindow; 9 | } 10 | 11 | class HTMLHighlighter; 12 | class WebPage; 13 | 14 | /** 15 | * @class ViewSourceWindow 16 | * @brief Displays the HTML content of a \ref WebPage before any DOM manipulation may occur 17 | * (other than by the WebPage itself). 18 | */ 19 | class ViewSourceWindow : public QWidget 20 | { 21 | Q_OBJECT 22 | 23 | public: 24 | /// Constructs the window with a title and an optional parent 25 | explicit ViewSourceWindow(const QString &title, QWidget *parent = nullptr); 26 | 27 | /// Window destructor. Frees any resources allocated on the heap 28 | ~ViewSourceWindow(); 29 | 30 | /// Sets the web page from which this widget extracts the source into its code editor view 31 | void setWebPage(WebPage *page); 32 | 33 | private Q_SLOTS: 34 | /// Toggles the visibility of the find text widget group at the bottom of the window 35 | void toggleFindTextWidget(); 36 | 37 | private: 38 | /// Pointer to the UI elements in the corresponding .ui file 39 | Ui::ViewSourceWindow *ui; 40 | 41 | /// HTML syntax highlighter 42 | HTMLHighlighter *m_highlighter; 43 | }; 44 | 45 | #endif // VIEWSOURCEWINDOW_H 46 | -------------------------------------------------------------------------------- /src/core/web/WebActionProxy.h: -------------------------------------------------------------------------------- 1 | #ifndef WEBACTIONPROXY_H 2 | #define WEBACTIONPROXY_H 3 | 4 | #include "WebPage.h" 5 | #include 6 | 7 | class QAction; 8 | 9 | /** 10 | * @class WebActionProxy 11 | * @brief Acts as a proxy for a WebAction on the current page 12 | */ 13 | class WebActionProxy : public QObject 14 | { 15 | Q_OBJECT 16 | public: 17 | /// Constructs a new web action proxy 18 | explicit WebActionProxy(WebPage::WebAction action, QAction *proxyAction, QObject *parent = nullptr); 19 | 20 | /// Sets the pointer to the active web page 21 | void setPage(WebPage *page); 22 | 23 | private Q_SLOTS: 24 | /// Called to trigger the web page's WebAction when the main UI's associated 25 | /// action is triggered 26 | void triggerOnPage(); 27 | 28 | /// Called when the web page's action has been changed 29 | void onChange(); 30 | 31 | /// Called in the event that the web page has been destroyed 32 | void onPageDestroyed(); 33 | 34 | /// Called in the event that the proxy action has been destroyed 35 | void onProxyDestroyed(); 36 | 37 | private: 38 | /// Proxy action 39 | QAction *m_proxyAction; 40 | 41 | /// Web page associated with the action proxy 42 | WebPage *m_page; 43 | 44 | /// Web page action type 45 | WebPage::WebAction m_pageAction; 46 | }; 47 | 48 | #endif // WEBACTIONPROXY_H 49 | -------------------------------------------------------------------------------- /src/ui/cookies/CookieModifyDialog.h: -------------------------------------------------------------------------------- 1 | #ifndef COOKIEMODIFYDIALOG_H 2 | #define COOKIEMODIFYDIALOG_H 3 | 4 | #include 5 | #include 6 | 7 | namespace Ui { 8 | class CookieModifyDialog; 9 | } 10 | 11 | class QAbstractButton; 12 | 13 | /** 14 | * @class CookieModifyDialog 15 | * @brief Allows the user to create or edit cookies 16 | */ 17 | class CookieModifyDialog : public QDialog 18 | { 19 | Q_OBJECT 20 | 21 | /// Cookie expiration types 22 | enum class ExpireType { Date = 0, Session = 1 }; 23 | 24 | public: 25 | explicit CookieModifyDialog(QWidget *parent = 0); 26 | ~CookieModifyDialog(); 27 | 28 | /// Sets the cookie to be used by the dialog 29 | void setCookie(const QNetworkCookie &cookie); 30 | 31 | /// Returns the current cookie's data 32 | const QNetworkCookie &getCookie() const; 33 | 34 | private Q_SLOTS: 35 | /// Called when the cookie expiration type combo box value has changed 36 | void onExpireTypeChanged(int index); 37 | 38 | /// Saves the dialog input into the associated cookie, if the button activated was the 'save' button 39 | void setCookieData(QAbstractButton *button); 40 | 41 | private: 42 | Ui::CookieModifyDialog *ui; 43 | 44 | /// Cookie associated with the current instance of the dialog 45 | QNetworkCookie m_cookie; 46 | }; 47 | 48 | #endif // COOKIEMODIFYDIALOG_H 49 | -------------------------------------------------------------------------------- /src/ui/preferences/AdvancedTab.h: -------------------------------------------------------------------------------- 1 | #ifndef ADVANCEDTAB_H 2 | #define ADVANCEDTAB_H 3 | 4 | #include 5 | #include 6 | 7 | namespace Ui { 8 | class AdvancedTab; 9 | } 10 | 11 | /** 12 | * @class AdvancedTab 13 | * @brief Represents the more advanced configuration settings that are exposed to the user. 14 | * This tab is shown in the \ref Preferences widget. 15 | */ 16 | class AdvancedTab : public QWidget 17 | { 18 | Q_OBJECT 19 | 20 | public: 21 | /// Constructs the widget 22 | explicit AdvancedTab(QWidget *parent = nullptr); 23 | 24 | /// Destructor 25 | ~AdvancedTab(); 26 | 27 | /// Sets the process model flag to be shown in the combo box 28 | void setProcessModel(const QString &value); 29 | 30 | /// Returns the current process model flag 31 | QString getProcessModel() const; 32 | 33 | /// Sets the web engine GPU flag (disabled if value == true, otherwise enabled) 34 | void setGpuDisabled(bool value); 35 | 36 | /// Returns true if the GPU should be disabled, false if else 37 | bool isGpuDisabled() const; 38 | 39 | private Q_SLOTS: 40 | /// Changes the text next to the checkbox depending on the given value 41 | void onGpuCheckBoxChanged(bool value); 42 | 43 | private: 44 | /// Pointer to the UI elements 45 | Ui::AdvancedTab *ui; 46 | }; 47 | 48 | #endif // ADVANCEDTAB_H 49 | 50 | -------------------------------------------------------------------------------- /src/ui/network/CertificateViewer.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | CertificateViewer 4 | 5 | 6 | 7 | 0 8 | 0 9 | 560 10 | 663 11 | 12 | 13 | 14 | Certificate Viewer 15 | 16 | 17 | 18 | 19 | 20 | 0 21 | 22 | 23 | 24 | General 25 | 26 | 27 | 28 | 29 | Details 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | CertificateGeneralTab 39 | QWidget 40 |
CertificateGeneralTab.h
41 | 1 42 |
43 |
44 | 45 | 46 |
47 | -------------------------------------------------------------------------------- /cmake/KF5WalletConfigVersion.cmake: -------------------------------------------------------------------------------- 1 | # This is a basic version file for the Config-mode of find_package(). 2 | # It is used by write_basic_package_version_file() as input file for configure_file() 3 | # to create a version-file which can be installed along a config.cmake file. 4 | # 5 | # The created file sets PACKAGE_VERSION_EXACT if the current version string and 6 | # the requested version string are exactly the same and it sets 7 | # PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version. 8 | # The variable CVF_VERSION must be set before calling configure_file(). 9 | 10 | set(PACKAGE_VERSION "5.45.0") 11 | 12 | if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) 13 | set(PACKAGE_VERSION_COMPATIBLE FALSE) 14 | else() 15 | set(PACKAGE_VERSION_COMPATIBLE TRUE) 16 | if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) 17 | set(PACKAGE_VERSION_EXACT TRUE) 18 | endif() 19 | endif() 20 | 21 | # if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: 22 | if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "") 23 | return() 24 | endif() 25 | 26 | # check that the installed version has the same 32/64bit-ness as the one which is currently searching: 27 | if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8") 28 | math(EXPR installedBits "8 * 8") 29 | set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") 30 | set(PACKAGE_VERSION_UNSUITABLE TRUE) 31 | endif() 32 | -------------------------------------------------------------------------------- /src/core/network/NetworkAccessManager.cpp: -------------------------------------------------------------------------------- 1 | #include "NetworkAccessManager.h" 2 | #include "ViperNetworkReply.h" 3 | 4 | #include 5 | #include 6 | 7 | NetworkAccessManager::NetworkAccessManager(QObject *parent) : 8 | QNetworkAccessManager(parent) 9 | { 10 | setObjectName(QStringLiteral("NetworkAccessManager")); 11 | } 12 | 13 | QNetworkReply *NetworkAccessManager::createRequest(NetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData) 14 | { 15 | if (op == NetworkAccessManager::GetOperation) 16 | { 17 | if (request.url().scheme().compare(QStringLiteral("viper")) == 0) 18 | return new ViperNetworkReply(request, this); 19 | } 20 | else if (op == NetworkAccessManager::PostOperation) 21 | { 22 | // Check for existence of content-type header, set to application/x-www-form-urlencoded if not found to prevent warning 23 | const QByteArray contentTypeHeader("content-type"); 24 | if (!request.hasRawHeader(contentTypeHeader)) 25 | { 26 | QNetworkRequest modifiedRequest(request); 27 | modifiedRequest.setRawHeader(contentTypeHeader, QByteArray("application/x-www-form-urlencoded")); 28 | return QNetworkAccessManager::createRequest(op, modifiedRequest, outgoingData); 29 | } 30 | } 31 | return QNetworkAccessManager::createRequest(op, request, outgoingData); 32 | } 33 | -------------------------------------------------------------------------------- /src/ui/widgets/FileChooserLineEdit.h: -------------------------------------------------------------------------------- 1 | #ifndef FILECHOOSERLINEEDIT_H 2 | #define FILECHOOSERLINEEDIT_H 3 | 4 | #include 5 | #include 6 | 7 | class QToolButton; 8 | 9 | /** 10 | * @class FileChooserLineEdit 11 | * @brief Implementation of a line edit widget that includes 12 | * a "Browse" button on its right side, that allows the 13 | * user to select a file or directory to be displayed in 14 | * the line edit section of the widget 15 | */ 16 | class FileChooserLineEdit : public QLineEdit 17 | { 18 | public: 19 | /// Constructs the line edit with a given parent widget 20 | explicit FileChooserLineEdit(QWidget *parent = nullptr); 21 | 22 | /// Sets the mode of the dialog associated with the browse button 23 | void setFileMode(QFileDialog::FileMode mode); 24 | 25 | private Q_SLOTS: 26 | /// Called when the "Browse" button is clicked, spawns a file/folder chooser dialog 27 | void onClickBrowse(); 28 | 29 | protected: 30 | /// Paints the line edit with a button to the right that the user may click on to spawn a 31 | /// \ref QFileDialog 32 | virtual void resizeEvent(QResizeEvent *event) override; 33 | 34 | protected: 35 | /// The "Browse..." button used to select a file or folder 36 | QToolButton *m_buttonBrowse; 37 | 38 | /// Mode of operation of the file chooser dialog 39 | QFileDialog::FileMode m_fileMode; 40 | }; 41 | 42 | #endif // FILECHOOSERLINEEDIT_H 43 | -------------------------------------------------------------------------------- /src/ui/preferences/SearchTab.h: -------------------------------------------------------------------------------- 1 | #ifndef SEARCHTAB_H 2 | #define SEARCHTAB_H 3 | 4 | #include 5 | 6 | namespace Ui { 7 | class SearchTab; 8 | } 9 | 10 | class AddSearchEngineDialog; 11 | 12 | /** 13 | * @class SearchTab 14 | * @brief Allows the user to modify the search engines used in the \ref SearchEngineLineEdit widget 15 | */ 16 | class SearchTab : public QWidget 17 | { 18 | Q_OBJECT 19 | public: 20 | explicit SearchTab(QWidget *parent = 0); 21 | ~SearchTab(); 22 | 23 | private Q_SLOTS: 24 | /// Called when the default search engine has changed to the item in the combo box at the given index 25 | void onDefaultEngineChanged(int index); 26 | 27 | /// Called when the user clicks the "Remove" button after selecting a search engine to be removed 28 | void onRemoveSelectedEngine(); 29 | 30 | /// Displays the dialog to add a search engine 31 | void showAddEngineDialog(); 32 | 33 | /// Adds the given search engine to the collection and to the local UI elements 34 | void addSearchEngine(const QString &name, const QString &queryUrl); 35 | 36 | private: 37 | /// Loads search engine data from the \ref SearchEngineManager 38 | void loadSearchEngines(); 39 | 40 | private: 41 | /// Search tab user interface elements 42 | Ui::SearchTab *ui; 43 | 44 | /// Dialog used to add search engines to the collection 45 | AddSearchEngineDialog *m_addEngineDialog; 46 | }; 47 | 48 | #endif // SEARCHTAB_H 49 | -------------------------------------------------------------------------------- /src/core/autofill/AutoFillBridge.h: -------------------------------------------------------------------------------- 1 | #ifndef AUTOFILLBRIDGE_H 2 | #define AUTOFILLBRIDGE_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | class AutoFill; 10 | class WebPage; 11 | 12 | /** 13 | * @class AutoFillBridge 14 | * @brief Acts as a bridge between the AutoFill system and web content 15 | * through a WebChannel 16 | */ 17 | class AutoFillBridge : public QObject 18 | { 19 | Q_OBJECT 20 | 21 | public: 22 | /// Constructs the AutoFillBridge with a pointer to the auto fill manager and a parent web page 23 | explicit AutoFillBridge(AutoFill *autoFill, WebPage *parent); 24 | 25 | /// AutoFillBridge destructor 26 | ~AutoFillBridge(); 27 | 28 | public Q_SLOTS: 29 | /** 30 | * @brief Triggered by a \ref WebPage when a form was submitted 31 | * @param pageUrl The URL of the page containing the form 32 | * @param username The username field of the form 33 | * @param password The password entered by the user 34 | * @param formData All of the key-value pairs entered into the form 35 | */ 36 | void onFormSubmitted(const QString &pageUrl, const QString &username, const QString &password, const QMap &formData); 37 | 38 | private: 39 | /// Pointer to the web page that owns this bridge 40 | WebPage *m_page; 41 | 42 | /// Pointer to the auto fill manager 43 | AutoFill *m_autoFill; 44 | }; 45 | 46 | #endif // AUTOFILLBRIDGE_H 47 | -------------------------------------------------------------------------------- /src/core/web/public_suffix/PublicSuffixTree.h: -------------------------------------------------------------------------------- 1 | #ifndef _PUBLIC_SUFFIX_TREE_H_ 2 | #define _PUBLIC_SUFFIX_TREE_H_ 3 | 4 | #include "public_suffix/PublicSuffixRule.h" 5 | #include "public_suffix/PublicSuffixTreeNode.h" 6 | 7 | class PublicSuffixTree 8 | { 9 | public: 10 | /// Constructs the empty tree 11 | PublicSuffixTree(); 12 | 13 | /** 14 | * @brief find Searches the tree for a public suffix rule that applies to the given domain. 15 | * @param domain Punycode-formatted domain string 16 | * @return Public suffix rule, if found, otherwise a "null" or no-op rule is returned 17 | */ 18 | PublicSuffixRule find(const QString &domain) const; 19 | 20 | /** 21 | * @brief insert Inserts a new tree node with the given parameters 22 | * @param rule Rule associated with the tree node 23 | * @param label Label (domain segment) to be associated with the node 24 | */ 25 | void insert(PublicSuffixRule &&rule, QString &&label); 26 | 27 | private: 28 | /// Returns the parent node for a given public suffix rule. 29 | /// Ex: If rule.value = "co.uk", parent node = TreeNode{ label="uk", parent=root } 30 | /// If rule.value = "*.co.uk", parent node = TreeNode{ label="co", parent=TN{label="uk"} } 31 | PublicSuffixTreeNode *findParentOf(const PublicSuffixRule &rule); 32 | 33 | private: 34 | /// The root node of the tree 35 | PublicSuffixTreeNode m_root; 36 | }; 37 | 38 | #endif // _PUBLIC_SUFFIX_TREE_H_ 39 | 40 | -------------------------------------------------------------------------------- /src/ui/web/ViewSourceWindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | ViewSourceWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 680 10 | 700 11 | 12 | 13 | 14 | Viewing Source of %1 15 | 16 | 17 | 18 | 19 | 20 | true 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 0 29 | 0 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | CodeEditor 39 | QPlainTextEdit 40 |
CodeEditor.h
41 |
42 | 43 | FindTextWidget 44 | QWidget 45 |
FindTextWidget.h
46 | 1 47 |
48 |
49 | 50 | 51 |
52 | -------------------------------------------------------------------------------- /src/core/database/sqlite/internal/implementation.h: -------------------------------------------------------------------------------- 1 | #ifndef _SQLITE_INTERNAL_IMPLEMENTATION_H_ 2 | #define _SQLITE_INTERNAL_IMPLEMENTATION_H_ 3 | 4 | #include 5 | 6 | namespace sqlite 7 | { 8 | 9 | namespace internal 10 | { 11 | 12 | constexpr int BusyTimeoutIntervalMs = 250; 13 | 14 | /// Handles a busy error when a database is locked by another thread 15 | int busyHandler(void*, int numTries); 16 | 17 | /** 18 | * @class Implementation 19 | * @brief Contains internal library settings and state management routines. 20 | */ 21 | class Implementation 22 | { 23 | private: 24 | /// Default constructor 25 | Implementation(); 26 | 27 | public: 28 | /// Returns the single instance of the implementation class 29 | static Implementation &instance(); 30 | 31 | /// Sets runtime SQLite3 config settings, if not already done so. 32 | void init(); 33 | 34 | private: 35 | /// Sets runtime SQLite3 config settings 36 | void initBackend(); 37 | 38 | public: 39 | /// Forbid copying 40 | Implementation(const Implementation&) = delete; 41 | Implementation &operator=(const Implementation&) = delete; 42 | 43 | private: 44 | /// Flag indicating whether or not the library has been configured 45 | bool m_isConfigured { false }; 46 | 47 | /// To ensure the initLibrary() method is only called once in multi-threaded environments 48 | std::mutex m_mutex; 49 | }; 50 | 51 | } 52 | 53 | } 54 | 55 | #endif // _SQLITE_INTERNAL_IMPLEMENTATION_H_ 56 | 57 | -------------------------------------------------------------------------------- /src/core/user_scripts/WebEngineScriptAdapter.cpp: -------------------------------------------------------------------------------- 1 | #include "WebEngineScriptAdapter.h" 2 | 3 | #include 4 | #include 5 | 6 | WebEngineScriptAdapter::WebEngineScriptAdapter(const UserScript &script) : 7 | m_script() 8 | { 9 | m_script.setName(script.getName()); 10 | m_script.setRunsOnSubFrames(script.isEnabledOnSubFrames()); 11 | m_script.setWorldId(QWebEngineScript::ApplicationWorld); 12 | 13 | auto injectionTime = script.getInjectionTime(); 14 | QWebEngineScript::InjectionPoint webEngineInjectionPoint = QWebEngineScript::DocumentCreation; 15 | switch (injectionTime) 16 | { 17 | case ScriptInjectionTime::DocumentStart: 18 | webEngineInjectionPoint = QWebEngineScript::DocumentCreation; 19 | break; 20 | case ScriptInjectionTime::DocumentEnd: 21 | webEngineInjectionPoint = QWebEngineScript::DocumentReady; 22 | break; 23 | case ScriptInjectionTime::DocumentIdle: 24 | webEngineInjectionPoint = QWebEngineScript::Deferred; 25 | break; 26 | } 27 | m_script.setInjectionPoint(webEngineInjectionPoint); 28 | 29 | QByteArray codeBuffer; 30 | codeBuffer.append(script.getDependencyData()); 31 | codeBuffer.append('\n').append(script.getScriptData().toUtf8()); 32 | 33 | m_script.setSourceCode(QString::fromUtf8(codeBuffer)); 34 | } 35 | 36 | const QWebEngineScript &WebEngineScriptAdapter::getScript() 37 | { 38 | return m_script; 39 | } 40 | -------------------------------------------------------------------------------- /src/app/assets/pdfjs/images/annotation-key.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/core/database/DatabaseWorker.h: -------------------------------------------------------------------------------- 1 | #ifndef DATABASEWORKER_H 2 | #define DATABASEWORKER_H 3 | 4 | #include "sqlite/SQLiteWrapper.h" 5 | #include "bindings/QtSQLite.h" 6 | 7 | #include 8 | 9 | /** 10 | * @class DatabaseWorker 11 | * @brief Base class of all browser components that use their own database for 12 | * storage of data and information. 13 | */ 14 | class DatabaseWorker 15 | { 16 | public: 17 | /** 18 | * @brief DatabaseWorker Constructs an object that interacts with a SQLite database 19 | * @param dbFile Full path of the database file 20 | */ 21 | explicit DatabaseWorker(const QString &dbFile); 22 | 23 | /// Closes the database connection 24 | virtual ~DatabaseWorker(); 25 | 26 | /// Executes the given query string, returning true on success, false on failure. 27 | bool exec(const QString &queryString); 28 | 29 | protected: 30 | /// Returns true if the database contains the given table, false if else. 31 | bool hasTable(const QString &tableName); 32 | 33 | protected: 34 | /// Returns true if the database contains the table structure(s) needed for it to function properly, false if else. 35 | virtual bool hasProperStructure() = 0; 36 | 37 | /// Sets initial table structure(s) of the database 38 | virtual void setup() = 0; 39 | 40 | /// Loads records from the database 41 | virtual void load() = 0; 42 | 43 | protected: 44 | /// Manages the database connection 45 | sqlite::Database m_database; 46 | }; 47 | 48 | #endif // DATABASEWORKER_H 49 | -------------------------------------------------------------------------------- /src/core/bookmarks/BookmarkExporter.h: -------------------------------------------------------------------------------- 1 | #ifndef BOOKMARKEXPORTER_H 2 | #define BOOKMARKEXPORTER_H 3 | 4 | #include "BookmarkManager.h" 5 | #include 6 | #include 7 | #include 8 | 9 | /** 10 | * @class BookmarkExporter 11 | * @brief Converts the user's bookmark data into an exportable HTML Netscape bookmark file format 12 | * @ingroup Bookmarks 13 | */ 14 | class BookmarkExporter 15 | { 16 | public: 17 | /// Constructs the bookmark exporter given a pointer to the BookmarkManager 18 | explicit BookmarkExporter(BookmarkManager *bookmarkMgr); 19 | 20 | /** 21 | * @brief saveTo Attempts to save the user's bookmarks to a file 22 | * @param fileName Name of the file in which the bookmarks will be exported 23 | * @return True on successful export, false on failure 24 | */ 25 | bool saveTo(const QString &fileName); 26 | 27 | private: 28 | /** 29 | * @brief exportFolder Iteratively exports bookmark data into the output file 30 | * @param stream Bookmark file text stream 31 | */ 32 | void exportFolders(QTextStream &stream); 33 | 34 | private: 35 | /// Netscape bookmark file header 36 | static const QString NetscapeHeader; 37 | 38 | /// Bookmark manager 39 | BookmarkManager *m_bookmarkManager; 40 | 41 | /// Output file handle 42 | QFile m_outputFile; 43 | 44 | /// Counts number of recursive calls to exportFolder(..) method to make the proper number of spaces in the html file 45 | int m_recursionLevel; 46 | }; 47 | 48 | #endif // BOOKMARKEXPORTER_H 49 | -------------------------------------------------------------------------------- /src/core/network/ViperNetworkReply.h: -------------------------------------------------------------------------------- 1 | #ifndef VIPERNETWORKREPLY_H 2 | #define VIPERNETWORKREPLY_H 3 | 4 | #include 5 | #include 6 | 7 | /** 8 | * @class ViperNetworkReply 9 | * @brief Handles the viper:// scheme, which is in itself a simple wrapper for 10 | * qrc files 11 | */ 12 | class ViperNetworkReply : public QNetworkReply 13 | { 14 | Q_OBJECT 15 | public: 16 | /// Constructs the network reply, given the original request and an optional parent 17 | explicit ViperNetworkReply(const QNetworkRequest &request, QObject *parent = nullptr); 18 | 19 | /// Unused 20 | void abort() override {} 21 | 22 | /// Returns the number of bytes available for reading 23 | qint64 bytesAvailable() const override; 24 | 25 | protected: 26 | /** 27 | * @brief readData Reads up to maxSize bytes of data into the buffer 28 | * @param data The data buffer 29 | * @param maxSize The size constraint of bytes to be read into the data buffer 30 | * @return The number of bytes read into data 31 | */ 32 | qint64 readData(char *data, qint64 maxSize) override; 33 | 34 | private Q_SLOTS: 35 | /// Called when the reply is finished due to a read error 36 | void errorFinished(); 37 | 38 | private: 39 | /// Attempts to load the resource associated with the request 40 | void loadFile(); 41 | 42 | private: 43 | /// The data buffer 44 | QByteArray m_data; 45 | 46 | /// Current offset into the data buffer 47 | qint64 m_offset; 48 | }; 49 | 50 | #endif // VIPERNETWORKREPLY_H 51 | -------------------------------------------------------------------------------- /src/core/adblock/AdBlockLogTableModel.h: -------------------------------------------------------------------------------- 1 | #ifndef ADBLOCKLOGTABLEMODEL_H 2 | #define ADBLOCKLOGTABLEMODEL_H 3 | 4 | #include "AdBlockLog.h" 5 | #include 6 | #include 7 | 8 | namespace adblock 9 | { 10 | 11 | /** 12 | * @class LogTableModel 13 | * @brief Interacts with a table view to display the logs from the AdBlock system 14 | * @ingroup AdBlock 15 | */ 16 | class LogTableModel : public QAbstractTableModel 17 | { 18 | Q_OBJECT 19 | 20 | public: 21 | /// Constructs the table model with a pointer to its parent 22 | explicit LogTableModel(QObject *parent = nullptr); 23 | 24 | // Header: 25 | QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; 26 | 27 | // Basic functionality: 28 | int rowCount(const QModelIndex &parent = QModelIndex()) const override; 29 | int columnCount(const QModelIndex &parent = QModelIndex()) const override; 30 | 31 | /// Returns the data associated at the index with the given role 32 | QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 33 | 34 | /// Sets the log entry data to be shown in the table 35 | void setLogEntries(const std::vector &entries); 36 | 37 | private: 38 | /// Returns the element typemask as a formatted string ("type1[, type2, ..., typeN]") 39 | QString elementTypeToString(ElementType type) const; 40 | 41 | private: 42 | /// Logs stored in the table model 43 | std::vector m_logEntries; 44 | }; 45 | 46 | } 47 | 48 | #endif // ADBLOCKLOGTABLEMODEL_H 49 | -------------------------------------------------------------------------------- /src/core/web/public_suffix/PublicSuffixTreeNode.h: -------------------------------------------------------------------------------- 1 | #ifndef _PUBLIC_SUFFIX_TREE_NODE_H_ 2 | #define _PUBLIC_SUFFIX_TREE_NODE_H_ 3 | 4 | #include "public_suffix/PublicSuffixRule.h" 5 | #include "TreeNode.h" 6 | #include 7 | #include 8 | 9 | class PublicSuffixTreeNode final : public TreeNode 10 | { 11 | public: 12 | /** 13 | * @brief PublicSuffixTreeNode Constructs the tree node with a corresponding rule and domain segment (label) 14 | * @param rule Rule that the tree node represents 15 | * @param label Label of the node at its relative depth in the tree 16 | */ 17 | explicit PublicSuffixTreeNode(PublicSuffixRule &&rule, QString &&label) noexcept; 18 | PublicSuffixTreeNode(const PublicSuffixTreeNode &other) = default; 19 | PublicSuffixTreeNode(PublicSuffixTreeNode &&other) noexcept = default; 20 | 21 | /// Returns a vector of all child nodes that match the domain segment input list 22 | std::vector findMatching(QStringList domainLabels) const; 23 | 24 | /// Returns the label associated with the tree node 25 | const QString &getLabel() const; 26 | 27 | /// Returns the rule associated with the tree node 28 | const PublicSuffixRule &getRule() const; 29 | 30 | private: 31 | /// Label associated with this level of the tree node 32 | /// Ex: TLD = "co.uk", Level 0 label ="uk", level 1 label = "co" 33 | QString m_label; 34 | 35 | /// Rule associated with the tree node 36 | PublicSuffixRule m_rule; 37 | }; 38 | 39 | #endif // _PUBLIC_SUFFIX_TREE_NODE_H_ 40 | -------------------------------------------------------------------------------- /src/core/web/WebHitTestResult.cpp: -------------------------------------------------------------------------------- 1 | #include "WebHitTestResult.h" 2 | #include "WebPage.h" 3 | 4 | WebHitTestResult::WebHitTestResult(WebPage *page, const QString &hitTestScript) : 5 | m_isEditable(false), 6 | m_linkUrl(), 7 | m_mediaUrl(), 8 | m_mediaType(MediaTypeNone), 9 | m_selectedText() 10 | { 11 | if (page) 12 | { 13 | QMap resultMap = page->runJavaScriptBlocking(hitTestScript).toMap(); 14 | m_isEditable = resultMap.value(QLatin1String("isEditable")).toBool(); 15 | m_linkUrl = resultMap.value(QLatin1String("linkUrl")).toUrl(); 16 | m_mediaUrl = resultMap.value(QLatin1String("mediaUrl")).toUrl(); 17 | 18 | m_mediaType = static_cast(resultMap.value(QLatin1String("mediaType")).toInt()); 19 | 20 | m_selectedText = resultMap.value(QLatin1String("selectedText")).toString(); 21 | 22 | bool hasSelection = resultMap.value(QLatin1String("hasSelection")).toBool(); 23 | if (hasSelection && m_selectedText.isEmpty()) 24 | m_selectedText = page->selectedText(); 25 | } 26 | } 27 | 28 | bool WebHitTestResult::isContentEditable() const 29 | { 30 | return m_isEditable; 31 | } 32 | 33 | QUrl WebHitTestResult::linkUrl() const 34 | { 35 | return m_linkUrl; 36 | } 37 | 38 | WebHitTestResult::MediaType WebHitTestResult::mediaType() const 39 | { 40 | return m_mediaType; 41 | } 42 | 43 | QUrl WebHitTestResult::mediaUrl() const 44 | { 45 | return m_mediaUrl; 46 | } 47 | 48 | QString WebHitTestResult::selectedText() const 49 | { 50 | return m_selectedText; 51 | } 52 | -------------------------------------------------------------------------------- /src/ui/autofill/AutoFillCredentialsView.h: -------------------------------------------------------------------------------- 1 | #ifndef AUTOFILLCREDENTIALSVIEW_H 2 | #define AUTOFILLCREDENTIALSVIEW_H 3 | 4 | #include "CredentialStore.h" 5 | #include 6 | 7 | namespace Ui { 8 | class AutoFillCredentialsView; 9 | } 10 | 11 | class AutoFill; 12 | 13 | /** 14 | * @class AutoFillCredentialsView 15 | * @brief Widget used to display the credentials that have been saved for 16 | * the \ref AutoFill system 17 | */ 18 | class AutoFillCredentialsView : public QWidget 19 | { 20 | Q_OBJECT 21 | 22 | public: 23 | /// Constructs the widget with a given parent 24 | explicit AutoFillCredentialsView(QWidget *parent = nullptr); 25 | 26 | /// Widget destructor 27 | ~AutoFillCredentialsView(); 28 | 29 | private Q_SLOTS: 30 | /// Called when one or more rows of data are to be removed from the \ref CredentialStore 31 | void onClickRemoveSelection(); 32 | 33 | /// Called when the user clicks the "Remove all" credentials button 34 | void onClickRemoveAll(); 35 | 36 | private: 37 | /// Populates the table with the credentials saved for the AutoFill system 38 | void populateTable(); 39 | 40 | private: 41 | /// Pointer to the UI elements 42 | Ui::AutoFillCredentialsView *ui; 43 | 44 | /// Pointer to the AutoFill manager 45 | AutoFill *m_autoFill; 46 | 47 | /// Flag to track whether or not passwords are currently being shown in the table 48 | bool m_showingPasswords; 49 | 50 | /// The credentials shown in the table 51 | std::vector m_credentials; 52 | }; 53 | 54 | #endif // AUTOFILLCREDENTIALSVIEW_H 55 | -------------------------------------------------------------------------------- /src/core/url_suggestion/URLSuggestionListModel.cpp: -------------------------------------------------------------------------------- 1 | #include "URLSuggestionListModel.h" 2 | 3 | URLSuggestionListModel::URLSuggestionListModel(QObject *parent) : 4 | QAbstractListModel(parent), 5 | m_suggestions() 6 | { 7 | } 8 | 9 | int URLSuggestionListModel::rowCount(const QModelIndex &/*parent*/) const 10 | { 11 | return static_cast(m_suggestions.size()); 12 | } 13 | 14 | QVariant URLSuggestionListModel::data(const QModelIndex &index, int role) const 15 | { 16 | if (index.row() < 0 || index.row() >= rowCount()) 17 | return QVariant(); 18 | 19 | const URLSuggestion &item = m_suggestions.at(index.row()); 20 | if (role == Role::Favicon) 21 | return item.Favicon; 22 | else if (role == Role::Title) 23 | return item.Title; 24 | else if (role == Role::Link) 25 | return item.URL; 26 | else if (role == Role::Bookmark) 27 | return item.IsBookmark; 28 | else if (role == Role::MatchedBy) 29 | return static_cast(item.Type); 30 | 31 | return QVariant(); 32 | } 33 | 34 | void URLSuggestionListModel::setSuggestions(const std::vector &suggestions) 35 | { 36 | beginResetModel(); 37 | m_suggestions = suggestions; 38 | endResetModel(); 39 | } 40 | 41 | bool URLSuggestionListModel::removeRows(int row, int count, const QModelIndex &parent) 42 | { 43 | if (row < 0 || row + count > rowCount()) 44 | return false; 45 | 46 | beginRemoveRows(parent, row, row + count - 1); 47 | m_suggestions.erase(m_suggestions.begin() + row, m_suggestions.begin() + row + count); 48 | endRemoveRows(); 49 | 50 | return true; 51 | } 52 | -------------------------------------------------------------------------------- /src/ui/user_agents/UserAgentMenu.h: -------------------------------------------------------------------------------- 1 | #ifndef USERAGENTMENU_H 2 | #define USERAGENTMENU_H 3 | 4 | #include "ServiceLocator.h" 5 | #include 6 | 7 | class Settings; 8 | class UserAgentManager; 9 | 10 | class QActionGroup; 11 | 12 | /** 13 | * @class UserAgentMenu 14 | * @brief Manages the browser's user agent control menu, found in the tools menu 15 | */ 16 | class UserAgentMenu : public QMenu 17 | { 18 | friend class ToolMenu; 19 | 20 | Q_OBJECT 21 | 22 | public: 23 | /// Constructs the user agent menu with the given parent 24 | UserAgentMenu(QWidget *parent = nullptr); 25 | 26 | /// Constructs the user agent menu with a title and a parent. 27 | UserAgentMenu(const QString &title, QWidget *parent = nullptr); 28 | 29 | /// Destroys the menu 30 | virtual ~UserAgentMenu(); 31 | 32 | protected: 33 | /// Passes a reference to the service locator, which allows the menu 34 | /// to fetch the instance of the User Agent manager as well as the 35 | /// application settings 36 | void setServiceLocator(const ViperServiceLocator &serviceLocator); 37 | 38 | public Q_SLOTS: 39 | /// Resets the items belonging to the user agent menu 40 | void resetItems(); 41 | 42 | private: 43 | /// Connects signals from the user agent manager to the appropriate UI update calls in the menu 44 | void setup(); 45 | 46 | private: 47 | /// Application settings 48 | Settings *m_settings; 49 | 50 | /// User agent manager 51 | UserAgentManager *m_userAgentManager; 52 | 53 | /// Action group for user agent items 54 | QActionGroup *m_userAgentGroup; 55 | }; 56 | 57 | #endif // USERAGENTMENU_H 58 | -------------------------------------------------------------------------------- /cmake/KF5WalletConfig.cmake: -------------------------------------------------------------------------------- 1 | 2 | ####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### 3 | ####### Any changes to this file will be overwritten by the next CMake run #### 4 | ####### The input file was KF5WalletConfig.cmake.in ######## 5 | 6 | get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) 7 | 8 | # Use original install prefix when loaded through a "/usr move" 9 | # cross-prefix symbolic link such as /lib -> /usr/lib. 10 | get_filename_component(_realCurr "${CMAKE_CURRENT_LIST_DIR}" REALPATH) 11 | get_filename_component(_realOrig "/usr/lib64/cmake/KF5Wallet" REALPATH) 12 | if(_realCurr STREQUAL _realOrig) 13 | set(PACKAGE_PREFIX_DIR "/usr") 14 | endif() 15 | unset(_realOrig) 16 | unset(_realCurr) 17 | 18 | macro(set_and_check _var _file) 19 | set(${_var} "${_file}") 20 | if(NOT EXISTS "${_file}") 21 | message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") 22 | endif() 23 | endmacro() 24 | 25 | macro(check_required_components _NAME) 26 | foreach(comp ${${_NAME}_FIND_COMPONENTS}) 27 | if(NOT ${_NAME}_${comp}_FOUND) 28 | if(${_NAME}_FIND_REQUIRED_${comp}) 29 | set(${_NAME}_FOUND FALSE) 30 | endif() 31 | endif() 32 | endforeach() 33 | endmacro() 34 | 35 | #################################################################################### 36 | 37 | set(KWALLET_DBUS_INTERFACES_DIR "${PACKAGE_PREFIX_DIR}/share/dbus-1/interfaces") 38 | 39 | include(CMakeFindDependencyMacro) 40 | find_dependency(Qt5Gui 5.8.0) 41 | 42 | include("${CMAKE_CURRENT_LIST_DIR}/KF5WalletTargets.cmake") 43 | 44 | -------------------------------------------------------------------------------- /src/core/bookmarks/BookmarkImporter.h: -------------------------------------------------------------------------------- 1 | #ifndef BOOKMARKIMPORTER_H 2 | #define BOOKMARKIMPORTER_H 3 | 4 | #include "BookmarkManager.h" 5 | 6 | #include 7 | 8 | /** 9 | * @class BookmarkImporter 10 | * @brief Parses Netscape HTML formatted bookmarks, importing them 11 | * into the user's bookmark system 12 | * @ingroup Bookmarks 13 | */ 14 | class BookmarkImporter 15 | { 16 | public: 17 | /// Constructs the bookmark importer, given a pointer to the bookmark node manager 18 | explicit BookmarkImporter(BookmarkManager *bookmarkMgr); 19 | 20 | /** 21 | * @brief import Attempts to import bookmarks from the given HTML file into a bookmark folder 22 | * @param fileName File containing Netscape formatted bookmark data 23 | * @param importFolder Root folder to import bookmarks into 24 | * @return True on successful import, false on failure 25 | */ 26 | bool import(const QString &fileName, BookmarkNode *importFolder); 27 | 28 | private: 29 | /// Bookmark node manager 30 | BookmarkManager *m_bookmarkManager; 31 | 32 | /// Folder element opening and closing tags 33 | QLatin1String m_folderStartTag; 34 | QLatin1String m_folderEndTag; 35 | 36 | /// Folder name element opening and closing tags 37 | QLatin1String m_folderNameStartTag; 38 | QLatin1String m_folderNameEndTag; 39 | 40 | /// Bookmark element opening and closing tags 41 | QLatin1String m_bookmarkStartTag; 42 | QLatin1String m_bookmarkEndTag; 43 | 44 | /// XML element opening and closing characters 45 | QChar m_startTag; 46 | QChar m_endTag; 47 | }; 48 | 49 | #endif // BOOKMARKIMPORTER_H 50 | -------------------------------------------------------------------------------- /src/ui/bookmarks/FolderNavigationAction.h: -------------------------------------------------------------------------------- 1 | #ifndef FOLDERNAVIGATIONACTION_H 2 | #define FOLDERNAVIGATIONACTION_H 3 | 4 | #include 5 | 6 | class BookmarkTableModel; 7 | class BookmarkWidget; 8 | class QTreeView; 9 | 10 | /** 11 | * @class FolderNavigationAction 12 | * @brief Encapsulates the functionality of navigating between bookmark 13 | * folders in the UI. Implemented per the command pattern to support 14 | * undo() and redo() operations with relative ease. 15 | * @ingroup Bookmarks 16 | */ 17 | class FolderNavigationAction 18 | { 19 | public: 20 | /** 21 | * @brief Instantiates the action with a fixed set of parameters 22 | * @param index Folder index of the target folder (from \ref BookmarkFolderModel) 23 | * @param tableModel Table model pointer 24 | * @param treeView The folder tree view 25 | */ 26 | explicit FolderNavigationAction(const QModelIndex &index, 27 | BookmarkTableModel *tableModel, 28 | BookmarkWidget *bookmarkUi, 29 | QTreeView *treeView); 30 | 31 | /** 32 | * @brief Navigates to the bookmark folder associated with this action. 33 | */ 34 | void execute(); 35 | 36 | private: 37 | /// The folder model index 38 | QModelIndex m_index; 39 | 40 | /// Pointer to the table model, needed for both undo and execute 41 | BookmarkTableModel *m_tableModel; 42 | 43 | /// User interface 44 | BookmarkWidget *m_bookmarkUi; 45 | 46 | /// Folder navigation tree view 47 | QTreeView *m_treeView; 48 | }; 49 | 50 | #endif // FOLDERNAVIGATIONACTION_H 51 | -------------------------------------------------------------------------------- /src/ui/widgets/FindTextWidget.h: -------------------------------------------------------------------------------- 1 | #ifndef FINDTEXTWIDGET_H 2 | #define FINDTEXTWIDGET_H 3 | 4 | #include 5 | #include 6 | 7 | namespace Ui { 8 | class FindTextWidget; 9 | } 10 | 11 | class QLineEdit; 12 | class ITextFinder; 13 | 14 | /** 15 | * @class FindTextWidget 16 | * @brief Used to search for any given text in either a web page or a text document 17 | */ 18 | class FindTextWidget : public QWidget 19 | { 20 | Q_OBJECT 21 | 22 | public: 23 | /// Constructs the text finder widget with the given parent 24 | explicit FindTextWidget(QWidget *parent = nullptr); 25 | 26 | /// FindTextWidget destructor 27 | ~FindTextWidget(); 28 | 29 | /// Sets the instance of the text finder that will be used by this widget. 30 | void setTextFinder(std::unique_ptr &&textFinder); 31 | 32 | /// Returns a pointer to the text finder 33 | ITextFinder *getTextFinder() const; 34 | 35 | /// Returns a pointer to the line edit widget (used to acquire focus) 36 | QLineEdit *getLineEdit(); 37 | 38 | Q_SIGNALS: 39 | /// Emitted when a text document is aesthetically modified by the text finder 40 | void pseudoModifiedDocument(); 41 | 42 | public Q_SLOTS: 43 | /// Clears the UI labels 44 | void clearLabels(); 45 | 46 | protected: 47 | /// Paints the widget onto its parent. This method is overrided in order to draw a border around the widget 48 | virtual void paintEvent(QPaintEvent *event) override; 49 | 50 | private: 51 | /// Find text UI 52 | Ui::FindTextWidget *ui; 53 | 54 | /// Text finding implementation 55 | std::unique_ptr m_textFinder; 56 | }; 57 | 58 | #endif // FINDTEXTWIDGET_H 59 | -------------------------------------------------------------------------------- /src/core/session/SessionManager.h: -------------------------------------------------------------------------------- 1 | #ifndef SESSIONMANAGER_H 2 | #define SESSIONMANAGER_H 3 | 4 | #include 5 | #include 6 | 7 | class BrowserApplication; 8 | class MainWindow; 9 | 10 | /** 11 | * @class SessionManager 12 | * @brief Handles the serialization of active browsing sessions when the application is being closed, and the 13 | * deserialization of a saved browsing session when the application is being initialized 14 | */ 15 | class SessionManager 16 | { 17 | public: 18 | /// Default constructor 19 | SessionManager(); 20 | 21 | /// Returns true if the session has already been saved, false if else 22 | bool alreadySaved() const; 23 | 24 | /// Sets the path of the data file in which session information is stored 25 | void setSessionFile(const QString &fullPath); 26 | 27 | /// Saves the state of each window in the container 28 | void saveState(std::vector &windows); 29 | 30 | /** 31 | * @brief restoreSession Restores the previous browsing session 32 | * @param firstWindow Pointer to the first browsing window, which is opened prior to this call 33 | * while the application is initializing. 34 | * @param browserApplication Pointer to the browser application instance, which is used to spawn 35 | * any windows other than the first. 36 | */ 37 | void restoreSession(MainWindow *firstWindow, BrowserApplication *browserApplication); 38 | 39 | private: 40 | /// Path of the file in which session data is stored 41 | QString m_dataFile; 42 | 43 | /// True if session has already been saved, false if else 44 | bool m_savedSession; 45 | }; 46 | 47 | #endif // SESSIONMANAGER_H 48 | -------------------------------------------------------------------------------- /tests/core/database/FakeDatabaseWorker.cpp: -------------------------------------------------------------------------------- 1 | #include "FakeDatabaseWorker.h" 2 | 3 | #include 4 | 5 | FakeDatabaseWorker::FakeDatabaseWorker(const QString &dbFile) : 6 | DatabaseWorker(dbFile), 7 | m_entries() 8 | { 9 | } 10 | 11 | FakeDatabaseWorker::~FakeDatabaseWorker() 12 | { 13 | save(); 14 | } 15 | 16 | sqlite::Database &FakeDatabaseWorker::getHandle() 17 | { 18 | return m_database; 19 | } 20 | 21 | const std::vector &FakeDatabaseWorker::getEntries() const 22 | { 23 | return m_entries; 24 | } 25 | 26 | void FakeDatabaseWorker::setEntries(std::vector entries) 27 | { 28 | m_entries = entries; 29 | } 30 | 31 | bool FakeDatabaseWorker::hasProperStructure() 32 | { 33 | return hasTable(QLatin1String("Information")); 34 | } 35 | 36 | void FakeDatabaseWorker::setup() 37 | { 38 | // Setup table structures 39 | QVERIFY(exec(QLatin1String("CREATE TABLE IF NOT EXISTS Information(id INTEGER PRIMARY KEY, name TEXT NOT NULL)"))); 40 | } 41 | 42 | void FakeDatabaseWorker::save() 43 | { 44 | QVERIFY(exec(QLatin1String("DELETE FROM Information"))); 45 | 46 | auto stmt = m_database.prepare(R"(INSERT INTO Information(name) VALUES (?))"); 47 | for (const auto &name : m_entries) 48 | { 49 | if (name.empty()) 50 | continue; 51 | 52 | stmt << name; 53 | QVERIFY(stmt.execute()); 54 | stmt.reset(); 55 | } 56 | } 57 | 58 | void FakeDatabaseWorker::load() 59 | { 60 | auto query = m_database.prepare(R"(SELECT name FROM Information)"); 61 | while (query.next()) 62 | { 63 | std::string name; 64 | query >> name; 65 | m_entries.push_back(name); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/core/web/public_suffix/PublicSuffixRuleParser.cpp: -------------------------------------------------------------------------------- 1 | #include "public_suffix/PublicSuffixRuleParser.h" 2 | 3 | #include 4 | #include 5 | 6 | std::vector PublicSuffixRuleParser::loadRules(const QString &fileName) 7 | { 8 | std::vector result; 9 | 10 | QFile ruleFile(fileName); 11 | if (!ruleFile.exists() || !ruleFile.open(QIODevice::ReadOnly)) 12 | return result; 13 | 14 | QString line; 15 | QTextStream stream(&ruleFile); 16 | while (stream.readLineInto(&line)) 17 | { 18 | line = line.trimmed(); 19 | 20 | if (line.isEmpty() || line.startsWith(QStringLiteral("//"))) 21 | continue; 22 | 23 | result.emplace_back(parseLine(line)); 24 | } 25 | 26 | // Parsing into tree: 27 | // 1) Sort this vector in ascending order of rule.numLabels 28 | // 2) Create empty root tree node 29 | // 3) Iterate through this vector 30 | // 4a) For each rule with numLabels == 1, create a child of the empty root node 31 | // 4b) For each rule with numLabels > 1, find the node with same parent label and append as a child 32 | return result; 33 | } 34 | 35 | PublicSuffixRule PublicSuffixRuleParser::parseLine(QString line) 36 | { 37 | PublicSuffixRuleType ruleType { PublicSuffixRuleType::Normal }; 38 | 39 | const QChar start = line.at(0); 40 | if (start == u'!') 41 | { 42 | line = line.mid(1); 43 | ruleType = PublicSuffixRuleType::Exception; 44 | } 45 | else if (start == u'*') 46 | ruleType = PublicSuffixRuleType::Wildcard; 47 | 48 | const int numLabels = line.count(u'.') + 1; 49 | 50 | return { ruleType, numLabels, line }; 51 | } 52 | -------------------------------------------------------------------------------- /src/ui/web/WebLoadObserver.cpp: -------------------------------------------------------------------------------- 1 | #include "CommonUtil.h" 2 | #include "HistoryManager.h" 3 | #include "WebLoadObserver.h" 4 | #include "WebWidget.h" 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | WebLoadObserver::WebLoadObserver(HistoryManager *historyManager, WebWidget *parent) : 11 | QObject(parent), 12 | m_historyManager(historyManager), 13 | m_webWidget(parent) 14 | { 15 | connect(parent, &WebWidget::loadFinished, this, &WebLoadObserver::onLoadFinished); 16 | } 17 | 18 | void WebLoadObserver::onLoadFinished(bool ok) 19 | { 20 | if (!ok) 21 | return; 22 | 23 | const QString title = m_webWidget->getTitle(); 24 | const QUrl url = m_webWidget->url(); 25 | const QUrl originalUrl = m_webWidget->getOriginalUrl(); 26 | const QString scheme = url.scheme().toLower(); 27 | 28 | // Check if we should ignore this page 29 | const std::array ignoreSchemes { QStringLiteral("qrc"), QStringLiteral("viper") }; 30 | if (url.isEmpty() || originalUrl.isEmpty() || scheme.isEmpty()) 31 | return; 32 | 33 | for (const QString &ignoreScheme : ignoreSchemes) 34 | { 35 | if (scheme == ignoreScheme) 36 | return; 37 | } 38 | 39 | const QUrl &lastTypedUrl = m_webWidget->getLastTypedUrl(); 40 | const bool wasTypedByUser = !lastTypedUrl.isEmpty() 41 | && (CommonUtil::doUrlsMatch(originalUrl, lastTypedUrl, true) || CommonUtil::doUrlsMatch(url, lastTypedUrl, true)); 42 | if (wasTypedByUser) 43 | m_webWidget->clearLastTypedUrl(); 44 | 45 | // Notify the history manager 46 | m_historyManager->addVisit(url, title, QDateTime::currentDateTime(), originalUrl, wasTypedByUser); 47 | } 48 | -------------------------------------------------------------------------------- /src/core/utility/FastHash.h: -------------------------------------------------------------------------------- 1 | #ifndef FASTHASH_H 2 | #define FASTHASH_H 3 | 4 | #include 5 | #include 6 | 7 | /** 8 | * @class FastHash 9 | * @brief A class implementing the rabin-karp string matching algorithm 10 | * through a set of static methods. This is used in cases where 11 | * a very large number of strings must be compared to a target 12 | * as fast as possible 13 | */ 14 | class FastHash 15 | { 16 | public: 17 | FastHash() = default; 18 | 19 | /// Calculates and returns the difference hash of a needle, which is later used in the rolling hash mechanism 20 | static quint64 getDifferenceHash(quint64 needleLength); 21 | 22 | /// Calculates and returns the Rabin-Karp hash value of the given needle 23 | static quint64 getNeedleHash(const std::wstring &needle); 24 | 25 | /** 26 | * Determines whether or not a string (haystack) contains a substring (needle) 27 | * 28 | * @param needle A reference to the target substring 29 | * @param haystack The string that will be searched for a substring 30 | * @param needleHash A precomputed hash of the needle 31 | * @param differenceHash A precomputed difference hash of the needle, which is used to calculate a rolling hash 32 | * @return True if needle is found in haystack, false if else 33 | */ 34 | static bool isMatch(const std::wstring &needle, const std::wstring &haystack, quint64 needleHash, quint64 differenceHash); 35 | 36 | /// Radix length, or base used in the rolling hash 37 | static const quint64 RadixLength; 38 | 39 | /// A fairly large prime modulus used in the rolling hash 40 | static const quint64 Prime; 41 | }; 42 | 43 | #endif // FASTHASH_H 44 | -------------------------------------------------------------------------------- /src/core/web/public_suffix/PublicSuffixManager.h: -------------------------------------------------------------------------------- 1 | #ifndef _PUBLIC_SUFFIX_MANAGER_H_ 2 | #define _PUBLIC_SUFFIX_MANAGER_H_ 3 | 4 | #include "public_suffix/PublicSuffixTree.h" 5 | #include 6 | 7 | /** 8 | * @class PublicSuffixManager 9 | * @brief Acts as the interface between the public suffix database and 10 | * any application APIs that rely on such information (eg, the URL API) 11 | */ 12 | class PublicSuffixManager : public QObject 13 | { 14 | public: 15 | /// Constructs the public suffix manager 16 | explicit PublicSuffixManager(QObject *parent = nullptr); 17 | 18 | /// Destructor 19 | ~PublicSuffixManager(); 20 | 21 | /// Singleton instance 22 | static PublicSuffixManager &instance(); 23 | 24 | /** 25 | * @brief findTld Searches the public suffix list for the top-level domain that the given domain belongs to 26 | * @param domain Domain with which to perform the search 27 | * @return Substring of the domain, containing the top-level domain segment 28 | */ 29 | QString findTld(const QString &domain) const; 30 | 31 | /** 32 | * @brief findRule Searches for a public suffix rule that applies to the given domain. 33 | * @param domain Punycode-formatted domain string 34 | * @return Public suffix rule, if found, otherwise a "null" or no-op rule is returned 35 | */ 36 | PublicSuffixRule findRule(const QString &domain) const; 37 | 38 | private: 39 | /// Loads the public suffix data file into memory, and constructs the tree out of the 40 | /// public suffix rules 41 | void load(); 42 | 43 | private: 44 | /// Tree of suffix rules 45 | PublicSuffixTree m_tree; 46 | }; 47 | 48 | #endif // _PUBLIC_SUFFIX_MANAGER_H_ 49 | -------------------------------------------------------------------------------- /src/core/network/ViperSchemeHandler.cpp: -------------------------------------------------------------------------------- 1 | #include "ViperSchemeHandler.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | ViperSchemeHandler::ViperSchemeHandler(QObject *parent) : 10 | QWebEngineUrlSchemeHandler(parent) 11 | { 12 | } 13 | 14 | void ViperSchemeHandler::requestStarted(QWebEngineUrlRequestJob *request) 15 | { 16 | QIODevice *contents = loadFile(request); 17 | if (!contents) 18 | { 19 | request->fail(QWebEngineUrlRequestJob::UrlNotFound); 20 | return; 21 | } 22 | 23 | QMimeDatabase db; 24 | QMimeType type = db.mimeTypeForData(contents); 25 | QByteArray mimeType = QByteArray::fromStdString(type.name().toStdString()); 26 | if (request && request->requestUrl().toString().endsWith(QLatin1String(".css"))) 27 | mimeType = QByteArray::fromStdString(R"(text/css)"); 28 | request->reply(mimeType, contents); 29 | } 30 | 31 | QIODevice *ViperSchemeHandler::loadFile(QWebEngineUrlRequestJob *request) 32 | { 33 | // Extract file name from URL 34 | QString qrcPath = request->requestUrl().toString(); 35 | qrcPath = qrcPath.mid(6); 36 | if (qrcPath.startsWith(QLatin1String("//"))) 37 | qrcPath = qrcPath.mid(2); 38 | 39 | int paramPos = qrcPath.indexOf("?"); 40 | if (paramPos >= 0) 41 | qrcPath = qrcPath.left(paramPos); 42 | 43 | // Attempt to load the qrc file 44 | QFile *f = new QFile(QString(":/%1").arg(qrcPath)); 45 | if (!f->open(QIODevice::ReadOnly)) 46 | { 47 | delete f; 48 | return nullptr; 49 | } 50 | 51 | connect(request, &QObject::destroyed, f, &QFile::deleteLater); 52 | return f; 53 | } 54 | -------------------------------------------------------------------------------- /src/ui/adblock/AdBlockSubscribeDialog.h: -------------------------------------------------------------------------------- 1 | #ifndef ADBLOCKSUBSCRIBEDIALOG_H 2 | #define ADBLOCKSUBSCRIBEDIALOG_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | namespace Ui { 11 | class AdBlockSubscribeDialog; 12 | } 13 | 14 | /** 15 | * @ingroup AdBlock 16 | * @brief Stores information needed to install one of the dialog's recommended subscriptions 17 | */ 18 | struct AdBlockSubscriptionInfo 19 | { 20 | /// Name of subscription 21 | QString Name; 22 | 23 | /// URL of the subscription file 24 | QUrl SubscriptionURL; 25 | 26 | /// URL of the resource file associated with subscription (if any) 27 | QUrl ResourceURL; 28 | }; 29 | 30 | /** 31 | * @class AdBlockSubscribeDialog 32 | * @ingroup AdBlock 33 | * @brief Displays a list of featured subscriptions which the user can check 34 | * on in order to add them to their profile 35 | */ 36 | class AdBlockSubscribeDialog : public QDialog 37 | { 38 | Q_OBJECT 39 | 40 | public: 41 | /// Constructs the subscription dialog 42 | explicit AdBlockSubscribeDialog(QWidget *parent = 0); 43 | 44 | /// Dialog destructor 45 | ~AdBlockSubscribeDialog(); 46 | 47 | /// Returns a container of subscriptions the user has selected to be installed 48 | std::vector getSubscriptions() const; 49 | 50 | private: 51 | /// Loads recommended subscriptions into the list widget 52 | void load(); 53 | 54 | private: 55 | /// Pointer to the user interface elements 56 | Ui::AdBlockSubscribeDialog *ui; 57 | 58 | /// Container of recommended subscriptions 59 | std::vector m_subscriptions; 60 | }; 61 | 62 | #endif // ADBLOCKSUBSCRIBEDIALOG_H 63 | -------------------------------------------------------------------------------- /src/ui/web/ViewSourceWindow.cpp: -------------------------------------------------------------------------------- 1 | #include "ViewSourceWindow.h" 2 | #include "ui_ViewSourceWindow.h" 3 | 4 | #include "HTMLHighlighter.h" 5 | #include "TextEditorTextFinder.h" 6 | #include "WebPage.h" 7 | 8 | #include 9 | #include 10 | 11 | ViewSourceWindow::ViewSourceWindow(const QString &title, QWidget *parent) : 12 | QWidget(parent), 13 | ui(new Ui::ViewSourceWindow), 14 | m_highlighter(new HTMLHighlighter) 15 | { 16 | setAttribute(Qt::WA_DeleteOnClose, true); 17 | 18 | ui->setupUi(this); 19 | 20 | setWindowTitle(tr("Viewing Source of %1").arg(title)); 21 | 22 | m_highlighter->setDocument(ui->sourceView->document()); 23 | 24 | std::unique_ptr textFinder { std::make_unique() }; 25 | static_cast(textFinder.get())->setTextEdit(ui->sourceView); 26 | ui->widgetFindText->setTextFinder(std::move(textFinder)); 27 | 28 | QShortcut *shortcutFind = new QShortcut(QKeySequence(tr("Ctrl+F")), this); 29 | connect(shortcutFind, &QShortcut::activated, this, &ViewSourceWindow::toggleFindTextWidget); 30 | } 31 | 32 | ViewSourceWindow::~ViewSourceWindow() 33 | { 34 | delete ui; 35 | } 36 | 37 | void ViewSourceWindow::setWebPage(WebPage *page) 38 | { 39 | page->toHtml([this](const QString &html) { 40 | ui->sourceView->setPlainText(html); 41 | ui->sourceView->setFocus(); 42 | }); 43 | } 44 | 45 | void ViewSourceWindow::toggleFindTextWidget() 46 | { 47 | if (ui->widgetFindText->isHidden()) 48 | ui->widgetFindText->show(); 49 | 50 | QLineEdit *findTextEdit = ui->widgetFindText->getLineEdit(); 51 | if (findTextEdit->hasFocus()) 52 | ui->sourceView->setFocus(); 53 | else 54 | findTextEdit->setFocus(); 55 | } 56 | -------------------------------------------------------------------------------- /extra/debian/control: -------------------------------------------------------------------------------- 1 | Source: viper-browser 2 | Section: web 3 | Priority: optional 4 | Maintainer: Timothy Vaccarelli 5 | Build-Depends: debhelper (>= 11), cmake, qttools5-dev, libqt5svg5-dev, qtwebengine5-dev, libsqlite3-dev 6 | Standards-Version: 4.1.5 7 | Homepage: https://github.com/LeFroid/Viper-Browser 8 | 9 | Package: viper-browser 10 | Architecture: any 11 | Multi-Arch: foreign 12 | Depends: ${misc:Depends}, ${shlibs:Depends} 13 | Description: powerful yet lightweight web browser built with the Qt framework 14 | A powerful yet lightweight web browser built with the Qt framework. 15 | . 16 | Features: 17 | * All development is done with a focus on privacy, minimalism, and 18 | customization ability 19 | * Bookmark management 20 | * Built-in ad blocker, compatible with AdBlock Plus and uBlock Origin 21 | filters 22 | * Cookie viewer, editor, and support for cookie filters 23 | * Compatible with Pepper Plugin API 24 | * Custom user agent support 25 | * Fast and lightweight 26 | * Fullscreen support 27 | * Granular control over browser settings and web permissions 28 | * Gives the user control over their data, no invasions of privacy like 29 | other browsers are known to do 30 | * GreaseMonkey-style UserScript support 31 | * Multiple options for home page- any URL, blank page, or a card layout 32 | page with favorite and most visited websites 33 | * PDF.js embedded into the browser 34 | * Save and restore browsing sessions, local tab history, pinned tabs 35 | * Secure AutoFill manager 36 | * Tab drag-and-drop support for HTML links, local files, other browser 37 | window tabs, etc 38 | * Tab hibernation / wake up support 39 | * Traditional browser UI design instead of WebUI and chromium-based 40 | interfaces 41 | --------------------------------------------------------------------------------