├── 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 |
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 |
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 |
12 |
--------------------------------------------------------------------------------
/src/app/assets/pdfjs/images/annotation-newparagraph.svg:
--------------------------------------------------------------------------------
1 |
2 |
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 |
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 |
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 |
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 |
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 |
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 |
17 |
--------------------------------------------------------------------------------
/src/app/assets/pdfjs/images/annotation-note.svg:
--------------------------------------------------------------------------------
1 |
2 |
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 |
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 |
41 |
42 |
43 | FindTextWidget
44 | QWidget
45 |
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 |
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 |
--------------------------------------------------------------------------------