]> git.wh0rd.org Git - chrome-ext/clearhistory-advance-fork.git/blob - javascript/clearhistory.js
7c9596f943ec287b28890ce8dd026176be9cb587
[chrome-ext/clearhistory-advance-fork.git] / javascript / clearhistory.js
1 // Copyright 2011 Google Inc. All Rights Reserved.
2
3 /**
4  * @fileoverview The main script for the Clear History extension for Chrome.
5  * @author arunjit@google.com (Arunjit Singh)
6  */
7
8 /**
9  * Removes a single cookie
10  * @param {Object.<Cookie>} cookie The cookie to delete.
11  * @param {Function} callback The function to invoke when the cookie is deleted.
12  */
13 function removeCookie(cookie, callback) {
14   var url = 'http' + (cookie.secure ? 's' : '') + '://' + cookie.domain +
15             cookie.path;
16   chrome.cookies.remove({url: url, name: cookie.name}, callback);
17 }
18
19 /**
20  * Removes all cookies
21  * @param {Function=} callback The function to invoke when all cookies are
22  *     deleted (optional).
23  */
24 function clearCookies(callback) {
25   callback = callback || function() {};
26   chrome.cookies.getAll({}, function(cookies) {
27     var len = cookies.length;
28     // Synchronize the cookie deletion and execute the callback only when all
29     // cookie deletion functions have called back (finished).
30     (function doCookieCleanup(i) {
31       if (i === len) {
32         callback();
33       } else {
34         removeCookie(cookies[i], function() {
35           doCookieCleanup(i + 1);
36         });
37       }
38     })(0);
39   });
40 }
41
42 /**
43  * Callback for when history deletion is successful
44  */
45 function didClearHistory() {
46   var time = ~~(localStorage['time']) || CONSTANTS.DEFAULT_TIME;
47   time = getUnitsForTime(time);
48   var timeString = (time.time === -1) ?
49                    chrome.i18n.getMessage('notificationTimeAll') :
50                    chrome.i18n.getMessage('notificationTime',
51                                           [time.time, time.units]);
52   var message = chrome.i18n.getMessage('notificationBody', timeString);
53   var notification = webkitNotifications.createNotification(
54       chrome.extension.getURL('/images/icon48.png'),
55       chrome.i18n.getMessage('notificationTitle'),
56       message);
57   notification.show();
58   setTimeout(function() {
59     notification.cancel();
60   }, 5000);
61 }
62
63 /**
64  * Clears the history for the amount of time stored in {@code localStorage}
65  */
66 function clearHistory() {
67   //Get the values from localStorage
68   // time is in hours
69   var time = ~~(localStorage['time']) || CONSTANTS.DEFAULT_TIME;
70   if (time === -1) {
71     // Delete everything
72     chrome.history.deleteAll(didClearHistory);
73   } else {
74     // Create the range
75     var timeStart = localStorage['timeStart'] === CONSTANTS.YES;
76     var now = (new Date).getTime();
77     var startTime = (now - time * 60 * 60 * 1000);  // time from hrs to ms
78     if (timeStart) {
79       var endTime = now;
80     } else {
81       var endTime = startTime;
82       startTime = 0;
83     }
84     var range = {
85       startTime: startTime,
86       endTime: endTime
87     };
88     // Delete history in the range
89     chrome.history.deleteRange(range, didClearHistory);
90   }
91 }
92
93 function runCleaner() {
94   var clearCookies = localStorage['cookies'] || CONSTANTS.NO;
95
96   if (clearCookies === CONSTANTS.YES) {
97     clearCookies(clearHistory);
98   } else {
99     clearHistory();
100   }
101 }
102
103 /**
104  * Executes when the user clicks the browser action. Uses stored values from
105  * {@code localStorage}
106  */
107 chrome.browserAction.onClicked.addListener(function(tab) {
108   // Get the value from localStorage
109   var showPrompt = localStorage['prompt'] || CONSTANTS.YES;
110
111   // The confirmation message to ask
112   var message = chrome.i18n.getMessage('confirmPrompt');
113
114   // Clear cookies, and then clear the history
115   if (showPrompt === CONSTANTS.YES) {
116     if (!confirm(message))
117       return;
118   }
119   runCleaner();
120 });
121
122 chrome.alarms.create(CONSTANTS.CLEANER_ALARM, {
123   // First fire 10 minutes from now.
124   'when': Date.now() + (10 * 60 * 1000),
125   'periodInMinutes': 24 * 60
126 });
127
128 chrome.alarms.onAlarm.addListener(function(alarm) {
129   var autoCleaner = localStorage['autoclear'] || CONSTANTS.NO;
130   if (autoCleaner === CONSTANTS.YES)
131     runCleaner();
132   console.log('running');
133 });