.clang-format
.clang-tidy
.gitignore
.vimrc
BrowserTab.cpp
BrowserTab.h
BrowserView.cpp
BrowserView.h
CMakeLists.txt
DatabaseManager.cpp
DatabaseManager.h
DownloadBar.cpp
DownloadBar.h
DownloadWidget.cpp
DownloadWidget.h
MainWindow.cpp
MainWindow.h
Makefile
MasterPasswordDialog.cpp
MasterPasswordDialog.h
PasswordHelper.cpp
PasswordHelper.h
README.md
ThemeConfig.h
VaultManager.cpp
VaultManager.h
browser.desktop
browser.qrc
compile_commands.json
main.cpp
resources/js/capture.js
raw
1(function() {
2 function init() {
3 if (typeof QWebChannel === 'undefined' || typeof qt === 'undefined' || !qt.webChannelTransport) {
4 setTimeout(init, 100);
5 return;
6 }
7
8 new QWebChannel(qt.webChannelTransport, function(channel) {
9 window.passwordHelper = channel.objects.passwordHelper;
10
11 function captureLogin() {
12 var passwords = document.querySelectorAll('input[type="password"]');
13 passwords.forEach(function(pass) {
14 var form = pass.form;
15 if (form && !form.dataset.passwordHooked) {
16 form.dataset.passwordHooked = "true";
17
18 var handler = function() {
19 var user = form.querySelector('input[type="text"], input[type="email"], input:not([type])');
20 if (user && user.value && pass.value) {
21 passwordHelper.saveRequest(window.location.hostname, user.value, pass.value);
22 }
23 };
24
25 form.addEventListener('submit', handler);
26
27 var buttons = form.querySelectorAll('button, input[type="submit"], input[type="button"]');
28 buttons.forEach(function(btn) {
29 btn.addEventListener('click', handler);
30 });
31 }
32 });
33 }
34
35 var observer = new MutationObserver(function(mutations) {
36 captureLogin();
37 });
38 observer.observe(document.body, { childList: true, subtree: true });
39 captureLogin();
40 });
41 }
42 init();
43})();