Skip to content

Commit ee4394a

Browse files
committed
v0.1
1 parent 1d6550f commit ee4394a

File tree

5 files changed

+260
-0
lines changed

5 files changed

+260
-0
lines changed

src/background.js

+120
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
var list = [];
2+
3+
var status = "";
4+
5+
function startBrowsingCapture() {
6+
if (!browser.history.onVisited.hasListener(capture)) {
7+
browser.history.onVisited.addListener(capture);
8+
status = "STARTED";
9+
console.log(Date().toLocaleString() + " starting");
10+
}
11+
}
12+
13+
function stopBrowsingCapture() {
14+
if (browser.history.onVisited.hasListener(capture)) {
15+
browser.history.onVisited.removeListener(capture);
16+
status = "STOPPED";
17+
console.log(Date().toLocaleString() + " stopping");
18+
}
19+
20+
downloadBrowsingHistory();
21+
}
22+
23+
function downloadBrowsingHistory() {
24+
25+
if (list.length === 0) {
26+
console.log("empty browsing list - not saving anything !");
27+
28+
} else {
29+
saveData(list);
30+
console.log("browsing list saved");
31+
}
32+
}
33+
34+
35+
function capture(HistoryItem) {
36+
let dateISO = new Date();
37+
console.log("Website opened");
38+
console.log(dateISO.toISOString());
39+
console.log(HistoryItem.url);
40+
console.log(HistoryItem.title);
41+
42+
const temp = {
43+
date: dateISO.toISOString(),
44+
url: HistoryItem.url,
45+
title: HistoryItem.title
46+
}
47+
48+
list.push(temp);
49+
}
50+
51+
52+
function getMessage() {
53+
if (!browser.runtime.onMessage.hasListener(processMessage)) {
54+
browser.runtime.onMessage.addListener(processMessage);
55+
}
56+
}
57+
58+
function stopMessage() {
59+
if (browser.runtime.onMessage.hasListener(processMessage)) {
60+
browser.runtime.onMessage.removeListener(processMessage);
61+
}
62+
}
63+
64+
function processMessage(data, sender) {
65+
console.log("MSG Copy " + data.content);
66+
67+
if (data.content === '#start') {
68+
startBrowsingCapture();
69+
return Promise.resolve({response: "done"});
70+
}
71+
72+
if (data.content === '#stop') {
73+
stopBrowsingCapture();
74+
75+
return Promise.resolve({response: "done"});
76+
}
77+
78+
if (data.content === '#status') {
79+
return Promise.resolve({response: status});
80+
}
81+
82+
if (data.content === '#download') {
83+
downloadBrowsingHistory();
84+
return Promise.resolve({response: "done"});
85+
}
86+
87+
return Promise.resolve({response: "error"});
88+
}
89+
90+
function dateFile() {
91+
let dateUTC = new Date();
92+
let dateString = dateUTC.getUTCFullYear() + "-" + (dateUTC.getUTCMonth() + 1) + "-" + dateUTC.getUTCDate() + "_" +
93+
dateUTC.getUTCHours() + "-" + dateUTC.getUTCMinutes() + "-" + dateUTC.getUTCSeconds();
94+
return dateString;
95+
}
96+
97+
98+
function saveData(data) {
99+
let blob = new Blob([JSON.stringify(data, null, 2)], {type: 'application/json'});
100+
let url = URL.createObjectURL(blob);
101+
let dateString = "regis-browser-history/" + dateFile() + ".txt";
102+
let download = browser.downloads.download({url: url, filename: dateString, saveAs: false});
103+
download.then(() => {
104+
list = []
105+
}).catch(error => console.log(error));
106+
}
107+
108+
function init() {
109+
startBrowsingCapture();
110+
getMessage();
111+
112+
browser.windows.onRemoved.addListener(() => {
113+
downloadBrowsingHistory()
114+
});
115+
}
116+
117+
118+
init();
119+
120+

