1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
var plugin = document.embeds[0];
var tabInfo = {};
var tabIdTimeouts = {};
var currentTabs = {};
function onTabCreated (tab) {
chrome.tabs.executeScript(tab.id, {file: "content_script.js"});
}
function onTabRemoved (tabid) {
sendLeaveEvent(tabid);
}
function onTabUpdated (tabid, changeInfo, tab) {
if (!changeInfo.url) return;
window.clearTimeout(tabIdTimeouts[tabid])
tabIdTimeouts[tabid] = window.setTimeout(function(){
console.log("sending event for " + tab.url);
chrome.tabs.executeScript(tabid, {file: "content_script.js"});},
5000);
}
function onBookmarkCreated (bookmarkid, bookmark) {
if (!bookmark.url) return; // bookmark folder
var url = bookmark.url;
var title = bookmark.title;
var mimetype = "text/html"; // FIXME: really? use XHR to get it?
plugin.insertEvent(url, url, mimetype, title, plugin.ACCESS_EVENT, plugin.BOOKMARK);
}
function sendAccessEvent (documentInfo, tabid) {
var url = documentInfo.url;
var origin = documentInfo.origin;
var domain = documentInfo.domain;
if (domain == null)
{
var s = url.split("/");
s[s.length-1] = '';
domain = s.join("/");
}
var mimetype = documentInfo.mimeType;
var title = documentInfo.title;
plugin.insertEvent(url,
domain,
mimetype ? mimetype : "text/html",
title);
console.log("save thumbnail for "+currentTabs[tabid]+": "+url);
chrome.tabs.captureVisibleTab(currentTabs[tabid], {format:"jpeg", quality:5}, function(dataUrl) {
plugin.saveSnapshot(url, dataUrl);
});
documentInfo.sentAccess = true;
tabInfo[tabid] = documentInfo;
}
function sendLeaveEvent (tabid) {
var documentInfo = tabInfo[tabid];
if (documentInfo == null || documentInfo.sentAccess != true) return;
var url = documentInfo.url;
var origin = documentInfo.origin;
var domain = documentInfo.domain;
if (domain == null)
{
var s = url.split("/");
s[s.length-1] = '';
domain = s.join("/");
}
var mimetype = documentInfo.mimeType;
var title = documentInfo.title;
plugin.insertEvent(url,
domain,
mimetype ? mimetype : "text/html",
title,
plugin.LEAVE_EVENT);
tabInfo[tabid] = null;
}
// this works in chrome 7,8,9
function onExtensionRequest (request, sender, sendResponse) {
var id = sender.tab.id;
sendLeaveEvent(id);
sendAccessEvent(request, id);
}
var is_chromium = /chromium/.test( navigator.userAgent.toLowerCase() );
if (!is_chromium) plugin.setActor("application://google-chrome.desktop");
else plugin.setActor("application://chromium-browser.desktop");
chrome.extension.onRequest.addListener (onExtensionRequest);
//chrome.bookmarks.onCreated.addListener (onBookmarkCreated);
chrome.tabs.onUpdated.addListener (onTabUpdated);
chrome.tabs.onCreated.addListener(
function (tab) {
currentTabs[tab.id] = tab.windowId;
}
);
chrome.tabs.onRemoved.addListener(
function (tabid) {
delete currentTabs[tabid];
}
);
//chrome.tabs.onCreated.addListener (onTabCreated);
//chrome.tabs.onRemoved.addListener (onTabRemoved);
chrome.windows.getAll({"populate" : true}, function (windows) {
for (var i = 0; i < windows.length; i++) {
var tabs = windows[i].tabs;
for (var j = 0; j < tabs.length; j++) {
chrome.tabs.executeScript(tabs[j].id, {file: "content_script.js"});
}
}
});
|