Ticket #7494: 0001-Torbutton-Create-local-homepage-for-TBB.patch

File 0001-Torbutton-Create-local-homepage-for-TBB.patch, 43.9 KB (added by brade, 6 years ago)

Torbutton patch (add about:tor page)

  • src/chrome.manifest

    From 8e71794d5b0aae6f41c18231a88c65a66b2c2fbb Mon Sep 17 00:00:00 2001
    From: Kathleen Brade <brade@pearlcrescent.com>
    Date: Fri, 29 Mar 2013 14:05:13 -0400
    Subject: [PATCH] Bug 7494: Create local home page for TBB.
    
    ---
     src/chrome.manifest                             |   3 +
     src/chrome/content/aboutTor/aboutTor.xhtml      | 115 +++++++++
     src/chrome/content/aboutTor/onionArrow.png      | Bin 0 -> 2381 bytes
     src/chrome/content/aboutTor/onionArrowRight.png | Bin 0 -> 1695 bytes
     src/chrome/content/aboutTor/search.png          | Bin 0 -> 3419 bytes
     src/chrome/content/aboutTor/tor-off.png         | Bin 0 -> 5835 bytes
     src/chrome/content/aboutTor/tor-on.png          | Bin 0 -> 2665 bytes
     src/chrome/content/torbutton.js                 |  88 +++++--
     src/chrome/locale/en/aboutTor.dtd               |  60 +++++
     src/chrome/skin/aboutTor.css                    | 306 ++++++++++++++++++++++++
     src/components/aboutTor.js                      |  55 +++++
     11 files changed, 605 insertions(+), 22 deletions(-)
     create mode 100644 src/chrome/content/aboutTor/aboutTor.xhtml
     create mode 100644 src/chrome/content/aboutTor/onionArrow.png
     create mode 100644 src/chrome/content/aboutTor/onionArrowRight.png
     create mode 100644 src/chrome/content/aboutTor/search.png
     create mode 100644 src/chrome/content/aboutTor/tor-off.png
     create mode 100644 src/chrome/content/aboutTor/tor-on.png
     create mode 100644 src/chrome/locale/en/aboutTor.dtd
     create mode 100644 src/chrome/skin/aboutTor.css
     create mode 100644 src/components/aboutTor.js
    
    diff --git a/src/chrome.manifest b/src/chrome.manifest
    index 99cb6b7..86f086f 100644
    a b contract @torproject.org/startup-observer;1 {06322def-6fde-4c06-aef6-47ae8e79962 
    142142component {e6204253-b690-4159-bfe8-d4eedab6b3be} components/cookie-jar-selector.js
    143143contract @torproject.org/cookie-jar-selector;1 {e6204253-b690-4159-bfe8-d4eedab6b3be}
    144144
     145component {84d47da6-79c3-4661-aa9f-8049476f7bf5} components/aboutTor.js
     146contract @mozilla.org/network/protocol/about;1?what=tor {84d47da6-79c3-4661-aa9f-8049476f7bf5}
     147
    145148component {f36d72c9-9718-4134-b550-e109638331d7} components/torbutton-logger.js
    146149contract @torproject.org/torbutton-logger;1 {f36d72c9-9718-4134-b550-e109638331d7}
    147150
  • new file src/chrome/content/aboutTor/aboutTor.xhtml

    diff --git a/src/chrome/content/aboutTor/aboutTor.xhtml b/src/chrome/content/aboutTor/aboutTor.xhtml
    new file mode 100644
    index 0000000..7de78c9
    - +  
     1<?xml version="1.0" encoding="UTF-8"?>
     2<!--
     3   - Copyright (c) 2013, The Tor Project, Inc.
     4   - See LICENSE for licensing information.
     5   - vim: set sw=2 sts=2 ts=8 et syntax=xml:
     6  -->
     7
     8<!DOCTYPE html [
     9  <!ENTITY % htmlDTD
     10    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     11    "DTD/xhtml1-strict.dtd">
     12  %htmlDTD;
     13  <!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd">
     14  %globalDTD;
     15  <!ENTITY % aboutTorDTD SYSTEM "chrome://torbutton/locale/aboutTor.dtd">
     16  %aboutTorDTD;
     17]>
     18
     19<html xmlns="http://www.w3.org/1999/xhtml">
     20<head>
     21  <title>&aboutTor.title;</title>
     22  <link rel="stylesheet" type="text/css" media="all"
     23        href="chrome://torbutton/skin/aboutTor.css"/>
     24<script type="text/javascript">
     25 <![CDATA[
     26function onLoad()
     27{
     28  window.addEventListener("resize", function() {
     29    resizeToolbarIconArrow();
     30  }, false);
     31
     32  window.setTimeout( function() {
     33    resizeToolbarIconArrow();
     34    document.getElementById('sx').focus();
     35  }, 0);
     36}
     37
     38function resizeToolbarIconArrow()
     39{
     40  var textElem = document.getElementById("updatePrompt");
     41  var rightDiv = document.getElementById("toolbarIconArrowRight");
     42  if (textElem && rightDiv)
     43  {
     44    var width = textElem.offsetLeft - rightDiv.offsetLeft - 6;
     45    rightDiv.style.width = width + "px";
     46  }
     47}
     48]]>
     49</script>
     50</head>
     51<body dir="&locale.dir;" onload="onLoad();">
     52<div id="torstatus" class="top">
     53  <div id="torstatus-image"/>
     54  <div class="hideIfTorOff">
     55    <h1>&aboutTor.success.label;</h1>
     56    <h2>&aboutTor.success2.label;</h2>
     57    <h3 class="hideIfTBBNeedsUpdate">&aboutTor.success3.label;</h3>
     58  </div>
     59  <div class="hideIfTorOn">
     60    <h1>&aboutTor.failure.label;</h1>
     61    <h2>&aboutTor.failure2.label;</h2>
     62    <h3>&aboutTor.failure3.label;</h3>
     63  </div>
     64</div>
     65<div class="top">
     66  <div class="hideIfTorIsUpToDate">
     67    <h1 class="hideIfTorOff">&aboutTor.outOfDateTorOn.label;</h1>
     68    <h1 class="hideIfTorOn">&aboutTor.outOfDateTorOff.label;</h1>
     69    <h3 id="updatePrompt">&aboutTor.outOfDate2.label;</h3>
     70    <div id="toolbarIconArrowLeft"/>
     71    <div id="toolbarIconArrowRight"/>
     72  </div>
     73</div>
     74
     75<div class="searchbox hideIfTorOff"> <!-- begin form based search -->
     76  <form action="&aboutTor.searchSPPost.link;" method="post">
     77  <div id="sxw">
     78    <div id="sbutton">
     79      <input name="b" id="sb" value="" title="&aboutTor.search.label;"
     80             alt="&aboutTor.search.label;" type="submit"/>
     81    </div>
     82    <input name="q" autocomplete="off" id="sx" type="text"/>
     83  </div>
     84  <h4>&aboutTor.searchSP.privacy.beforeLink.label;<a href="&aboutTor.searchSP.privacy.link;">&aboutTor.searchSP.privacy.label;</a>&aboutTor.searchSP.search.beforeLink.label;
     85     <a href="&aboutTor.searchSP.search.link;">&aboutTor.searchSP.search.label;</a></h4>
     86  </form>
     87</div>
     88
     89<div class="hideIfTorOn" style="height:100px"/>
     90
     91<div id="middle" class="hideIfTorOff">
     92  <div class="container two">
     93    <h1>&aboutTor.whatnextQuestion.label;</h1>
     94    <p>&aboutTor.whatnextAnswer.label;</p>
     95    <a class="tips" href="&aboutTor.whatnext.link;">&aboutTor.whatnext.label;</a>
     96  </div>
     97
     98  <div class="container three">
     99    <h1>&aboutTor.helpInfo1.label;</h1>
     100    <p>&aboutTor.helpInfo2.label;</p>
     101    <ul>
     102      <li><a href="&aboutTor.helpInfo3.link;">&aboutTor.helpInfo3.label;</a></li>
     103      <li><a href="&aboutTor.helpInfo4.link;">&aboutTor.helpInfo4.label;</a></li>
     104      <li><a href="&aboutTor.helpInfo5.link;">&aboutTor.helpInfo5.label;</a></li>
     105    </ul>
     106  </div>
     107</div> <!-- middle -->
     108
     109<div id="bottom">
     110  <p>&aboutTor.footer.label;
     111<a href="&aboutTor.learnMore.link;">&aboutTor.learnMore.label;</a></p>
     112</div>
     113
     114</body>
     115</html>
  • new file src/chrome/content/aboutTor/onionArrow.png

    diff --git a/src/chrome/content/aboutTor/onionArrow.png b/src/chrome/content/aboutTor/onionArrow.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..c7785682428beb5d2be5486ce38e6cfd3a6c87f1
    GIT binary patch
    literal 2381
    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
  • new file 0

    literal 0
    HcmV?d00001
    
    diff --git a/src/chrome/content/aboutTor/onionArrowRight.png b/src/chrome/content/aboutTor/onionArrowRight.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..7552f2d36c24b763ed179beb62c7fca195fad4f6
    GIT binary patch
    literal 1695
    zcmeAS@N?(olHy`uVBq!ia0vp^Aoec~HXu1;!L=m}3@j>{&dvdz&dv$}Mfqu&IjIZ`
    z7J{vz_w#Ruh}d=J2Q3k^SBP+L?>f3ZG&p*vwA9*TY@U;szV#AY`tpXB$`dQ|&Xv;a
    zw_k2s<zL-s&i04V;U+V`hm9gHTT=DSZwIz`2DfXi^7N>FafDw{?JaBQ!`)>`>cK~1
    zzWzFGdEfH6_4ByfF1GQRTW3jzc1&BnZti)NsgswBO_}H0b!qbzZ{{njU;61zJbhM3
    z@1W@SbFUxDc5$43JMrB=zi-O>tGe%8>{RkUkS8izEBS*b@XVF$ZQdgL*?<4Y+|G9A
    zv&@IfW-LsrnWopy5vsU&T;0}B(VnyKg4S!%wH$lcZ1&tp)8C#L&n$6b^25+P>0L@`
    z6F0A&lvs5Bp?-hicEkVtdb3Nvyoqg&_&sOo&g32Zo%giAh3xCJzrOX0%m?oc@#}Yb
    zCf2k5=>K)8hN(h6@XN|cwI%nSyT`|`6}iWDkG1+@!E$cj-&v)G)iM$rFMd^hJ>!J3
    z#r4v3q0LLg8{UWg*m5KJ#l#gSf-@f^J~-%AyJ}|qtirHoEq70Ej+%LfNx45||MIg>
    z8rU1`x2)Z>g7xerD|6#TVxPRjv-8%ibiB20R%9UeU!$4Uas4MWb9YZYG)4Y2->$NS
    zlBdPIj$M4IR=+l_DqZl_4c6WB#BWWQfA`Xx5;lp-8}@sw^q;ZG+>X5xl(cQ}0rwX!
    zF3Nslx=B}8dRZ?Cm}fNQ$X+)y8&#tdEv<)7CmJgGUlPi>TWQ(<_;^dtCh@(xivpKg
    zA75Xv|K!F9`{0|5f8>)kzcG+b7hbZ#{Ko7z9Nq`54)U>b73ErqYF)0?`1*N|e`$!A
    zm0!T8KMu7T9f9X=zL)xSw*Oz-tPS4UUzGhX7@9=C6;@yu&L}m%WVbv!+x`uo%_+9s
    zKhC|~mz`bmr|@&{-R|7uW*hR3Z9DYi#`=xAe{zGEtP`rbrY$`6q3jT6g|e(|4C7^0
    z-q-mLA}`zuy0vlf(pNtlFDR=Wv_D~Y=F-lG7gqgS^lxR}iue`cSMFP9wMbeoQ>oRe
    z)&8qdt6r=B*Qcu_a+lIymDs8KChD<T?tZ^_zUqzY_3??qce`RUu4d0SRS)(%RsBT#
    z>6AZv{%o?5-XO9wUT*U8Cwo7<;rw=%=dbKui4v~OS-xAVbw9F5nDDEz&1JiOEaYg*
    z>JqWY+w&(c3o<)#?8X=6<z+E*o=)qku$tGU?$P<a+yBV%N5)Ls=k56s_d{*NGUl)U
    zCJP%_Sv|<r@lict{AjLKVVLU|u9Ddo&c@cU-RE26xw`C{*(uTRo9kDt*W|1@wZka(
    zs(ZWWSrgIoPc_WSckDgXy;x;mvr^v+$9uo`xt87K$$b~?(*FOD_3N;V=oP}XZw0>Y
    zm%7#V!LR0-@uF__ue<g>dcN4>3ERYAs}1*m%f9q}bhl*t#fpaSq36|ItmVz6{;xBa
    zvW{2!FLp8Yvwb8(VMUI#wlJ{R;4JWnEM{Qf2C}(@85w5Hkzin8OwSC7D2ed(u}aR*
    z)k{ptPfFFR$SnY>W?-<XumUo3Q%e#RDspr3imfVamB1>jfNYSkzLEl1NlCV?QiN}S
    zf^&XRs)C80iJpOy9hZWFf=y9MnpKdC8&o@xXRDM^Qc_^0uU}qXu2*iXmtT~wZ)j<0
    zsc&GUZ)BtkRH0j3nOBlnp_^B%3^4>|j!SBBa#3bMNoIbY0?6FNr2NtnTO}osMQ{Lh
    zXKn%9qP$|LuYms3uShJ=H`FuGhno!4Xan@4m2**QVo82cNPd2fonvx-QJz9sYEd!B
    zDq}rUJwqFPbVX2GZS+A-L2??z-(XRo$L+X)I$?om$5kj|F%cN9>pWc?Lo!(3-ZJEB
    za1b~eaQ*lF$}4&T5!*I*UN!gmx}oIknbJ>p)ZOp<wnwk5cr?*LzSTqG(ZaSe8>PgK
    zcBxw*J6aUwvNDb<3$<0OSSZ_1eaWx;Wd6EOQ@**S{z)anvMH?Z%O@R^10@MhS3j3^
    HP6<r_<Co=X
  • new file 0

    literal 0
    HcmV?d00001
    
    diff --git a/src/chrome/content/aboutTor/search.png b/src/chrome/content/aboutTor/search.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..379d09401485a96005ac7d0d3c7a8c09fe38f42c
    GIT binary patch
    literal 3419
    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
    V!eo;ro9X0t#y}UTQ>g89>z{e@2}J+^
  • new file 0

    literal 0
    HcmV?d00001
    
    diff --git a/src/chrome/content/aboutTor/tor-off.png b/src/chrome/content/aboutTor/tor-off.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..a4509ba55eb8ea2fbe3591a5308bbaf80897bfc7
    GIT binary patch
    literal 5835
    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
  • new file 0

    literal 0
    HcmV?d00001
    
    diff --git a/src/chrome/content/aboutTor/tor-on.png b/src/chrome/content/aboutTor/tor-on.png
    new file mode 100644
    index 0000000000000000000000000000000000000000..aa938e1c518bb9ec551c8ceaf4fad2d4d0e38ac3
    GIT binary patch
    literal 2665
    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
    TAJKwVpB~`qNFs6^sLX!>U}wf|
  • src/chrome/content/torbutton.js

    literal 0
    HcmV?d00001
    
    diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js
    index 0034e1a..d099c98 100644
    a b var m_tb_control_port = null; 
    3434var m_tb_control_host = null;
    3535var m_tb_control_pass = null;
    3636
     37var m_tb_orig_BrowserOnAboutPageLoad = null;
     38
    3739// Bug 1506 P1: This object is only for updating the UI for toggling and style
    3840var torbutton_window_pref_observer =
    3941{
    var torbutton_window_pref_observer = 
    7274                var mode = m_tb_prefs.getBoolPref("extensions.torbutton.settings_applied");
    7375                torbutton_update_toolbutton(mode);
    7476                torbutton_update_statusbar(mode);
     77
     78                // Update all open about:tor pages.
     79                let updateNeeded = torbutton_update_is_needed();
     80                torbutton_update_all_abouttor_pages(updateNeeded);
    7581                break;
    7682            case k_tb_browser_update_needed_pref:
    7783                torbutton_notify_if_update_needed();
    function torbutton_init() { 
    440446        m_tb_control_host = "127.0.0.1";
    441447    }
    442448
     449    // Add our hook into about page load
     450    m_tb_orig_BrowserOnAboutPageLoad = window.BrowserOnAboutPageLoad;
     451    window.BrowserOnAboutPageLoad = torbutton_override_BrowserOnAboutPageLoad;
     452
    443453    // initialize preferences before we start our prefs observer
    444454    torbutton_init_prefs();
    445455
    function torbutton_get_statuspanel() { 
    699709    return o_statuspanel;
    700710}
    701711
     712function torbutton_update_is_needed() {
     713    var updateNeeded = false;
     714    try {
     715        updateNeeded = m_tb_prefs.getBoolPref(k_tb_browser_update_needed_pref);
     716    } catch (e) {}
     717
     718    return updateNeeded;
     719}
     720
    702721function torbutton_notify_if_update_needed() {
    703722    function setOrClearAttribute(aElement, aAttrName, aValue)
    704723    {
    function torbutton_notify_if_update_needed() { 
    711730            aElement.removeAttribute(aAttrName);
    712731    }
    713732
    714     var updateNeeded = false;
    715     try {
    716         updateNeeded = m_tb_prefs.getBoolPref(k_tb_browser_update_needed_pref);
    717     } catch (e) {}
     733    let updateNeeded = torbutton_update_is_needed();
    718734
    719735    // Change look of toolbar item (enable/disable animated update icon).
    720736    var btn = torbutton_get_toolbutton();
    721737    setOrClearAttribute(btn, "tbUpdateNeeded", updateNeeded);
    722738
     739    // Update all open about:tor pages.
     740    torbutton_update_all_abouttor_pages(updateNeeded);
     741
    723742    // Hide/show download menu item and preceding separator.
    724743    var item = document.getElementById("torbutton-downloadUpdate");
    725744    setOrClearAttribute(item, "hidden", !updateNeeded);
    function torbutton_download_update() { 
    743762    gBrowser.selectedTab = newTab;
    744763}
    745764
     765function torbutton_update_all_abouttor_pages(aUpdateNeeded) {
     766  var torOn = torbutton_check_status();
     767  var tabBrowser = top.getBrowser();
     768  var tabs = tabBrowser.mTabs;
     769  if (tabs && (tabs.length > 0)) {
     770    for (var tab = tabs[0]; tab != null; tab = tab.nextSibling) {
     771      try {
     772        let doc = tabBrowser.getBrowserForTab(tab).contentDocument;
     773        torbutton_update_abouttor_doc(doc, torOn, aUpdateNeeded);
     774      } catch(e) {}
     775    }
     776  }
     777}
     778
     779function torbutton_update_abouttor_doc(aDoc, aTorOn, aUpdateNeeded) {
     780  if (torbutton_is_abouttor_doc(aDoc)) {
     781    if (aTorOn)
     782      aDoc.body.setAttribute("toron", "yes");
     783    else
     784      aDoc.body.removeAttribute("toron");
     785
     786    if (aUpdateNeeded)
     787      aDoc.body.setAttribute("torNeedsUpdate", "yes");
     788    else
     789      aDoc.body.removeAttribute("torNeedsUpdate");
     790  }
     791}
     792
     793function torbutton_override_BrowserOnAboutPageLoad(aDoc) {
     794  if (torbutton_is_abouttor_doc(aDoc)) {
     795    let torOn = torbutton_check_status();
     796    let needsUpdate = torbutton_update_is_needed();
     797    torbutton_update_abouttor_doc(aDoc, torOn, needsUpdate);
     798  }
     799
     800  if (m_tb_orig_BrowserOnAboutPageLoad)
     801    m_tb_orig_BrowserOnAboutPageLoad(aDoc);
     802}
     803
     804function torbutton_is_abouttor_doc(aDoc) {
     805  return (aDoc && /^about:tor$/i.test(aDoc.documentURI.toLowerCase()));
     806}
     807
    746808// Bug 1506 P0: Toggle. Kill kill kill.
    747809function torbutton_save_nontor_settings()
    748810{
    function torbutton_do_async_versioncheck() { 
    873935            return -1;
    874936          }
    875937          try {
    876             var locale = m_tb_prefs.getCharPref("general.useragent.locale");
    877938            var version_list = JSON.parse(req.responseText);
    878939            var my_version = m_tb_prefs.getCharPref("torbrowser.version");
    879940            for (var v in version_list) {
    880941              if (version_list[v] == my_version) {
    881942                torbutton_log(3, "Version check passed.");
    882943                m_tb_prefs.setBoolPref(k_tb_browser_update_needed_pref, false);
    883                 var homepage = m_tb_prefs.getComplexValue("browser.startup.homepage",
    884                        Components.interfaces.nsIPrefLocalizedString).data;
    885                 if (homepage.indexOf("https://check.torproject.org/") == 0) {
    886                   var str = Components.classes["@mozilla.org/supports-string;1"]
    887                                     .createInstance(Components.interfaces.nsISupportsString);
    888                   str.data = "https://check.torproject.org/?lang="+locale+"&small=1&uptodate=1";
    889                   m_tb_prefs.setComplexValue("browser.startup.homepage",
    890                                              Components.interfaces.nsISupportsString,
    891                                              str);
    892                 }
    893944                return;
    894945              }
    895946            }
    896947            torbutton_log(5, "Your Tor Browser is out of date.");
    897948            m_tb_prefs.setBoolPref(k_tb_browser_update_needed_pref, true);
    898             // Not up to date
    899             var str = Components.classes["@mozilla.org/supports-string;1"]
    900                               .createInstance(Components.interfaces.nsISupportsString);
    901             str.data = "https://check.torproject.org/?lang="+locale+"&small=1&uptodate=0";
    902             m_tb_prefs.setComplexValue("browser.startup.homepage",
    903                                        Components.interfaces.nsISupportsString,
    904                                        str);
    905949            return;
    906950          } catch(e) {
    907951            torbutton_log(5, "Version check failed! JSON parsing error: "+e);
  • new file src/chrome/locale/en/aboutTor.dtd

    diff --git a/src/chrome/locale/en/aboutTor.dtd b/src/chrome/locale/en/aboutTor.dtd
    new file mode 100644
    index 0000000..efedbe9
    - +  
     1<!--
     2   - Copyright (c) 2013, The Tor Project, Inc.
     3   - See LICENSE for licensing information.
     4   - vim: set sw=2 sts=2 ts=8 et syntax=xml:
     5  -->
     6
     7<!ENTITY aboutTor.title "About Tor">
     8
     9<!ENTITY aboutTor.outOfDateTorOn.label "HOWEVER, your browser is out of date.">
     10<!ENTITY aboutTor.outOfDateTorOff.label "ALSO, your browser is out of date.">
     11<!ENTITY aboutTor.outOfDate2.label "Click on the onion and then choose Download Tor Browser Bundle Update.">
     12
     13<!ENTITY aboutTor.success.label "Congratulations!">
     14<!ENTITY aboutTor.success2.label "Your browser is configured to use Tor.">
     15<!ENTITY aboutTor.success3.label "You are now free to browse the Internet anonymously.">
     16<!ENTITY aboutTor.failure.label "Try Again!">
     17<!ENTITY aboutTor.failure2.label "Tor is not working in this browser.">
     18<!ENTITY aboutTor.failure3.label "Please check your settings and try again.">
     19
     20<!ENTITY aboutTor.search.label "Search">
     21<!ENTITY aboutTor.searchSPPost.link "https://startpage.com/do/search">
     22<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com/html/">
     23<!ENTITY aboutTor.searchSP.privacy.beforeLink.label "Search ">
     24<!ENTITY aboutTor.searchDDG.privacy.beforeLink.label "Search ">
     25<!ENTITY aboutTor.searchSP.privacy.label "securely">
     26<!ENTITY aboutTor.searchDDG.privacy.label "securely">
     27<!ENTITY aboutTor.searchSP.privacy.link "https://startpage.com/eng/protect-privacy.html?">
     28<!ENTITY aboutTor.searchDDG.privacy.link "https://duckduckgo.com/privacy.html">
     29<!ENTITY aboutTor.searchSP.privacy.afterLink.label "">
     30<!ENTITY aboutTor.searchDDG.privacy.afterLink.label "">
     31
     32<!ENTITY aboutTor.searchSP.search.beforeLink.label " with ">
     33<!ENTITY aboutTor.searchDDG.search.beforeLink.label " with ">
     34<!ENTITY aboutTor.searchSP.search.label "Startpage">
     35<!ENTITY aboutTor.searchDDG.search.label "DuckDuckGo">
     36<!ENTITY aboutTor.searchSP.search.link "https://startpage.com/">
     37<!ENTITY aboutTor.searchDDG.search.link "https://duckduckgo.com/">
     38<!ENTITY aboutTor.searchSP.search.afterLink.label ".">
     39<!ENTITY aboutTor.searchDDG.search.afterLink.label ".">
     40
     41<!ENTITY aboutTor.torInfo1.label "Additional Info:">
     42<!ENTITY aboutTor.torInfo2.label "Country &amp; IP Address:">
     43<!ENTITY aboutTor.torInfo3.label "Exit Node:">
     44<!ENTITY aboutTor.torInfo4.label "This server does not log any information about visitors.">
     45<!ENTITY aboutTor.whatnextQuestion.label "What Next?">
     46<!ENTITY aboutTor.whatnextAnswer.label "Tor is NOT all you need to browse anonymously! You may need to change some of your browsing habits to ensure your identity stays safe.">
     47<!ENTITY aboutTor.whatnext.label "Tips On Staying Anonymous »">
     48<!ENTITY aboutTor.whatnext.link "https://www.torproject.org/download/download.html.en#warning">
     49<!ENTITY aboutTor.helpInfo1.label "You Can Help!">
     50<!ENTITY aboutTor.helpInfo2.label "There are many ways you can help make the Tor Network faster and stronger:">
     51<!ENTITY aboutTor.helpInfo3.label "Run a Tor Relay Node »">
     52<!ENTITY aboutTor.helpInfo3.link "https://www.torproject.org/docs/tor-doc-relay.html.en">
     53<!ENTITY aboutTor.helpInfo4.label "Volunteer Your Services »">
     54<!ENTITY aboutTor.helpInfo4.link "https://www.torproject.org/getinvolved/volunteer.html.en">
     55<!ENTITY aboutTor.helpInfo5.label "Make a Donation »">
     56<!ENTITY aboutTor.helpInfo5.link "https://www.torproject.org/donate/donate.html.en">
     57
     58<!ENTITY aboutTor.footer.label "The Tor Project is a US 501(c)(3) non-profit dedicated to the research, development, and education of online anonymity and privacy.">
     59<!ENTITY aboutTor.learnMore.label "Learn more about The Tor Project »">
     60<!ENTITY aboutTor.learnMore.link "https://www.torproject.org/about/overview.html.en">
  • new file src/chrome/skin/aboutTor.css

    diff --git a/src/chrome/skin/aboutTor.css b/src/chrome/skin/aboutTor.css
    new file mode 100644
    index 0000000..7aa8112
    - +  
     1/*
     2 * Copyright (c) 2013, The Tor Project, Inc.
     3 * See LICENSE for licensing information.
     4 *
     5 * vim: set sw=2 sts=2 ts=8 et syntax=css:
     6 */
     7
     8* {
     9  padding: 0px;
     10  margin: 0px;
     11}
     12
     13body {
     14  min-width: 920px;
     15  max-width: 920px;
     16  width: 100%;
     17  height: 100%;
     18  margin: 0px auto;
     19  padding: 0px 0px;
     20  font-size: 62.5%;
     21  font-family: "Liberation Serif", "Times New Roman", Times, serif;
     22  font-weight: normal;
     23  color: #4d4d4d;
     24  background-color: #FFFFFF;
     25  background-attachment: fixed;
     26  background-size: 100% 100%;
     27}
     28
     29body {
     30  background-image: -moz-linear-gradient(top, #ffffff, #ffffff 10%, #dddddd 50%, #dddddd);
     31}
     32
     33body[toron] {
     34  background-image: -moz-linear-gradient(top, #ffffff, #ffffff 10%, #d5ffd5 50%, #d5ffd5);
     35}
     36
     37body[toron] #torstatus-image {
     38  background-image: url('chrome://torbutton/content/aboutTor/tor-on.png');
     39}
     40
     41#torstatus-image {
     42  position: absolute;
     43  left: 70px;
     44  height: 128px;
     45  width: 128px;
     46  background-image: url('chrome://torbutton/content/aboutTor/tor-off.png');
     47}
     48
     49#toolbarIconArrowLeft, #toolbarIconArrowRight {
     50  position: absolute;
     51  top: 4px;
     52  height: 250px;
     53}
     54
     55#toolbarIconArrowLeft {
     56  left: 78px;
     57  width: 30px;
     58  background-image: url('chrome://torbutton/content/aboutTor/onionArrow.png');
     59}
     60
     61#toolbarIconArrowRight {
     62  left: 108px;
     63  width: 10px;
     64  background-image: url('chrome://torbutton/content/aboutTor/onionArrowRight.png');
     65}
     66
     67a {
     68  color: #008000;
     69  text-decoration: none;
     70}
     71
     72a:hover {
     73  color: #00A000;
     74  text-decoration: underline;
     75}
     76
     77#torstatus {
     78  position: relative; /* needed for torstatus-image positioning */
     79  max-width: 620px;
     80  height: 148px;
     81  padding: 15px 128px 0px 128px;
     82  margin: 20px auto 0px auto;
     83}
     84
     85.top {
     86  text-align: center;
     87  white-space: nowrap;
     88}
     89
     90body[toron][torNeedsUpdate] .hideIfTBBNeedsUpdate,
     91body:not([torNeedsUpdate]) .hideIfTorIsUpToDate {
     92  display: none;
     93}
     94
     95body[toron] .hideIfTorOn,
     96body:not([toron]) .hideIfTorOff {
     97  display: none;
     98}
     99
     100body[toron] .top h1, body[toron] .top h2 {
     101  color: #008000;
     102}
     103
     104div.hideIfTorIsUpToDate,
     105body .top div.hideIfTorIsUpToDate h1 {
     106  color: black;
     107}
     108
     109body .top div.hideIfTorIsUpToDate h1.hideIfTorOff {
     110  margin-left: 30px;
     111}
     112
     113.top div.hideIfTorIsUpToDate h3 {
     114  display: inline-block;
     115}
     116
     117.top div.hideIfTorOff h1 {
     118  margin-top: 20px;
     119}
     120
     121.top h1 {
     122  font-size: 4.14em;
     123  font-weight: bold;
     124  margin-bottom: 5px;
     125}
     126
     127.top h2 {
     128  font-size: 2.934em;
     129  margin-bottom: 20px;
     130  font-weight: normal;
     131}
     132
     133.top h3 {
     134  font-size: 2.04em;
     135  font-style: italic;
     136  font-weight: normal;
     137}
     138
     139#middle {
     140  position: relative;
     141  width: 920px;
     142  height: 20em;
     143  text-align: center;
     144}
     145
     146#middle div.container {
     147  position: absolute;
     148  top: 3.1em;
     149  width: 280px;
     150  min-width: 280px;
     151  min-height: 12.5em;
     152  padding: 10px 10px;
     153  margin: 8px 8px;
     154  color: #222222;
     155  background-color: #FFFFFF;
     156  border: 1px solid #008000;
     157  border-radius: 16px;
     158  text-align: center;
     159  vertical-align: top;
     160}
     161
     162#middle div.two {
     163  left: 120px;
     164}
     165
     166#middle div.three {
     167  left: 520px;
     168}
     169
     170#middle h1 {
     171  font-family: "Liberation Sans", Arial, Helvetica, sans-serif;
     172  font-size: 1.9em;
     173  margin-bottom: 10px;
     174}
     175
     176#middle h2 {
     177  font-size: 1.4em;
     178  margin: 9px 0px 3px 0px;
     179  font-weight: 500;
     180}
     181
     182#middle h6 {
     183  font-family: "Liberation Sans", Arial, Helvetica, sans-serif;
     184  font-size: 1em;
     185  line-height: 1em;
     186  font-style: italic;
     187  font-weight: normal;
     188  padding-top: 10px;
     189}
     190
     191#middle p {
     192  font-size: 1.35em;
     193  text-align: left;
     194}
     195
     196#middle a {
     197  font-size: 1.35em;
     198}
     199
     200#middle a.tips {
     201  display: block;
     202  margin-top: 1.35em;
     203}
     204
     205#middle ul {
     206  text-align: left;
     207  padding: 5px 0 0 22px;
     208}
     209
     210#middle li {
     211  padding-top: 2px;
     212}
     213
     214#bottom {
     215  margin: 0px auto;
     216  padding-bottom: 40px;
     217  float: left;
     218}
     219
     220#bottom p {
     221  font-size: 1.8em;
     222  text-align: justify;
     223  margin: 10px 125px 0px 125px;
     224}
     225
     226#bottom a {
     227  color: #800080;
     228  text-decoration: underline;
     229}
     230
     231#bottom a:hover {
     232  color: #A000A0;
     233  text-decoration: none;
     234}
     235
     236#bottom h4 {
     237  margin-top: 50px;
     238  line-height: 1em;
     239  font-family: "Liberation Sans", Arial, Helvetica, sans-serif;
     240  font-size: 1em;
     241  font-weight: normal;
     242  text-align: center;
     243}
     244
     245#bottom p.lang {
     246  max-width: 620px;
     247  margin: 10px auto;
     248  font-family: "Liberation Sans", Arial, Helvetica, sans-serif;
     249  font-size: 1em;
     250  font-weight: normal;
     251  text-align: center;
     252}
     253
     254.searchbox form {
     255  width: 396px;
     256  margin: 35px auto 1px auto;
     257  text-align: left;
     258}
     259
     260.searchbox h4 {
     261  padding-top: 5px;
     262  font-size: 12px;
     263  font-weight: normal;
     264  font-family: "Liberation Sans", Arial, Helvetica, sans-serif;
     265  text-align: center;
     266}
     267
     268#sbutton {
     269  display: block;
     270  float: right;
     271  width: 33px;
     272}
     273
     274#sbutton input {
     275  height: 32px;
     276  width: 33px;
     277  border: 0;
     278  background: url('chrome://torbutton/content/aboutTor/search.png') no-repeat top left;
     279  cursor: pointer;
     280}
     281
     282/* #sxw is the container div for the search field and button */
     283#sxw {
     284  border-top: rgb(31,119,45) solid 1px;
     285  border-left: rgb(31,119,45) solid 1px;
     286  border-bottom: rgb(94,213,99) solid 1px;
     287  border-right: none;
     288  border-radius: 3px 0 0 3px;
     289  box-shadow: 0 1px 2px 0 rgba(0,0,0,0.2);
     290  border-top-left-radius: 3px 3px;
     291  border-bottom-left-radius: 3px 3px;
     292}
     293
     294/* #sx is the search input (text) field */
     295#sx {
     296  width: 350px;
     297  height: 23px;
     298  padding: 4px 6px 5px 6px;
     299  margin: 0;
     300  outline: none;
     301  color: #222;
     302  border: none;
     303  font-family: "Segoe UI","Arial",sans-serif;
     304  font-size: 18px;
     305}
     306
  • new file src/components/aboutTor.js

    diff --git a/src/components/aboutTor.js b/src/components/aboutTor.js
    new file mode 100644
    index 0000000..be0e326
    - +  
     1/*************************************************************************
     2 * Copyright (c) 2013, The Tor Project, Inc.
     3 * See LICENSE for licensing information.
     4 *
     5 * vim: set sw=2 sts=2 ts=8 et syntax=css:
     6 *
     7 * about:tor component
     8 *************************************************************************/
     9
     10// Module specific constants
     11const kMODULE_NAME = "about:tor";
     12const kMODULE_CONTRACTID = "@mozilla.org/network/protocol/about;1?what=tor";
     13const kMODULE_CID = Components.ID("84d47da6-79c3-4661-aa9f-8049476f7bf5");
     14
     15const kAboutTorURL = "chrome://torbutton/content/aboutTor/aboutTor.xhtml";
     16
     17const Cc = Components.classes;
     18const Ci = Components.interfaces;
     19const Cu = Components.utils;
     20 
     21Cu.import("resource://gre/modules/XPCOMUtils.jsm");
     22 
     23function AboutTor()
     24{
     25}
     26
     27
     28AboutTor.prototype =
     29{
     30  QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
     31
     32  // nsIClassInfo implementation:
     33  classDescription: kMODULE_NAME,
     34  classID: kMODULE_CID,
     35  contractID: kMODULE_CONTRACTID,
     36
     37  // nsIAboutModule implementation:
     38  newChannel: function(aURI)
     39  {
     40    let ioSvc = Cc["@mozilla.org/network/io-service;1"]
     41                  .getService(Ci.nsIIOService);
     42    let channel = ioSvc.newChannel(kAboutTorURL, null, null);
     43    channel.originalURI = aURI;
     44
     45    return channel;
     46  },
     47
     48  getURIFlags: function(aURI)
     49  {
     50    return Ci.nsIAboutModule.ALLOW_SCRIPT;
     51  }
     52};
     53
     54
     55const NSGetFactory = XPCOMUtils.generateNSGetFactory([AboutTor]);