src/manifest.json

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"manifest_version": 2,
3+
"name": "REGIS-BROWSER-HISTORY",
4+
"version": "0.1",
5+
"description": "Capture web browsing history",
6+
"author": "acendrou",
7+
"background": {
8+
"scripts": [
9+
"background.js"
10+
]
11+
},
12+
"browser_action": {
13+
"default_title": "REGIS-BROWSER-HISTORY",
14+
"default_popup": "popup/choose_options.html"
15+
},
16+
"permissions": [
17+
"history",
18+
"downloads"
19+
],
20+
"browser_specific_settings": {
21+
"gecko": {
22+
"id": "regis-browser-history@ekvidi"
23+
}
24+
}
25+
}

src/popup/choose_options.css

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
html, body {
2+
width: 300px;
3+
}
4+
5+
.title {
6+
font-size: medium;
7+
text-align: center;
8+
color: blueviolet;
9+
}
10+
11+
.button {
12+
font-family: Arial, sans-serif;
13+
margin: 3% auto;
14+
padding: 4px;
15+
text-align: center;
16+
font-size: 1.5em;
17+
cursor: pointer;
18+
}
19+
20+
#start {
21+
color: green;
22+
}
23+
24+
#stop {
25+
color: red;
26+
}
27+
28+
#status {
29+
padding-left: 40%
30+
}
31+
32+
#download {
33+
color: black;
34+
}

src/popup/choose_options.html

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<!DOCTYPE html>
2+
<html lang="en" xmlns="http://www.w3.org/1999/html">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>REGIS-BROWSER-HISTORY</title>
6+
<link rel="stylesheet" href="choose_options.css"/>
7+
</head>
8+
<body>
9+
<div id="title" class="title">REGIS-BROWSER-HISTORY</div>
10+
<div id="popup_content">
11+
<div id="start" class="button">
12+
Start
13+
</div>
14+
<div id="stop" class="button">
15+
Stop
16+
</div>
17+
<div id="status">
18+
STARTED
19+
</div>
20+
<div id="download" class="button">
21+
Download
22+
</div>
23+
</div>
24+
<script src="choose_options.js"></script>
25+
</body>
26+
</html>

src/popup/choose_options.js

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
var status = "";
2+
3+
function handleResponse(message) {
4+
console.log("We got : " + message.response);
5+
}
6+
7+
function handleResponseStatus(message) {
8+
console.log("Status is : " + message.response);
9+
status = message.response;
10+
document.getElementById("status").innerText = status;
11+
}
12+
13+
function handleError(error) {
14+
console.log(`Error: ${error}`);
15+
document.getElementById("status").innerText = "ERROR";
16+
status = "ERROR";
17+
}
18+
19+
function start() {
20+
console.log("START CLICK");
21+
let sending = browser.runtime.sendMessage({content: "#start"})
22+
sending.then(handleResponse, handleError);
23+
document.getElementById("status").innerText = "STARTED";
24+
status = "STARTED";
25+
}
26+
27+
function stop() {
28+
console.log("STOP CLICK");
29+
let sending = browser.runtime.sendMessage({content: "#stop"})
30+
sending.then(handleResponse, handleError);
31+
document.getElementById("status").innerText = "STOPPED";
32+
status = "STOPPED";
33+
}
34+
35+
function download() {
36+
console.log("DOWNLOAD CLICK");
37+
let sending = browser.runtime.sendMessage({content: "#download"})
38+
sending.then(handleResponse, handleError);
39+
}
40+
41+
function init() {
42+
document.getElementById("start").addEventListener("click", start);
43+
document.getElementById("stop").addEventListener("click", stop);
44+
document.getElementById("download").addEventListener("click", download);
45+
}
46+
47+
48+
window.onload = (event) => {
49+
console.log('page is fully loaded - do the right thing :)');
50+
init();
51+
52+
let sending = browser.runtime.sendMessage({content: "#status"})
53+
sending.then(handleResponseStatus, handleError);
54+
document.getElementById("status").innerText = status;
55+
};

0 commit comments

Comments
 (0)