diff options
author | Nik Nyby <nikolas@gnu.org> | 2015-01-17 17:12:36 -0500 |
---|---|---|
committer | Nik Nyby <nikolas@gnu.org> | 2015-01-17 17:12:36 -0500 |
commit | ada88090ead2c3b9d0804794c5f20f9b24d1c2b1 (patch) | |
tree | 2838a7eee6c5d74094216acebd86915e0ea1de42 /lib/ui/ui_info.js | |
download | librejsxul-ada88090ead2c3b9d0804794c5f20f9b24d1c2b1.tar.lz librejsxul-ada88090ead2c3b9d0804794c5f20f9b24d1c2b1.tar.xz librejsxul-ada88090ead2c3b9d0804794c5f20f9b24d1c2b1.zip |
Import to new git repository
The old repository was using almost 100mb of space because of all
the unnecessary files in the history. So I've imported the code to a
new git repository. Unfortunately the history isn't viewable from this
repository anymore. To see what happened with LibreJS before 2015, see
the old Bazaar repo here: http://bzr.savannah.gnu.org/lh/librejs/
Diffstat (limited to 'lib/ui/ui_info.js')
-rw-r--r-- | lib/ui/ui_info.js | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/lib/ui/ui_info.js b/lib/ui/ui_info.js new file mode 100644 index 0000000..55707d9 --- /dev/null +++ b/lib/ui/ui_info.js @@ -0,0 +1,202 @@ +/** + * GNU LibreJS - A browser add-on to block nonfree nontrivial JavaScript. + * * + * Copyright (C) 2011, 2012, 2013, 2014 Loic J. Duros + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +// page mod executing content script at every page load. + +var data = require("sdk/self").data; +var pageMod = require("sdk/page-mod"); +var urlHandler = require("url_handler/url_handler"); +var pageWorker = require("sdk/page-worker"); +var tabs = require("sdk/tabs"); +var prefs = require("addon_management/prefchange"); + +// contain list of recently found contact links or email addresses. +var contactList = {}; + +// constants. Also available in lib/ui_info.js +const CERTAIN_EMAIL_ADDRESS_FOUND = 'certainEmailAddressFound'; +const UNCERTAIN_EMAIL_ADDRESS_FOUND = 'uncertainEmailAddresFound'; + +// Looking for contact links +const CERTAIN_LINK_FOUND = 'certainLinkFound'; +const PROBABLE_LINK_FOUND = 'probableLinkFound'; +const UNCERTAIN_LINK_FOUND = 'uncertainLinkFound'; +const LINK_NOT_FOUND = 'contactLinkNotFound'; + +// Looking for identi.ca and twitter accounts. +const TWITTER_LINK_FOUND = 'twitterLinkFound'; +const IDENTICA_LINK_FOUND = 'identicaLinkFound'; + +// phone number and address +const PHONE_NUMBER_FOUND = 'phoneNumberFound'; +const SNAIL_ADDRESS_FOUND = 'snailAddressFound'; + +/** + * main pageMod. + * Find blocked script in all pages being opened. + * Launch the scripts that search for a complaint contact. + * + */ + +pageMod.PageMod({ + include: ['file://*', '*', 'data:*', 'about:*'], + contentScriptWhen: 'end', + + contentScriptFile: [ + data.url('complain/contact_regex.js'), + data.url('complain/link_types.js'), + data.url('settings/third-party/jquery/jquery.min.js'), + data.url('complain/contact_finder.js'), + data.url('complain/pagemod_finder.js'), + data.url('script_detector/script_detector.js') + ], + + onAttach: function onAttach(worker) { + if (worker.tab !== undefined && prefs.isComplaintTab()) { + // this is a tab. + if (!foundInContactList(worker.url)) { + // the hostname doesn't appear in the object literal. + // run script fetching/complaint feature if applicable. + tabProcess(worker); + } else { + worker.postMessage(foundInContactList(worker.url)); + } + } + } +}); + +/** + * foundInContactList + * + * Provides link if contact link is found for given url, or else + * false. + */ +var foundInContactList = function (url) { + var hostname = urlHandler.getHostname(url); + if (contactList[hostname] !== undefined) { + return contactList[hostname]; + } else { + return false; + } +}; + +/** + * tabProcess + * Find blocked/accepted scripts, prepare + * display panel and complaint panel. + */ +var tabProcess = function (worker) { + var visitedUrl = {}; + + // webmaster email is better than a webpage. + worker.emailFound = false; + var modUrl = '', + searchUrl = ''; + + modUrl = worker.url; + console.debug('pagemod triggered'); + + worker.port.emit('prefs', { + complaintEmailSubject: prefs.complaintEmailSubject(), + complaintEmailBody: prefs.complaintEmailBody() + }); + + // send local path to complain button graphic. + worker.port.emit('assetsUri', + {'event': 'assets-uri', + 'value': data.url('assets/')}); + worker.port.emit('pageUrl', + {'event': 'page-url', + 'value': modUrl}); + + worker.on('message', function (respData) { + console.debug('worker is receiving a message', respData.event); + var pw; + + worker.on('detach', function () { + console.debug('detaching worker'); + if (pw) { + pw.destroy(); + } + }); + if (respData.contact !== undefined) { + // pass the message to the complaint display panel. + worker.port.emit('complaintLinkFound', respData); + } else if (respData.event === 'complaintSearch') { + if (worker.tab) { + console.debug('worker tab url', worker.tab.url); + } + if (!(respData.urlSearch.linkValue in visitedUrl)) { + visitedUrl[respData.urlSearch.linkValue] = 1; + respData.urlSearch.linkValue = urlHandler.addFragment( + respData.urlSearch.linkValue, 'librejs=true'); + pw = searchSecondLevelPage( + this, respData.urlSearch.linkValue, this.url); + } + // currently not needed. + /*else { + console.debug(respData.urlSearch.linkValue, 'already visited'); + }*/ + } + }); +}; + +var searchSecondLevelPage = function( + worker, urlToSearch, originalUrl) { + return; + var originalWorker = worker; + + console.debug('searchSecondLevelPage'); + console.debug(urlToSearch, 'and', originalUrl); + + if (urlHandler.haveSameHostname(urlToSearch, originalUrl)) { + return pageWorker.Page({ + contentURL: urlToSearch, + contentScriptFile: [ + data.url('complain/contact_regex.js'), + data.url('complain/link_types.js'), + data.url('settings/third-party/jquery/jquery.min.js'), + data.url('complain/contact_finder.js'), + data.url('complain/worker_finder.js') + ], + contentScriptWhen: "end", + onMessage: function (respData) { + console.debug(JSON.stringify(respData)); + console.debug(originalWorker.url); + originalWorker.postMessage(respData); + + if (respData.event === 'destroy') { + try { + console.debug('destroying worker', this.contentURL); + this.destroy(); + } catch (e) { + console.debug('in worker', e); + } + } + } + }); + } +}; + +exports.testModule = { + 'contactList': contactList, + 'foundInContactList': foundInContactList, + 'tabProcess': tabProcess +}; |