Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: lib/crawler.js

Issue 8492018: abpcrawler: Collect unmatched filters (Closed)
Patch Set: Created Oct. 2, 2012, 5:01 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/client.js ('k') | lib/storage.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 Cu.import("resource://gre/modules/Services.jsm"); 1 Cu.import("resource://gre/modules/Services.jsm");
2 2
3 function abprequire(module) 3 function abprequire(module)
4 { 4 {
5 let result = {}; 5 let result = {};
6 result.wrappedJSObject = result; 6 result.wrappedJSObject = result;
7 Services.obs.notifyObservers(result, "adblockplus-require", module); 7 Services.obs.notifyObservers(result, "adblockplus-require", module);
8 return result.exports; 8 return result.exports;
9 } 9 }
10 10
11 let {Storage} = require("storage"); 11 let {Storage} = require("storage");
12 let {Client} = require("client"); 12 let {Client} = require("client");
13 13
14 let {Policy} = abprequire("contentPolicy"); 14 let {Policy} = abprequire("contentPolicy");
15 let {RequestNotifier} = abprequire("requestNotifier");
15 let {Filter} = abprequire("filterClasses"); 16 let {Filter} = abprequire("filterClasses");
16 let {Utils} = abprequire("utils"); 17 let {Utils} = abprequire("utils");
17 18
18 let origProcessNode = Policy.processNode; 19 let origProcessNode = Policy.processNode;
19 20
21 let requestNotifier;
20 let siteTabs; 22 let siteTabs;
21 let currentTabs; 23 let currentTabs;
24 let currentFilter;
Wladimir Palant 2012/12/13 16:14:01 Initialize with null?
Felix Dahlke 2012/12/14 10:11:58 I'd rather keep it undefined, like currentTabs etc
22 25
23 function processNode(wnd, node, contentType, location, collapse) 26 function processNode(wnd, node, contentType, location, collapse)
24 { 27 {
25 let result = origProcessNode.apply(this, arguments); 28 let result = origProcessNode.apply(this, arguments);
26 let url = (contentType === Policy.type.ELEMHIDE) ? location.text : 29 let url = (contentType === Policy.type.ELEMHIDE) ? location.text :
27 location.spec; 30 location.spec;
28 31
29 let topWindow = wnd.top; 32 let topWindow = wnd.top;
30 if (!topWindow.document) 33 if (!topWindow.document)
31 { 34 {
(...skipping 10 matching lines...) Expand all
42 45
43 let browser = tabbrowser.getBrowserForDocument(topWindow.document); 46 let browser = tabbrowser.getBrowserForDocument(topWindow.document);
44 if (!browser) 47 if (!browser)
45 { 48 {
46 Cu.reportError("Unable to get browser for the tab"); 49 Cu.reportError("Unable to get browser for the tab");
47 return result; 50 return result;
48 } 51 }
49 52
50 let site = siteTabs.get(browser); 53 let site = siteTabs.get(browser);
51 let filtered = !result; 54 let filtered = !result;
52 Storage.write([url, site, filtered]); 55 let data = [url, site, filtered];
56 if (currentFilter) {
Wladimir Palant 2012/12/14 16:43:01 Missed on the first pass - bracket should be on ne
57 data.push(currentFilter);
58 currentFilter = null;
59 }
60 Storage.write(data);
53 return result; 61 return result;
54 } 62 }
55 63
64 function handleFilterHit(wnd, node, data)
65 {
66 if (data.filter)
67 currentFilter = data.filter.text;
68 }
69
70 function prepare()
71 {
72 if (Policy.processNode != origProcessNode)
73 return false;
74
75 Policy.processNode = processNode;
76
77 requestNotifier = new RequestNotifier(null, handleFilterHit);
78 siteTabs = new WeakMap();
79 currentTabs = 0;
80
81 Storage.init();
82
83 return true;
84 }
85
56 function loadSite(site, window, callback) 86 function loadSite(site, window, callback)
57 { 87 {
58 if (!site) 88 if (!site)
59 return; 89 return;
60 90
61 let tabbrowser = window.gBrowser; 91 let tabbrowser = window.gBrowser;
62 let tab = tabbrowser.addTab(site); 92 let tab = tabbrowser.addTab(site);
63 let browser = tabbrowser.getBrowserForTab(tab); 93 let browser = tabbrowser.getBrowserForTab(tab);
64 94
65 siteTabs.set(browser, site); 95 siteTabs.set(browser, site);
(...skipping 20 matching lines...) Expand all
86 while (currentTabs < parallelTabs && sites.length) 116 while (currentTabs < parallelTabs && sites.length)
87 { 117 {
88 currentTabs++; 118 currentTabs++;
89 let site = sites.shift(); 119 let site = sites.shift();
90 loadSite(site, window, function() 120 loadSite(site, window, function()
91 { 121 {
92 currentTabs--; 122 currentTabs--;
93 if (!sites.length && !currentTabs) 123 if (!sites.length && !currentTabs)
94 { 124 {
95 Storage.finish(); 125 Storage.finish();
96 let dataFilePath = Storage.dataFile.path; 126 let requestsFilePath = Storage.requestsFile.path;
97 Client.sendCrawlerDataFile(backendUrl, dataFilePath, function() 127 Client.sendRequestsFile(backendUrl, requestsFilePath, function()
98 { 128 {
99 Storage.destroy(); 129 Storage.destroy();
100 callback(); 130 callback();
101 }); 131 });
102 } 132 }
103 else 133 else
104 loadSites(backendUrl, parallelTabs, window, sites, callback); 134 loadSites(backendUrl, parallelTabs, window, sites, callback);
105 }); 135 });
106 } 136 }
107 } 137 }
108 138
139 function cleanUp()
140 {
141 Policy.processNode = origProcessNode;
142 siteTabs = null;
143 }
144
109 let Crawler = exports.Crawler = {}; 145 let Crawler = exports.Crawler = {};
110 146
111 Crawler.crawl = function(backendUrl, parallelTabs, window, callback) 147 Crawler.crawl = function(backendUrl, parallelTabs, window, callback)
112 { 148 {
113 if (Policy.processNode != origProcessNode) 149 if (!prepare())
114 return; 150 return;
115 151
116 Policy.processNode = processNode;
117
118 siteTabs = new WeakMap();
119 currentTabs = 0;
120
121 Storage.init();
122
123 Client.fetchCrawlableSites(backendUrl, function(sites) 152 Client.fetchCrawlableSites(backendUrl, function(sites)
124 { 153 {
125 loadSites(backendUrl, parallelTabs, window, sites, function() 154 loadSites(backendUrl, parallelTabs, window, sites, function()
126 { 155 {
127 Policy.processNode = origProcessNode; 156 cleanUp();
128 siteTabs = null;
129 callback(); 157 callback();
130 }); 158 });
131 }); 159 });
132 }; 160 };
OLDNEW
« no previous file with comments | « lib/client.js ('k') | lib/storage.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld