[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#805634: marked as done (jessie-pu: torbrowser-launcher/0.2.2-2~deb8u1)



Your message dated Sat, 23 Jan 2016 13:57:15 +0000
with message-id <1453557435.1835.52.camel@adam-barratt.org.uk>
and subject line 8.3 point release cleanup
has caused the Debian Bug report #805634,
regarding jessie-pu: torbrowser-launcher/0.2.2-2~deb8u1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
805634: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=805634
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
package: release.debian.org
x-debbugs-cc: pkg-privacy-maintainers@lists.alioth.debian.org
Severity: normal
Tags: jessie
User: release.debian.org@packages.debian.org
Usertags: pu

Hi,

torbrowser-launcher 0.1.9-1+deb8u1 in jessie is affected by 3 serious bugs
(#804184 #784041 #804274) which are all fixed in the version in stretch
(=0.2.1-2), plus there is one annoying bug left in stretch (#805078) which
is fixed in the sid version = 0.2.2-2.

That last bug again breaks torbrowser-launcher completly but can be worked 
around by removing ~/.cache/torbrowser/, ~/.local/share/torbrowser/ and
~/.config/torbrowser/ so it's a bummer from the user experience too.

The diff is a bit longer than I would like, but given the commits were
reviewed several times by several people and given the purpose of the package
(to install another rather large bit of software…) I think it's sane to accept
this. Especially as the alternative would mean cherry-picking most of the
commits anyway and having to do the same when upstream (=torbrowser, and thus
the launcher) changes again…

$ git diff debian/0.1.9-1+deb8u1 debian/0.2.2-2|diffstat
 apparmor/torbrowser.start-tor-browser                                          |   53 -
 b/.gitignore                                                                   |    2 
 b/BUILD.md                                                                     |    4 
 b/CHANGELOG.md                                                                 |   24 
 b/README.md                                                                    |   24 
 b/apparmor/torbrowser.Browser.firefox                                          |   18 
 b/apparmor/torbrowser.Tor.tor                                                  |    3 
 b/apparmor/usr.bin.torbrowser-launcher                                         |    4 
 b/build_rpm.sh                                                                 |    2 
 b/debian/changelog                                                             |   58 +-
 b/debian/control                                                               |    6 
 b/debian/copyright                                                             |   22 
 b/debian/gbp.conf                                                              |    2 
 b/debian/patches/Include-local-overrides-file-in-AppArmor-profiles.-C.patch    |   38 +
 b/debian/patches/Set-torbrowser.start-tor-browser-and-usr.bin.torbrow.patch    |   26 
 b/debian/patches/series                                                        |    2 
 b/screenshot.png                                                               |binary
 b/setup.py                                                                     |    1 
 b/share/applications/torbrowser-settings.desktop                               |    7 
 b/share/applications/torbrowser.desktop                                        |    8 
 b/share/torbrowser-launcher/version                                            |    2 
 b/stdeb.cfg                                                                    |    5 
 b/torbrowser_launcher/__init__.py                                              |    7 
 b/torbrowser_launcher/common.py                                                |  102 ---
 b/torbrowser_launcher/launcher.py                                              |  276 +++-------
 b/torbrowser_launcher/settings.py                                              |  116 +---
 debian/patches/0001-Update-location-of-start-tor-browser-for-TBB-4.5-and.patch |   93 ---
 debian/patches/0002-execute-.-start-tor-browser.desktop-instead-of-.-Bro.patch |   41 -
 debian/patches/0003-Stop-letting-Tor-Browser-act-as-a-default-browser.patch    |   21 
 share/torbrowser-launcher/erinn.asc                                            |   51 -
 30 files changed, 353 insertions(+), 665 deletions(-)

If you want to look yourself in more detail, please use 
git.debian.org/git/collab-maint/torbrowser-launcher.git and the tags debian/$version.

(I've confirmed the tags correspond to what has been uploaded. Attached is the output
of debdiff torbrowser-launcher_0.1.9-1+deb8u1.dsc torbrowser-launcher_0.2.2-2.dsc>tbl-jessie-sid.diff)

The upstream changelog is (rather well describing the changes and) reads:

# Tor Browser Launcher Changelog

## 0.2.2

* Tor Browser Lanucher no longer attempts to auto-update, now that Tor Browser has this feature
* System Tor is now an optional dependency
* Fix issue where downloads fail because of unicode URLs
* Removed window management code that stopped working many releases ago, and removed wmctrl dependency
* Removed test code that caused signature verification to happen at the wrong time

## 0.2.1

* Stop using RecommendedTBBVersions and start using more reliable "release" channel XML
* Converted settings file from pickle format to JSON
* Download tarball signatures to verify, rather than SHA256SUMS and signature
* Implemented IPolicyForHTTPS to prevent twisted-related crashes in Debian
* Some AppArmor fixes

## 0.2.0

* Fix critical bug with new location of start-tor-browser
* Silenced some AppArmor denied events from logs
* Print less console output
* Remove support for accepting links
* Added better support for updating over Tor in Fedora

Please advise me the road to fix this.

Finally, you might enjoy https://jenkins.debian.net/view/torbrowser/ which
presents a clear overview shows which version is working in which suite and#
which shall also notify us in time about new breakages!


cheers,
	Holger
diff -Nru torbrowser-launcher-0.1.9/apparmor/torbrowser.Browser.firefox torbrowser-launcher-0.2.2/apparmor/torbrowser.Browser.firefox
--- torbrowser-launcher-0.1.9/apparmor/torbrowser.Browser.firefox	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/apparmor/torbrowser.Browser.firefox	2015-11-13 18:38:22.000000000 +0100
@@ -43,14 +43,15 @@
   owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/components/*.so mr,
   owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/browser/components/*.so mr,
   owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/firefox rix,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/{Browser/TorBrowser/,}Data/Browser/profiles.ini r,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/{Browser/TorBrowser/,}Data/Browser/profile.default/ r,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/{Browser/TorBrowser/,}Data/Browser/profile.default/** rwk,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/{Browser/TorBrowser/,}Tor/tor Px,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/{Browser/,}Desktop/ rw,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/{Browser/,}Desktop/** rwk,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/{Browser/,}Downloads/ rw,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/{Browser/,}Downloads/** rwk,
+  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/TorBrowser/Data/Browser/profiles.ini r,
+  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/TorBrowser/Data/Browser/profile.default/ r,
+  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/TorBrowser/Data/Browser/profile.default/** rwk,
+  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/TorBrowser/Tor/tor Px,
+  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/TorBrowser/Tor/libstdc++.so.6 m,
+  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/Desktop/ rw,
+  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/Desktop/** rwk,
+  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/Downloads/ rw,
+  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/Downloads/** rwk,
 
   /etc/mailcap r,
   /etc/mime.types r,
@@ -65,6 +66,7 @@
 
   /sys/devices/system/cpu/ r,
   /sys/devices/system/cpu/present r,
+  deny /sys/devices/virtual/block/*/uevent r,
 
   # Should use abstractions/gstreamer instead once merged upstream
   /etc/udev/udev.conf r,
diff -Nru torbrowser-launcher-0.1.9/apparmor/torbrowser.start-tor-browser torbrowser-launcher-0.2.2/apparmor/torbrowser.start-tor-browser
--- torbrowser-launcher-0.1.9/apparmor/torbrowser.start-tor-browser	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/apparmor/torbrowser.start-tor-browser	1970-01-01 01:00:00.000000000 +0100
@@ -1,53 +0,0 @@
-#include <tunables/global>
-
-/home/*/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/{Browser/,}start-tor-browser {
-  #include <abstractions/base>
-  #include <abstractions/bash>
-  #include <abstractions/fonts>
-  #include <abstractions/freedesktop.org>
-
-  capability sys_ptrace,
-
-
-  /bin/cat rix,
-  /bin/bash r,
-  /bin/dash rix,
-  /bin/grep rix,
-  /bin/ln rix,
-  /bin/mkdir rix,
-  /bin/ps rix,
-  /bin/readlink ix,
-  /bin/sed rix,
-  /dev/pts/[0-9]* rw,
-  /dev/tty rw,
-  /etc/magic r,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/.config/ w,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/.config/ibus/ w,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/.config/ibus/bus w,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/Browser/firefox Px,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/{Browser/TorBrowser/,}Tor/tor r,
-  owner @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/{Browser/,}start-tor-browser r,
-  @{PROC}/ r,
-  @{PROC}/[0-9]*/status r,
-  @{PROC}/[0-9]*/stat r,
-  @{PROC}/[0-9]*/cmdline r,
-  @{PROC}/meminfo r,
-  @{PROC}/sys/kernel/pid_max r,
-  @{PROC}/tty/drivers r,
-  @{PROC}/uptime r,
-  /{,var/}run/utmp r,
-  /dev/ptmx rw,
-  /usr/bin/dirname rix,
-  /usr/bin/expr rix,
-  /usr/bin/file rix,
-  /usr/bin/getconf rix,
-  /usr/bin/id rix,
-  /usr/bin/ldd rix,
-  /usr/bin/realpath ix,
-  /usr/bin/zenity ix,
-  /usr/lib{,32,64}/** mr,
-  /usr/share/file/magic.mgc r,
-  /usr/share/file/magic/ r,
-  /usr/share/zenity/zenity.ui r,
-
-}
diff -Nru torbrowser-launcher-0.1.9/apparmor/torbrowser.Tor.tor torbrowser-launcher-0.2.2/apparmor/torbrowser.Tor.tor
--- torbrowser-launcher-0.1.9/apparmor/torbrowser.Tor.tor	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/apparmor/torbrowser.Tor.tor	2015-11-13 18:38:22.000000000 +0100
@@ -20,6 +20,5 @@
   /sys/devices/system/cpu/ r,
 
   # OnionShare compatibility
-  /tmp/onionshare_*/ rw,
-  /tmp/onionshare_*/* rw,
+  /tmp/onionshare/** rw,
 }
diff -Nru torbrowser-launcher-0.1.9/apparmor/usr.bin.torbrowser-launcher torbrowser-launcher-0.2.2/apparmor/usr.bin.torbrowser-launcher
--- torbrowser-launcher-0.1.9/apparmor/usr.bin.torbrowser-launcher	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/apparmor/usr.bin.torbrowser-launcher	2015-11-13 18:49:50.000000000 +0100
@@ -27,7 +27,7 @@
   @{HOME}/.local/share/torbrowser/ rw,
   @{HOME}/.local/share/torbrowser/** mrwk,
   @{HOME}/.local/share/torbrowser/gnupg_homedir/* l,
-  @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/{Browser/,}start-tor-browser Px,
+  @{HOME}/.local/share/torbrowser/tbb/{i686,x86_64}/tor-browser_*/start-tor-browser.desktop Ux,
 
   @{PROC}/ r,
   @{PROC}/[0-9]*/{cmdline,mountinfo,stat,status} r,
@@ -36,7 +36,7 @@
   @{PROC}/tty/drivers r,
   @{PROC}/uptime r,
   /usr/bin/ r,
-  /usr/bin/{gpg,wmctrl,dirname,expr,file,getconf,id} rix,
+  /usr/bin/{gpg,dirname,expr,file,getconf,id} rix,
   /usr/bin/torbrowser-launcher r,
   /usr/share/file/magic.mgc r,
   /usr/share/file/magic/ r,
diff -Nru torbrowser-launcher-0.1.9/BUILD.md torbrowser-launcher-0.2.2/BUILD.md
--- torbrowser-launcher-0.1.9/BUILD.md	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/BUILD.md	2015-11-13 18:49:50.000000000 +0100
@@ -12,7 +12,7 @@
 ### Debian, Ubuntu, Linux Mint, etc.
 
 ```sh
-sudo apt-get install build-essential python-all python-stdeb python-gtk2 python-psutil python-twisted python-lzma python-txsocksx wmctrl gnupg fakeroot xz-utils tor
+sudo apt-get install build-essential dh-python python-all python-stdeb python-gtk2 python-psutil python-twisted python-lzma python-txsocksx gnupg fakeroot xz-utils tor
 ./build_deb.sh
 sudo dpkg -i deb_dist/torbrowser-launcher_*.deb
 ```
@@ -22,7 +22,7 @@
 ### Red Hat, Fedora, CentOS, etc.
 
 ```sh
-sudo yum install python-psutil python-twisted wmctrl gnupg fakeroot rpm-build
+sudo yum install python-psutil python-twisted gnupg fakeroot rpm-build python-txsocksx tor pygtk2
 ./build_rpm.sh
 sudo yum install dist/torbrowser-launcher-*.rpm
 ```
diff -Nru torbrowser-launcher-0.1.9/build_rpm.sh torbrowser-launcher-0.2.2/build_rpm.sh
--- torbrowser-launcher-0.1.9/build_rpm.sh	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/build_rpm.sh	2015-11-13 18:49:50.000000000 +0100
@@ -6,7 +6,7 @@
 rm -r build dist
 
 # build binary package
-python setup.py bdist_rpm --requires="python-psutil, python-twisted, wmctrl, gnupg, fakeroot"
+python setup.py bdist_rpm --requires="python-psutil, python-twisted, gnupg, fakeroot, pygtk2"
 
 # install it
 echo ""
diff -Nru torbrowser-launcher-0.1.9/CHANGELOG.md torbrowser-launcher-0.2.2/CHANGELOG.md
--- torbrowser-launcher-0.1.9/CHANGELOG.md	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/CHANGELOG.md	2015-11-13 18:49:50.000000000 +0100
@@ -1,5 +1,29 @@
 # Tor Browser Launcher Changelog
 
+## 0.2.2
+
+* Tor Browser Lanucher no longer attempts to auto-update, now that Tor Browser has this feature
+* System Tor is now an optional dependency
+* Fix issue where downloads fail because of unicode URLs
+* Removed window management code that stopped working many releases ago, and removed wmctrl dependency
+* Removed test code that caused signature verification to happen at the wrong time
+
+## 0.2.1
+
+* Stop using RecommendedTBBVersions and start using more reliable "release" channel XML
+* Converted settings file from pickle format to JSON
+* Download tarball signatures to verify, rather than SHA256SUMS and signature
+* Implemented IPolicyForHTTPS to prevent twisted-related crashes in Debian
+* Some AppArmor fixes
+
+## 0.2.0
+
+* Fix critical bug with new location of start-tor-browser
+* Silenced some AppArmor denied events from logs
+* Print less console output
+* Remove support for accepting links
+* Added better support for updating over Tor in Fedora
+
 ## 0.1.9
 
 * Added option to disable accepting links, to workaround Firefox/Tor Browser issue
diff -Nru torbrowser-launcher-0.1.9/debian/changelog torbrowser-launcher-0.2.2/debian/changelog
--- torbrowser-launcher-0.1.9/debian/changelog	2015-05-30 15:53:04.000000000 +0200
+++ torbrowser-launcher-0.2.2/debian/changelog	2015-11-19 18:41:35.000000000 +0100
@@ -1,13 +1,55 @@
-torbrowser-launcher (0.1.9-1+deb8u1) jessie; urgency=high
+torbrowser-launcher (0.2.2-2) sid; urgency=medium
 
-  * Apply 3d9f4ed and 5f833d7 from 0.2.0 upstream release to deal with changed
-    pathes in the 4.5 torbrowser release. (Closes: #784041)
-  * 3d9f4ed also removes the accept links feature (as it has stopped worked
-    with 4.5.)
-  * Apply f219f35 from 0.2.0 to stop acting as default browser, because a
-    default browser should be captable of accepting links.
+  * Upload to sid.
 
- -- Holger Levsen <holger@debian.org>  Sat, 30 May 2015 15:27:02 +0200
+ -- Holger Levsen <holger@debian.org>  Thu, 19 Nov 2015 18:41:15 +0100
+
+torbrowser-launcher (0.2.2-1) experimental; urgency=medium
+
+  * New upstream version. (Closes: #805078)
+
+ -- Holger Levsen <holger@debian.org>  Fri, 13 Nov 2015 18:50:18 +0100
+
+torbrowser-launcher (0.2.1-2) unstable; urgency=high
+
+  [ intrigeri ]
+  * Re-apply changes from 0.2.0-2, that were dropped by the 0.2.1-1 upload.
+  * Add debian/gbp.conf to automated selection of the packaging branch.
+  * Drop AppArmor-allow-Tor-Browser-to-use-shared-libraries-s.patch:
+    applied upstream.
+  * Refresh patches.
+
+  [ Ximin Luo ]
+  * Hand over package to pkg-privacy team.
+
+ -- Holger Levsen <holger@debian.org>  Mon, 16 Nov 2015 23:13:29 +0100
+
+torbrowser-launcher (0.2.1-1) unstable; urgency=medium
+
+  * New upstream version. (Closes: #804184, #804274, #804394)
+
+ -- Holger Levsen <holger@debian.org>  Fri, 13 Nov 2015 18:41:38 +0100
+
+torbrowser-launcher (0.2.0-2) unstable; urgency=medium
+
+  * Team upload.
+  * AppArmor-allow-Tor-Browser-to-use-shared-libraries-s.patch: new patch,
+    that extends the torbrowser.Browser.firefox AppArmor profile so that
+    Tor Browser 4.5 and 5.0 can run.
+  * debian/copyright: don't include the Expat license's text twice.
+  * Include-local-overrides-file-in-AppArmor-profiles.-C.patch: new patch,
+    to include local overrides file in AppArmor profiles. (Closes: #751451)
+  * Set-torbrowser.start-tor-browser-and-usr.bin.torbrow.patch: new patch,
+    that sets the torbrowser.start-tor-browser and usr.bin.torbrowser-launcher
+    AppArmor profiles to complain mode.
+
+ -- intrigeri <intrigeri@debian.org>  Wed, 12 Aug 2015 10:42:50 +0200
+
+torbrowser-launcher (0.2.0-1) unstable; urgency=medium
+ 
+  * New upstream version. (Closes: #784041)
+
+ -- Ulrike Uhlig <u@451f.org>  Thu, 14 May 2015 22:18:10 +0200
 
 torbrowser-launcher (0.1.9-1) unstable; urgency=medium
 
diff -Nru torbrowser-launcher-0.1.9/debian/control torbrowser-launcher-0.2.2/debian/control
--- torbrowser-launcher-0.1.9/debian/control	2015-05-18 17:17:42.000000000 +0200
+++ torbrowser-launcher-0.2.2/debian/control	2015-11-19 17:07:53.000000000 +0100
@@ -1,5 +1,5 @@
 Source: torbrowser-launcher
-Maintainer: Anonymity Tools Debian Maintainers <pkg-anonymity-tools@lists.alioth.debian.org>
+Maintainer: Debian Privacy Tools Maintainers <pkg-privacy-maintainers@lists.alioth.debian.org>
 Uploaders: Jacob Appelbaum <jacob@appelbaum.net>,
  Ulrike Uhlig <u@451f.org>,
  Holger Levsen <holger@debian.org>
@@ -9,8 +9,8 @@
 X-Python-Version: >= 2.7
 Standards-Version: 3.9.6
 Homepage: https://micahflee.com/torbrowser-launcher/
-Vcs-Git: git://anonscm.debian.org/collab-maint/torbrowser-launcher.git
-Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/torbrowser-launcher.git
+Vcs-Git: https://anonscm.debian.org/git/pkg-privacy/packages/torbrowser-launcher.git
+Vcs-Browser: https://anonscm.debian.org/cgit/pkg-privacy/packages/torbrowser-launcher.git
 
 Package: torbrowser-launcher
 Architecture: i386 amd64
diff -Nru torbrowser-launcher-0.1.9/debian/copyright torbrowser-launcher-0.2.2/debian/copyright
--- torbrowser-launcher-0.1.9/debian/copyright	2015-05-18 17:17:42.000000000 +0200
+++ torbrowser-launcher-0.2.2/debian/copyright	2015-11-19 17:07:53.000000000 +0100
@@ -58,30 +58,12 @@
 Files: debian/*
 Copyright: Copyright 2014 Jacob Appelbaum <jacob@appelbaum.net>
 License: Expat
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation
- files (the "Software"), to deal in the Software without
- restriction, including without limitation the rights to use,
- copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following
- conditions:
- .
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
- .
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
 
 Files: debian/examples/*
 Copyright: Copyright 2014 Holger Levsen <holger@debian.org>
 License: Expat
+
+License: Expat
  Permission is hereby granted, free of charge, to any person
  obtaining a copy of this software and associated documentation
  files (the "Software"), to deal in the Software without
diff -Nru torbrowser-launcher-0.1.9/debian/gbp.conf torbrowser-launcher-0.2.2/debian/gbp.conf
--- torbrowser-launcher-0.1.9/debian/gbp.conf	1970-01-01 01:00:00.000000000 +0100
+++ torbrowser-launcher-0.2.2/debian/gbp.conf	2015-11-19 18:37:20.000000000 +0100
@@ -0,0 +1,2 @@
+[DEFAULT]
+debian-branch = debian/sid
diff -Nru torbrowser-launcher-0.1.9/debian/patches/0001-Update-location-of-start-tor-browser-for-TBB-4.5-and.patch torbrowser-launcher-0.2.2/debian/patches/0001-Update-location-of-start-tor-browser-for-TBB-4.5-and.patch
--- torbrowser-launcher-0.1.9/debian/patches/0001-Update-location-of-start-tor-browser-for-TBB-4.5-and.patch	2015-05-30 15:22:57.000000000 +0200
+++ torbrowser-launcher-0.2.2/debian/patches/0001-Update-location-of-start-tor-browser-for-TBB-4.5-and.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,93 +0,0 @@
-From 3d9f4edc206ade74ff1b4194297e20025e51b793 Mon Sep 17 00:00:00 2001
-From: Micah Lee <micah@micahflee.com>
-Date: Mon, 11 May 2015 14:04:01 -0700
-Subject: [PATCH] Update location of start-tor-browser for TBB 4.5, and remove
- accept_links feature #176
-
----
- torbrowser_launcher/common.py   |  5 ++---
- torbrowser_launcher/launcher.py |  6 +-----
- torbrowser_launcher/settings.py | 12 ------------
- 3 files changed, 3 insertions(+), 20 deletions(-)
-
-diff --git a/torbrowser_launcher/common.py b/torbrowser_launcher/common.py
-index 505a4b3..9495fe6 100644
---- a/torbrowser_launcher/common.py
-+++ b/torbrowser_launcher/common.py
-@@ -145,7 +145,7 @@ class Common:
-                 'update_check_file': tbb_cache+'/download/RecommendedTBBVersions',
-                 'tbb': {
-                     'dir': tbb_local+'/tbb/'+self.architecture,
--                    'start': tbb_local+'/tbb/'+self.architecture+'/tor-browser_'+self.language+'/start-tor-browser',
-+                    'start': tbb_local+'/tbb/'+self.architecture+'/tor-browser_'+self.language+'/Browser/start-tor-browser',
-                     'versions': tbb_local+'/tbb/'+self.architecture+'/tor-browser_'+self.language+'/Browser/TorBrowser/Docs/sources/versions',
-                 },
-             }
-@@ -198,8 +198,7 @@ class Common:
-             'check_for_updates': False,
-             'modem_sound': False,
-             'last_update_check_timestamp': 0,
--            'mirror': self.default_mirror,
--            'accept_links': False
-+            'mirror': self.default_mirror
-         }
- 
-         if os.path.isfile(self.paths['settings_file']):
-diff --git a/torbrowser_launcher/launcher.py b/torbrowser_launcher/launcher.py
-index 00bc5a4..e9397e0 100644
---- a/torbrowser_launcher/launcher.py
-+++ b/torbrowser_launcher/launcher.py
-@@ -634,10 +634,7 @@ class Launcher:
-                 gtk.main_iteration_do(True)
- 
-         # run Tor Browser
--        if self.common.settings['accept_links']:
--            subprocess.call([self.common.paths['tbb']['start'], '-allow-remote'] + self.url_list)
--        else:
--            subprocess.call([self.common.paths['tbb']['start']])
-+        subprocess.call([self.common.paths['tbb']['start'], '--detach'])
- 
-         if run_next_task:
-             self.run_task()
-@@ -674,4 +671,3 @@ class Launcher:
-             delattr(self, 'current_download_url')
-         if reactor.running:
-             reactor.stop()
--
-diff --git a/torbrowser_launcher/settings.py b/torbrowser_launcher/settings.py
-index a29c41a..00e521d 100644
---- a/torbrowser_launcher/settings.py
-+++ b/torbrowser_launcher/settings.py
-@@ -95,15 +95,6 @@ class Settings:
-             self.update_checkbox.set_active(False)
-         self.update_checkbox.show()
- 
--        # accept links
--        self.accept_links = gtk.CheckButton(_("Allow opening links with Tor Browser\n(this doesn't work if you use Firefox)"))
--        self.settings_box.pack_start(self.accept_links, True, True, 0)
--        if self.common.settings['accept_links']:
--            self.accept_links.set_active(True)
--        else:
--            self.accept_links.set_active(False)
--        self.accept_links.show()
--
-         # modem sound
-         self.modem_checkbox = gtk.CheckButton(_("Play modem sound, because Tor is slow :]"))
-         self.settings_box.pack_start(self.modem_checkbox, True, True, 0)
-@@ -222,7 +213,6 @@ class Settings:
-         # checkbox options
-         self.common.settings['update_over_tor'] = self.tor_update_checkbox.get_active()
-         self.common.settings['check_for_updates'] = self.update_checkbox.get_active()
--        self.common.settings['accept_links'] = self.accept_links.get_active()
-         self.common.settings['modem_sound'] = self.modem_checkbox.get_active()
- 
-         # figure out the selected mirror
-@@ -237,5 +227,3 @@ class Settings:
- 
-     def destroy(self, widget, data=None):
-         gtk.main_quit()
--
--
--- 
-1.9.1
-
diff -Nru torbrowser-launcher-0.1.9/debian/patches/0002-execute-.-start-tor-browser.desktop-instead-of-.-Bro.patch torbrowser-launcher-0.2.2/debian/patches/0002-execute-.-start-tor-browser.desktop-instead-of-.-Bro.patch
--- torbrowser-launcher-0.1.9/debian/patches/0002-execute-.-start-tor-browser.desktop-instead-of-.-Bro.patch	2015-05-30 15:24:21.000000000 +0200
+++ torbrowser-launcher-0.2.2/debian/patches/0002-execute-.-start-tor-browser.desktop-instead-of-.-Bro.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,41 +0,0 @@
-From 5f833d73290bd3623bf22caffaed599381d454d9 Mon Sep 17 00:00:00 2001
-From: Micah Lee <micah@micahflee.com>
-Date: Mon, 11 May 2015 19:20:30 -0400
-Subject: [PATCH] execute ./start-tor-browser.desktop instead of
- ./Browser/start-tor-browser (#176)
-
----
- torbrowser_launcher/common.py   | 3 ++-
- torbrowser_launcher/launcher.py | 2 +-
- 2 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/torbrowser_launcher/common.py b/torbrowser_launcher/common.py
-index 93ed067..e5844b9 100644
---- a/torbrowser_launcher/common.py
-+++ b/torbrowser_launcher/common.py
-@@ -144,7 +144,8 @@ class Common:
-                 'update_check_file': tbb_cache+'/download/RecommendedTBBVersions',
-                 'tbb': {
-                     'dir': tbb_local+'/tbb/'+self.architecture,
--                    'start': tbb_local+'/tbb/'+self.architecture+'/tor-browser_'+self.language+'/Browser/start-tor-browser',
-+                    'dir_tbb': tbb_local+'/tbb/'+self.architecture+'/tor-browser_'+self.language,
-+                    'start': tbb_local+'/tbb/'+self.architecture+'/tor-browser_'+self.language+'/start-tor-browser.desktop',
-                     'versions': tbb_local+'/tbb/'+self.architecture+'/tor-browser_'+self.language+'/Browser/TorBrowser/Docs/sources/versions',
-                 },
-             }
-diff --git a/torbrowser_launcher/launcher.py b/torbrowser_launcher/launcher.py
-index d4211df..698949d 100644
---- a/torbrowser_launcher/launcher.py
-+++ b/torbrowser_launcher/launcher.py
-@@ -631,7 +631,7 @@ class Launcher:
-                 gtk.main_iteration_do(True)
- 
-         # run Tor Browser
--        subprocess.call([self.common.paths['tbb']['start'], '--detach'])
-+        subprocess.call([self.common.paths['tbb']['start']], cwd=self.common.paths['tbb']['dir_tbb'])
- 
-         if run_next_task:
-             self.run_task()
--- 
-1.9.1
-
diff -Nru torbrowser-launcher-0.1.9/debian/patches/0003-Stop-letting-Tor-Browser-act-as-a-default-browser.patch torbrowser-launcher-0.2.2/debian/patches/0003-Stop-letting-Tor-Browser-act-as-a-default-browser.patch
--- torbrowser-launcher-0.1.9/debian/patches/0003-Stop-letting-Tor-Browser-act-as-a-default-browser.patch	2015-05-30 15:51:45.000000000 +0200
+++ torbrowser-launcher-0.2.2/debian/patches/0003-Stop-letting-Tor-Browser-act-as-a-default-browser.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,21 +0,0 @@
-From f219f35225fd71dfcfdd5c93c7470cf705778e5b Mon Sep 17 00:00:00 2001
-From: Micah Lee <micah@micahflee.com>
-Date: Mon, 11 May 2015 15:27:32 -0700
-Subject: [PATCH] Stop letting Tor Browser act as a default browser
-
----
- share/applications/torbrowser.desktop | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/share/applications/torbrowser.desktop b/share/applications/torbrowser.desktop
-index 4e10d3f..2a16c38 100644
---- a/share/applications/torbrowser.desktop
-+++ b/share/applications/torbrowser.desktop
-@@ -6,4 +6,3 @@ Terminal=false
- Type=Application
- Icon=/usr/share/pixmaps/torbrowser80.xpm
- Categories=Network;WebBrowser;
--MimeType=x-scheme-handler/http;x-scheme-handler/https;
--- 
-1.9.1
-
diff -Nru torbrowser-launcher-0.1.9/debian/patches/Include-local-overrides-file-in-AppArmor-profiles.-C.patch torbrowser-launcher-0.2.2/debian/patches/Include-local-overrides-file-in-AppArmor-profiles.-C.patch
--- torbrowser-launcher-0.1.9/debian/patches/Include-local-overrides-file-in-AppArmor-profiles.-C.patch	1970-01-01 01:00:00.000000000 +0100
+++ torbrowser-launcher-0.2.2/debian/patches/Include-local-overrides-file-in-AppArmor-profiles.-C.patch	2015-11-19 17:07:53.000000000 +0100
@@ -0,0 +1,38 @@
+From: intrigeri <intrigeri@boum.org>
+Date: Wed, 12 Aug 2015 08:57:08 +0000
+Forwarded: not-needed
+Subject: Include local overrides file in AppArmor profiles. (Closes: #751451)
+
+---
+ apparmor/torbrowser.Browser.firefox   | 2 ++
+ apparmor/torbrowser.Tor.tor           | 2 ++
+ apparmor/usr.bin.torbrowser-launcher  | 2 ++
+ 4 files changed, 7 insertions(+)
+
+--- a/apparmor/torbrowser.Browser.firefox
++++ b/apparmor/torbrowser.Browser.firefox
+@@ -80,4 +80,6 @@
+   # Xfce4
+   /etc/xfce4/defaults.list r,
+   /usr/share/xfce4/applications/ r,
++
++  #include <local/torbrowser.Browser.firefox>
+ }
+--- a/apparmor/torbrowser.Tor.tor
++++ b/apparmor/torbrowser.Tor.tor
+@@ -21,4 +21,6 @@
+ 
+   # OnionShare compatibility
+   /tmp/onionshare/** rw,
++
++  #include <local/torbrowser.Tor.tor>
+ }
+--- a/apparmor/usr.bin.torbrowser-launcher
++++ b/apparmor/usr.bin.torbrowser-launcher
+@@ -49,4 +49,6 @@
+ 
+   # including abstractions/audio is not enough to play modem sound
+   /usr/bin/pulseaudio Pixr,
++
++  #include <local/usr.bin.torbrowser-launcher>
+ }
diff -Nru torbrowser-launcher-0.1.9/debian/patches/series torbrowser-launcher-0.2.2/debian/patches/series
--- torbrowser-launcher-0.1.9/debian/patches/series	1970-01-01 01:00:00.000000000 +0100
+++ torbrowser-launcher-0.2.2/debian/patches/series	2015-11-19 17:07:53.000000000 +0100
@@ -0,0 +1,2 @@
+Include-local-overrides-file-in-AppArmor-profiles.-C.patch
+Set-torbrowser.start-tor-browser-and-usr.bin.torbrow.patch
diff -Nru torbrowser-launcher-0.1.9/debian/patches/Set-torbrowser.start-tor-browser-and-usr.bin.torbrow.patch torbrowser-launcher-0.2.2/debian/patches/Set-torbrowser.start-tor-browser-and-usr.bin.torbrow.patch
--- torbrowser-launcher-0.1.9/debian/patches/Set-torbrowser.start-tor-browser-and-usr.bin.torbrow.patch	1970-01-01 01:00:00.000000000 +0100
+++ torbrowser-launcher-0.2.2/debian/patches/Set-torbrowser.start-tor-browser-and-usr.bin.torbrow.patch	2015-11-19 17:07:53.000000000 +0100
@@ -0,0 +1,26 @@
+From: intrigeri <intrigeri@boum.org>
+Date: Wed, 12 Aug 2015 09:21:28 +0000
+Forwarded: not-needed
+Bug: https://github.com/micahflee/torbrowser-launcher/issues/181
+Subject: Set usr.bin.torbrowser-launcher AppArmor profile to complain mode.
+
+They have been broken for three months now. Patches have been discussed on
+GitHub for a while, but no clean solution has been implemented yet,
+so for the time being, let's make torbrowser-launcher *work*.
+---
+ apparmor/usr.bin.torbrowser-launcher  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/apparmor/usr.bin.torbrowser-launcher b/apparmor/usr.bin.torbrowser-launcher
+index b8e081e..80aace4 100644
+--- a/apparmor/usr.bin.torbrowser-launcher
++++ b/apparmor/usr.bin.torbrowser-launcher
+@@ -1,7 +1,7 @@
+ # Last Modified: Thu Jan  2 15:12:38 2014
+ #include <tunables/global>
+ 
+-/usr/bin/torbrowser-launcher {
++/usr/bin/torbrowser-launcher flags=(complain) {
+   #include <abstractions/base>
+   #include <abstractions/nameservice>
+   #include <abstractions/python>
diff -Nru torbrowser-launcher-0.1.9/.gitignore torbrowser-launcher-0.2.2/.gitignore
--- torbrowser-launcher-0.1.9/.gitignore	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/.gitignore	2015-11-09 21:24:54.000000000 +0100
@@ -37,3 +37,5 @@
 # vim
 *.swp
 .*~
+
+torbrowser-launcher-*.tar.gz
diff -Nru torbrowser-launcher-0.1.9/README.md torbrowser-launcher-0.2.2/README.md
--- torbrowser-launcher-0.1.9/README.md	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/README.md	2015-11-13 18:49:50.000000000 +0100
@@ -1,29 +1,23 @@
 # Tor Browser Launcher
 
-Tor Browser Launcher is intended to make the Tor Browser Bundle (TBB) easier to maintain and use for GNU/Linux users. You install ```torbrowser-launcher``` from your distribution's package manager and it handles everything else, including:
+Tor Browser Launcher is intended to make Tor Browser easier to install and use for GNU/Linux users. You install ```torbrowser-launcher``` from your distribution's package manager and it handles everything else:
 
-* Downloading the most recent version of TBB for you, in your language and for your architecture
-* Automatically updating (while preserving your bookmarks and preferences)
-* Verifying the TBB's [GnuPG signature](http://www.gnupg.org/gph/en/manual/x135.html)
+* Downloads and installs the most recent version of Tor Browser in your language and for your computer's architecture, or launches Tor Browser if it's already installed (Tor Browser will automatically update itself)
+* Certificate pins to https://www.torproject.org, so it doesn't rely on certificate authorities
+* Verifies Tor Browser's [signature](https://www.torproject.org/docs/verifying-signatures.html.en) for you, to ensure the version you downloaded was cryptographically signed by Tor developers and was not tampered with
+* Adds "Tor Browser" and "Tor Browser Launcher Settings" application launcher to your desktop environment's menu
 * Includes AppArmor profiles to make a Tor Browser compromise not as bad
-* Adding a "Tor Browser" application launcher to your desktop environment's menu, and letting you set Tor Browser as your default browser
-* Optionally playing a modem sound when you open Tor Browser (because Tor is so slow)
+* Optionally plays a modem sound when you open Tor Browser (because Tor is so slow)
 
-Tor Browser Launcher is included in Ubuntu 14.10+, Debian 8+, and Fedora 20+. To install it in any other distribution, see the [build instructions](/BUILD.md).
+Tor Browser Launcher is included in Ubuntu, Debian, and Fedora. To install it in any other distribution, see the [build instructions](/BUILD.md).
 
 You might want to check out the [security design doc](/security_design.md).
 
 ![Tor Browser Launcher screenshot](/screenshot.png)
 
-## Using Tor Browser as your default browser, and Firefox
+# Installing in Ubuntu
 
-Tor Browser Launcher allows you to set Tor Browser as your default web browser. Unfortunately, there's a gnarly issue that prevents this from working if Firefox is open in the background. If Tor Browser is set as your default browser and Firefox is open in the background, links will get opened in Firefox. Likewise, if Firefox is your default browser and Tor Browser is open in the background, links will get opened in Tor Browser. See more information [here](https://github.com/micahflee/torbrowser-launcher/issues/157).
-
-You can only use Tor Browser as your default browser if you don't use Firefox at the same time. Other browser (such as Iceweasel, Chromium, or Chrome) will work fine. You must check "Allow opening links with Tor Browser" in the settings to enable it.
-
-## Installing in Ubuntu 14.04 and earlier
-
-I've created a PPA where I'm maintaining torbrowser-launcher binaries. You can install in an Ubuntu-based distribution like this:
+If you want to always have the latest version of the `torbrowser-launcher` package before your distribution gets it, you can use my PPA:
 
 ```sh
 sudo add-apt-repository ppa:micahflee/ppa
Binärdateien /tmp/Ybz5kEf442/torbrowser-launcher-0.1.9/screenshot.png and /tmp/_z4TRPinPs/torbrowser-launcher-0.2.2/screenshot.png sind verschieden.
diff -Nru torbrowser-launcher-0.1.9/setup.py torbrowser-launcher-0.2.2/setup.py
--- torbrowser-launcher-0.1.9/setup.py	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/setup.py	2015-11-13 18:38:22.000000000 +0100
@@ -54,7 +54,6 @@
         # we're not in a virtualenv, so we can probably write to /etc
         datafiles += [('/etc/apparmor.d/', [
             'apparmor/torbrowser.Browser.firefox',
-            'apparmor/torbrowser.start-tor-browser',
             'apparmor/torbrowser.Tor.tor',
             'apparmor/usr.bin.torbrowser-launcher'])]
 
diff -Nru torbrowser-launcher-0.1.9/share/applications/torbrowser.desktop torbrowser-launcher-0.2.2/share/applications/torbrowser.desktop
--- torbrowser-launcher-0.1.9/share/applications/torbrowser.desktop	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/share/applications/torbrowser.desktop	2015-11-13 18:49:50.000000000 +0100
@@ -1,9 +1,9 @@
 [Desktop Entry]
 Name=Tor Browser
-Comment=Launch the Tor Browser Bundle
-Exec=/usr/bin/torbrowser-launcher %u
+GenericName=Tor
+Comment=Launch Tor Browser
+Exec=torbrowser-launcher %u
 Terminal=false
 Type=Application
-Icon=/usr/share/pixmaps/torbrowser80.xpm
+Icon=torbrowser80.xpm
 Categories=Network;WebBrowser;
-MimeType=x-scheme-handler/http;x-scheme-handler/https;
diff -Nru torbrowser-launcher-0.1.9/share/applications/torbrowser-settings.desktop torbrowser-launcher-0.2.2/share/applications/torbrowser-settings.desktop
--- torbrowser-launcher-0.1.9/share/applications/torbrowser-settings.desktop	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/share/applications/torbrowser-settings.desktop	2015-11-13 18:49:50.000000000 +0100
@@ -1,8 +1,9 @@
 [Desktop Entry]
-Name=Tor Browser Settings
+Name=Tor Browser Launcher Settings
+GenericName=Tor
 Comment=Tor Browser Launcher Settings
-Exec=/usr/bin/torbrowser-launcher --settings
+Exec=torbrowser-launcher --settings
 Terminal=false
 Type=Application
-Icon=/usr/share/pixmaps/torbrowser80.xpm
+Icon=torbrowser80.xpm
 Categories=Network;WebBrowser;
diff -Nru torbrowser-launcher-0.1.9/share/torbrowser-launcher/erinn.asc torbrowser-launcher-0.2.2/share/torbrowser-launcher/erinn.asc
--- torbrowser-launcher-0.1.9/share/torbrowser-launcher/erinn.asc	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/share/torbrowser-launcher/erinn.asc	1970-01-01 01:00:00.000000000 +0100
@@ -1,51 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-mQELBD+ORtUBCADyLDDk62raU6u9CPlFo6okLoKqh10ssX4IZJS/wVMFMq8akPUw
-b+Jse8xN64YYwKkQS9ppDGWgVy9OCpmhzwpzOnVnNAOjnck2zAUpeyRIEz9NEIag
-8uJBdhdkTo0ITk+42i8DQce8rXN2VuHsrwTX4j4cSGhQc4+9EIUwPf98SS/Rfb49
-yj1XwwVU2zTUgEXuSxLc2DaFeZJpAcAUt8L/cmuHA0CudJHEf46FddFSFC0PVRsm
-J612TO/31scK7vDLTz2Sn9DuaXu/MIIt8LrcOCuDrTOYmqIFkmVrBV6ho1pY+fsb
-BrdT4ffYBdq1zRsy2xf0cq/JPHP5KSHPvvmRAAYptCJFcmlubiBDbGFyayA8ZXJp
-bm5AdG9ycHJvamVjdC5vcmc+iQE2BBMBAgAgBQJLUQLEAhsDBgsJCAcDAgQVAggD
-BBYCAwECHgECF4AACgkQQW8GEGP+5lmP8gf+Lh+qsMfQR0l5PhfBmwB5T3NFu+vo
-M6gMu8LBbYhgpnlitp1wcdzjQr/5A3FfgALY7lfWIcsJxwxWbZonCIfneV2gVNqT
-YCD7//PhDQpNAthGBVzWUE0OiJ9bM2UuHNurKJjXqKZ4X9bCxWJFeS9vjJbFp/ng
-CEyDlRPMozvSM0yCZymvkCg8BTJDT/kvB2FJwsKQ2mrVDpnK+fC0c8HwPycD9oYy
-amqgTmlM6d0ZedwJrYSl2J0H9fDRvwq1UTjWeEf0lkn4hfOwatQo9GrCWa00EIVp
-WwC4nznsLFgwhaSheqnGPLYzAVbIMBsD5y7fvz0ibRMu0XlGMdC5CjEFwbQeRXJp
-bm4gQ2xhcmsgPGVyaW5uQGRlYmlhbi5vcmc+iQE2BBMBAgAgBQJGeDDLAhsDBgsJ
-CAcDAgQVAggDBBYCAwECHgECF4AACgkQQW8GEGP+5llmjQf+Ka4I+q0DxigwAH+0
-X+Q1juL+A2FoEcZOqyARKRfNH2avQ6r1vwZC3MZDyVBpzgYW6D2Py7H7PBspwdOi
-3ZkqG0JkOkMl1ipa35cuC4E1tR4AKJXMlrlACVk+587h14ED9LRTeIYLVmYeimTX
-X9PPqMPaN8MTdJoI+EW/e5JMltrhChct0ojDvLCOLra+k0mf7h+/QyEXFb6asouj
-66fKjDEzEYFjngJLPSPNI0/I7BJpwlxq3tkSowHbxaioa9afwnrs99c/EILcLWnP
-XwQjMQ0JW1yPyFBPE/J9yfM1gVE2SRfdJc//hFDRMu5KIaaUa43ic41C037R8eRx
-5Omx47QiRXJpbm4gQ2xhcmsgPGVyaW5uY0BiZWxsc291dGgubmV0PokBNQQwAQIA
-HwUCRngwrBgdIGVtYWlsIG5vIGxvbmdlciBleGlzdHMACgkQQW8GEGP+5lnoIAgA
-okFcw6KOUG531XVSoRYln6Z0uidcygzyNRCYqYbIRrifd099PJNVTGUQzGs4vEp4
-0iad/FOz4vYvWgbfo6IQSyh7vsIHm/3sVuz+4fnPTSkHglbv5kocPG8K09weHIgs
-PMa1hLpcwm4npzIsM3fB8b7DYCj9izxUl88cxWEOO9MjYsX+MgDscf278Pl6LxN6
-ljiFnxnMjDKRq+SrqYCewWdr0m4x5EOPaawLXkiEloUEG4MqVdH2JGgwMprp8CPs
-zkHOpHceBnSjjOPWH3J0QmlOhVX/57HL81vBwatGLtwgCdyQtMz7Z7jJGOCGKrTF
-JyolhX3sqBTYSHdWFRW+jrQkRXJpbm4gQ2xhcmsgPGVyaW5uQGRvdWJsZS1oZWxp
-eC5vcmc+iQE8BBMBAgAeBQI/jkbVAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAABIJ
-EEFvBhBj/uZZB2VHUEcAAQGFDQgAjifluZyJa12v3/QXY5+ExSSLNFgJFT1XKLfn
-so5l8QSxIqCx8kCCr+LGRF5XXvITuj3JlA30Iu+czl7BPqPoT9Xw1iErRHd6U8J1
-CC5jPvA9ac510bLpGtHu5liv9oUp8rC+Y0t4MZ0mnmo4DqN8T+vbg8ybP2Yq5jBE
-WfMuui74y2KbRf3zhmmnhiYOEXJHuG3IrkyhgrgEAIiDHQ3ysTRITHkH/zCyxHuj
-hGXh8TfiuTTWwnS439Js+4ONLXQZRddFkjybzD8M1Dpe5TRojPhYGcXXFY3d696M
-d6EQXIST26xswIg4gTHHi1RqBq7YSYuYs2AuwGgIEbJ+Nx6Y4LkBCwQ/jmKpAQgA
-sbXi97krh18U24/ersrhxjvP5bmqipLLkjlPfGHBN7Q7T+K+SOGi+RY2IEeKbnGj
-5F8fXWwu9LTLkJQgIUyInstgCs+RPKIW0ihuFsXfSrKkcQAyrUiB/O5AkHIn2Su6
-sNrvH2V6B0+gHnCfO7stVHf5e4aAFGthT/5HAeRet2L9Yhmyo3Fh3KM51O7ij48V
-0gbreeK7jWfG+paGsWPk3off+eKN8c7t7i7tH/z9d0Ocwk1TC6E79v6N3U2+U6ul
-UycwXefrzPzVZxkY3vt7LRY3jlS272H8RhuhUbdjd/WNI0g2NJjxOxmrWXCEv7oa
-eaxUNcKi8DJVthwL9ytBLQAGKYkBJwQYAQIACQUCP45iqQIbDAASCRBBbwYQY/7m
-WQdlR1BHAAEBXAgIANeEId88Uya/XDCs7p9jvh1Tl11flW4Q/7GzP0tPvGb5PWMO
-ifLkfqLwun2SzBEQdcNDp/A5VSWoR3/bSGDOfi2CG9QHzj2XT2ViU210FZ+ds7f6
-OHiKkiDwl/SkiwFwnpEFFMdkVErmt2qZTj9UyCCnXFs/61ajNFDCAAeU2BF/dNqS
-sYbe0UHcVjU4+oC8drLKxaxb+GBb2Pe6OZEIBIufYX//jS2mYIRWr632QxDTg4vo
-GsAWjPPIkZpcbmTkTFrl0H++ww8OhPAMwd6ukwZdWTJTITICvixmof3ai0jvuinR
-SVshGh6tMjDpMToMoiS3c7S1AMFxLyiAg8OXj6o=
-=ZdeU
------END PGP PUBLIC KEY BLOCK-----
diff -Nru torbrowser-launcher-0.1.9/share/torbrowser-launcher/version torbrowser-launcher-0.2.2/share/torbrowser-launcher/version
--- torbrowser-launcher-0.1.9/share/torbrowser-launcher/version	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/share/torbrowser-launcher/version	2015-11-13 18:49:50.000000000 +0100
@@ -1 +1 @@
-0.1.9
+0.2.2
diff -Nru torbrowser-launcher-0.1.9/stdeb.cfg torbrowser-launcher-0.2.2/stdeb.cfg
--- torbrowser-launcher-0.1.9/stdeb.cfg	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/stdeb.cfg	2015-11-13 18:49:50.000000000 +0100
@@ -1,5 +1,6 @@
 [DEFAULT]
 Package: torbrowser-launcher
-Depends: python-gtk2, python-psutil, python-twisted, python-lzma, gnupg, wmctrl, xz-utils, python-txsocksx, tor
-Recommends: python-pygame
+Depends: python-gtk2, python-psutil, python-twisted, python-lzma, gnupg, xz-utils
+Build-Depends: dh-python
+Recommends: python-pygame, python-txsocksx, tor
 Suite: trusty
diff -Nru torbrowser-launcher-0.1.9/torbrowser_launcher/common.py torbrowser-launcher-0.2.2/torbrowser_launcher/common.py
--- torbrowser-launcher-0.1.9/torbrowser_launcher/common.py	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/torbrowser_launcher/common.py	2015-11-13 18:49:50.000000000 +0100
@@ -26,7 +26,7 @@
 OTHER DEALINGS IN THE SOFTWARE.
 """
 
-import os, sys, platform, subprocess, locale, pickle, psutil
+import os, sys, platform, subprocess, locale, pickle, json, psutil
 
 import pygtk
 pygtk.require('2.0')
@@ -43,7 +43,6 @@
 class Common:
 
     def __init__(self, tbl_version):
-        print _('Initializing Tor Browser Launcher')
         self.tbl_version = tbl_version
 
         # initialize the app
@@ -119,10 +118,9 @@
             self.paths['tarball_filename'] = tarball_filename
 
             # sig
-            self.paths['sha256_file'] = tbb_cache+'/download/sha256sums.txt'
-            self.paths['sha256_sig_file'] = tbb_cache+'/download/sha256sums.txt.asc'
-            self.paths['sha256_url'] = '{0}torbrowser/'+tbb_version+'/sha256sums.txt'
-            self.paths['sha256_sig_url'] = '{0}torbrowser/'+tbb_version+'/sha256sums.txt.asc'
+            self.paths['sig_url'] = '{0}torbrowser/'+tbb_version+'/'+tarball_filename+'.asc'
+            self.paths['sig_file'] = tbb_cache+'/download/'+tarball_filename+'.asc'
+            self.paths['sig_filename'] = tarball_filename+'.asc'
         else:
             self.paths = {
                 'dirs': {
@@ -134,18 +132,20 @@
                 'tbl_bin': sys.argv[0],
                 'icon_file': os.path.join(os.path.dirname(SHARE), 'pixmaps/torbrowser80.xpm'),
                 'torproject_pem': os.path.join(SHARE, 'torproject.pem'),
-                'signing_keys': [os.path.join(SHARE, 'erinn.asc'), os.path.join(SHARE, 'tor-browser-developers.asc')],
+                'signing_keys': [os.path.join(SHARE, 'tor-browser-developers.asc')],
                 'mirrors_txt': [os.path.join(SHARE, 'mirrors.txt'),
                                 tbb_config+'/mirrors.txt'],
                 'modem_sound': os.path.join(SHARE, 'modem.ogg'),
                 'download_dir': tbb_cache+'/download',
                 'gnupg_homedir': tbb_local+'/gnupg_homedir',
-                'settings_file': tbb_config+'/settings',
-                'update_check_url': 'https://www.torproject.org/projects/torbrowser/RecommendedTBBVersions',
-                'update_check_file': tbb_cache+'/download/RecommendedTBBVersions',
+                'settings_file': tbb_config+'/settings.json',
+                'settings_file_pickle': tbb_config+'/settings',
+                'version_check_url': 'https://dist.torproject.org/torbrowser/update_2/release/Linux_x86_64-gcc3/x/en-US',
+                'version_check_file': tbb_cache+'/download/release.xml',
                 'tbb': {
                     'dir': tbb_local+'/tbb/'+self.architecture,
-                    'start': tbb_local+'/tbb/'+self.architecture+'/tor-browser_'+self.language+'/start-tor-browser',
+                    'dir_tbb': tbb_local+'/tbb/'+self.architecture+'/tor-browser_'+self.language,
+                    'start': tbb_local+'/tbb/'+self.architecture+'/tor-browser_'+self.language+'/start-tor-browser.desktop',
                     'versions': tbb_local+'/tbb/'+self.architecture+'/tor-browser_'+self.language+'/Browser/TorBrowser/Docs/sources/versions',
                 },
             }
@@ -174,9 +174,8 @@
 
     # import gpg keys
     def import_keys(self):
-        print _('Importing keys')
         for key in self.paths['signing_keys']:
-            subprocess.Popen(['/usr/bin/gpg', '--homedir', self.paths['gnupg_homedir'], '--import', key]).wait()
+            subprocess.Popen(['/usr/bin/gpg', '--quiet', '--homedir', self.paths['gnupg_homedir'], '--import', key]).wait()
 
     # load mirrors
     def load_mirrors(self):
@@ -192,33 +191,18 @@
     def load_settings(self):
         default_settings = {
             'tbl_version': self.tbl_version,
-            'installed_version': False,
-            'latest_version': '0',
-            'update_over_tor': True,
-            'check_for_updates': False,
+            'installed': False,
+            'download_over_tor': False,
             'modem_sound': False,
-            'last_update_check_timestamp': 0,
-            'mirror': self.default_mirror,
-            'accept_links': False
+            'mirror': self.default_mirror
         }
 
         if os.path.isfile(self.paths['settings_file']):
-            settings = pickle.load(open(self.paths['settings_file']))
+            settings = json.load(open(self.paths['settings_file']))
             resave = False
 
-            # settings migrations
-            if settings['tbl_version'] <= '0.1.0':
-                print '0.1.0 migration'
-                settings['installed_version'] = settings['installed_version']['stable']
-                settings['latest_version'] = settings['latest_version']['stable']
-                resave = True
-
-                # make new tbb folder
-                self.mkdir(self.paths['tbb']['dir'])
-                old_tbb_dir = self.paths['old_data_dir']+'/tbb/stable/'+self.architecture+'/tor-browser_'+self.language
-                new_tbb_dir = self.paths['tbb']['dir']+'/tor-browser_'+self.language
-                if os.path.isdir(old_tbb_dir):
-                    os.rename(old_tbb_dir, new_tbb_dir)
+            # detect installed
+            settings['installed'] = os.path.isfile(self.paths['tbb']['start'])
 
             # make sure settings file is up-to-date
             for setting in default_settings:
@@ -235,53 +219,19 @@
             if resave:
                 self.save_settings()
 
+        # if settings file is still using old pickle format, convert to json
+        elif os.path.isfile(self.paths['settings_file_pickle']):
+            self.settings = pickle.load(open(self.paths['settings_file_pickle']))
+            self.save_settings()
+            os.remove(self.paths['settings_file_pickle'])
+            self.load_settings()
+
         else:
             self.settings = default_settings
             self.save_settings()
 
     # save settings
     def save_settings(self):
-        pickle.dump(self.settings, open(self.paths['settings_file'], 'w'))
+        json.dump(self.settings, open(self.paths['settings_file'], 'w'))
         return True
 
-    # get the process id of a program
-    @staticmethod
-    def get_pid(bin_path, python=False):
-        pid = None
-
-        for p in psutil.process_iter():
-            try:
-                if p.pid != os.getpid():
-                    exe = None
-                    if python:
-                        if len(p.cmdline) > 1:
-                            if 'python' in p.cmdline[0]:
-                                exe = p.cmdline[1]
-                    else:
-                        if len(p.cmdline) > 0:
-                            exe = p.cmdline[0]
-
-                    if exe == bin_path:
-                        pid = p.pid
-
-            except:
-                pass
-
-        return pid
-
-    # bring program's x window to front
-    @staticmethod
-    def bring_window_to_front(pid):
-        # figure out the window id
-        win_id = None
-        p = subprocess.Popen(['wmctrl', '-l', '-p'], stdout=subprocess.PIPE)
-        for line in p.stdout.readlines():
-            line_split = line.split()
-            cur_win_id = line_split[0]
-            cur_win_pid = int(line_split[2])
-            if cur_win_pid == pid:
-                win_id = cur_win_id
-
-        # bring to front
-        if win_id:
-            subprocess.call(['wmctrl', '-i', '-a', win_id])
diff -Nru torbrowser-launcher-0.1.9/torbrowser_launcher/__init__.py torbrowser-launcher-0.2.2/torbrowser_launcher/__init__.py
--- torbrowser-launcher-0.1.9/torbrowser_launcher/__init__.py	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/torbrowser_launcher/__init__.py	2015-11-13 18:49:50.000000000 +0100
@@ -53,13 +53,6 @@
 
     common = Common(tor_browser_launcher_version)
 
-    # is torbrowser-launcher already running?
-    tbl_pid = common.get_pid(common.paths['tbl_bin'], True)
-    if tbl_pid:
-        print _('Tor Browser Launcher is already running (pid {0}), bringing to front').format(tbl_pid)
-        common.bring_window_to_front(tbl_pid)
-        sys.exit()
-
     if settings:
         # settings mode
         app = Settings(common)
diff -Nru torbrowser-launcher-0.1.9/torbrowser_launcher/launcher.py torbrowser-launcher-0.2.2/torbrowser_launcher/launcher.py
--- torbrowser-launcher-0.1.9/torbrowser_launcher/launcher.py	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/torbrowser_launcher/launcher.py	2015-11-13 18:49:50.000000000 +0100
@@ -26,13 +26,18 @@
 OTHER DEALINGS IN THE SOFTWARE.
 """
 
-import os, subprocess, time, json, tarfile, hashlib, lzma, threading, re
+import os, subprocess, time, json, tarfile, hashlib, lzma, threading, re, unicodedata
 from twisted.internet import reactor
 from twisted.web.client import Agent, RedirectAgent, ResponseDone, ResponseFailed
 from twisted.web.http_headers import Headers
+from twisted.web.iweb import IPolicyForHTTPS
 from twisted.internet.protocol import Protocol
-from twisted.internet.ssl import ClientContextFactory
+from twisted.internet.ssl import CertificateOptions
+from twisted.internet._sslverify import ClientTLSOptions
 from twisted.internet.error import DNSLookupError
+from zope.interface import implementer
+
+import xml.etree.ElementTree as ET
 
 import OpenSSL
 
@@ -49,12 +54,13 @@
 class DownloadErrorException(Exception):
     pass
 
-class VerifyTorProjectCert(ClientContextFactory):
+class TorProjectCertificateOptions(CertificateOptions):
     def __init__(self, torproject_pem):
+        CertificateOptions.__init__(self)
         self.torproject_ca = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, open(torproject_pem, 'r').read())
 
     def getContext(self, host, port):
-        ctx = ClientContextFactory.getContext(self)
+        ctx = CertificateOptions.getContext(self)
         ctx.set_verify_depth(0)
         ctx.set_verify(OpenSSL.SSL.VERIFY_PEER | OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT, self.verifyHostname)
         return ctx
@@ -62,60 +68,55 @@
     def verifyHostname(self, connection, cert, errno, depth, preverifyOK):
         return cert.digest('sha256') == self.torproject_ca.digest('sha256')
 
+@implementer(IPolicyForHTTPS)
+class TorProjectPolicyForHTTPS:
+    def __init__(self, torproject_pem):
+        self.torproject_pem = torproject_pem
+
+    def creatorForNetloc(self, hostname, port):
+        certificateOptions = TorProjectCertificateOptions(self.torproject_pem)
+        return ClientTLSOptions(hostname.decode('utf-8'),
+                                certificateOptions.getContext(hostname, port))
+
 class Launcher:
     def __init__(self, common, url_list):
-        print _('Starting launcher dialog')
         self.common = common
         self.url_list = url_list
 
         # init launcher
         self.set_gui(None, '', [])
         self.launch_gui = True
-        print "LATEST VERSION", self.common.settings['latest_version']
-        self.common.build_paths(self.common.settings['latest_version'])
+        
+        # if Tor Browser is not installed, detect latest version, download, and install
+        if not self.common.settings['installed']:
+            # if downloading over Tor, include txsocksx
+            if self.common.settings['download_over_tor']:
+                try:
+                    import txsocksx
+                    print _('Downloading over Tor')
+                except ImportError:
+                    md = gtk.MessageDialog(None, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, gtk.BUTTONS_CLOSE, _("The python-txsocksx package is missing, downloads will not happen over tor"))
+                    md.set_position(gtk.WIN_POS_CENTER)
+                    md.run()
+                    md.destroy()
+                    self.common.settings['download_over_tor'] = False
+                    self.common.save_settings()
 
-        if self.common.settings['update_over_tor']:
-            try:
-                import txsocksx
-            except ImportError:
-                md = gtk.MessageDialog(None, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, gtk.BUTTONS_CLOSE, _("The python-txsocksx package is missing, downloads will not happen over tor"))
-                md.set_position(gtk.WIN_POS_CENTER)
-                md.run()
-                md.destroy()
-                self.common.settings['update_over_tor'] = False
-                self.common.save_settings()
-
-        # is firefox already running?
-        if self.common.settings['installed_version']:
-            firefox_pid = self.common.get_pid('./Browser/firefox')
-            if firefox_pid:
-                print _('Firefox is open, bringing to focus')
-                # bring firefox to front
-                self.common.bring_window_to_front(firefox_pid)
-                return
-
-        # check for updates?
-        check_for_updates = False
-        if self.common.settings['check_for_updates']:
-            check_for_updates = True
-
-        if not check_for_updates:
-            # how long was it since the last update check?
-            # 86400 seconds = 24 hours
-            current_timestamp = int(time.time())
-            if current_timestamp - self.common.settings['last_update_check_timestamp'] >= 86400:
-                check_for_updates = True
-
-        if check_for_updates:
-            # check for update
-            print 'Checking for update'
-            self.set_gui('task', _("Checking for Tor Browser update."),
-                         ['download_update_check',
-                          'attempt_update'])
+            # download and install
+            print _("Downloading and installing Tor Browser for the first time.")
+            self.set_gui('task', _("Downloading and installing Tor Browser for the first time."),
+                         ['download_version_check',
+                          'set_version',
+                          'download_sig',
+                          'download_tarball',
+                          'verify',
+                          'extract',
+                          'run'])
+        
         else:
-            # no need to check for update
-            print _('Checked for update within 24 hours, skipping')
-            self.start_launcher()
+            # Tor Browser is already installed, so run
+            self.run(False)
+            self.launch_gui = False
 
         if self.launch_gui:
             # set up the window
@@ -130,52 +131,6 @@
             # build the rest of the UI
             self.build_ui()
 
-    # download or run TBB
-    def start_launcher(self):
-        # is TBB already installed?
-        latest_version = self.common.settings['latest_version']
-        installed_version = self.common.settings['installed_version']
-
-        # verify installed version for newer versions of TBB (#58)
-        if installed_version >= '3.0':
-            versions_filename = self.common.paths['tbb']['versions']
-            if os.path.exists(versions_filename):
-                for line in open(versions_filename):
-                    if 'TORBROWSER_VERSION' in line:
-                        installed_version = line.lstrip('TORBROWSER_VERSION=').strip()
-
-        start = self.common.paths['tbb']['start']
-        if os.path.isfile(start) and os.access(start, os.X_OK):
-            if installed_version == latest_version:
-                print _('Latest version of TBB is installed, launching')
-                # current version of tbb is installed, launch it
-                self.run(False)
-                self.launch_gui = False
-            elif installed_version < latest_version:
-                print _('TBB is out of date, attempting to upgrade to {0}'.format(latest_version))
-                # there is a tbb upgrade available
-                self.set_gui('task', _("Your Tor Browser is out of date. Upgrading from {0} to {1}.".format(installed_version, latest_version)),
-                             ['download_sha256',
-                              'download_sha256_sig',
-                              'download_tarball',
-                              'verify',
-                              'extract',
-                              'run'])
-            else:
-                # for some reason the installed tbb is newer than the current version?
-                self.set_gui('error', _("Something is wrong. The version of Tor Browser Bundle you have installed is newer than the current version?"), [])
-
-        # not installed
-        else:
-            print _('TBB is not installed, attempting to install {0}'.format(latest_version))
-            self.set_gui('task', _("Downloading and installing Tor Browser for the first time."),
-                         ['download_sha256',
-                          'download_sha256_sig',
-                          'download_tarball',
-                          'verify',
-                          'extract',
-                          'run'])
-
     # there are different GUIs that might appear, this sets which one we want
     def set_gui(self, gui, message, tasks, autostart=True):
         self.gui = gui
@@ -306,22 +261,24 @@
         # get ready for the next task
         self.gui_task_i += 1
 
-        print _('Running task: {0}'.format(task))
-        if task == 'download_update_check':
-            print _('Downloading'), self.common.paths['update_check_url']
-            self.download('update check', self.common.paths['update_check_url'], self.common.paths['update_check_file'])
-
-        if task == 'attempt_update':
-            print _('Checking to see if update is needed')
-            self.attempt_update()
-
-        elif task == 'download_sha256':
-            print _('Downloading'), self.common.paths['sha256_url'].format(self.common.settings['mirror'])
-            self.download('signature', self.common.paths['sha256_url'], self.common.paths['sha256_file'])
-
-        elif task == 'download_sha256_sig':
-            print _('Downloading'), self.common.paths['sha256_sig_url'].format(self.common.settings['mirror'])
-            self.download('signature', self.common.paths['sha256_sig_url'], self.common.paths['sha256_sig_file'])
+        if task == 'download_version_check':
+            print _('Downloading'), self.common.paths['version_check_url']
+            self.download('version check', self.common.paths['version_check_url'], self.common.paths['version_check_file'])
+        
+        if task == 'set_version':
+            version = self.get_stable_version() 
+            if version:
+                self.common.build_paths(self.get_stable_version())
+                print _('Latest version: {}').format(version)
+                self.run_task()
+            else:
+                self.set_gui('error', _("Error detecting Tor Browser version."), [], False)
+                self.clear_ui()
+                self.build_ui()
+
+        elif task == 'download_sig':
+            print _('Downloading'), self.common.paths['sig_url'].format(self.common.settings['mirror'])
+            self.download('signature', self.common.paths['sig_url'], self.common.paths['sig_file'])
 
         elif task == 'download_tarball':
             print _('Downloading'), self.common.paths['tarball_url'].format(self.common.settings['mirror'])
@@ -374,7 +331,6 @@
                 self.progress.set_text(_('Downloaded')+(' %2.1f%% (%2.1f %s)' % ((percent * 100.0), amount, units)))
 
             def connectionLost(self, reason):
-                print _('Finished receiving body:'), reason.getErrorMessage()
                 self.all_done(reason)
 
         if hasattr(self, 'current_download_url'):
@@ -424,7 +380,7 @@
             for reason in f.value.reasons:
                 if isinstance(reason.value, OpenSSL.SSL.Error):
                     # TODO: add the ability to report attack by posting bug to trac.torproject.org
-                    if not self.common.settings['update_over_tor']:
+                    if not self.common.settings['download_over_tor']:
                         self.set_gui('error_try_tor', _('The SSL certificate served by https://www.torproject.org is invalid! You may be under attack. Try the download again using Tor?'), [], False)
                     else:
                         self.set_gui('error', _('The SSL certificate served by https://www.torproject.org is invalid! You may be under attack.'), [], False)
@@ -439,15 +395,19 @@
         self.current_download_path = path
         self.current_download_url = url
 
-        # initialize the progress bar
         mirror_url = url.format(self.common.settings['mirror'])
+
+        # convert mirror_url from unicode to string, if needed (#205)
+        if isinstance(mirror_url, unicode):
+            mirror_url = unicodedata.normalize('NFKD', mirror_url).encode('ascii','ignore')
+
+        # initialize the progress bar
         self.progressbar.set_fraction(0)
         self.progressbar.set_text(_('Downloading {0}').format(name))
         self.progressbar.show()
         self.refresh_gtk()
 
-        if self.common.settings['update_over_tor']:
-            print _('Updating over Tor')
+        if self.common.settings['download_over_tor']:
             from twisted.internet.endpoints import TCP4ClientEndpoint
             from txsocksx.http import SOCKS5Agent
 
@@ -455,12 +415,12 @@
 
             # default mirror gets certificate pinning, only for requests that use the mirror
             if self.common.settings['mirror'] == self.common.default_mirror and '{0}' in url:
-                agent = SOCKS5Agent(reactor, VerifyTorProjectCert(self.common.paths['torproject_pem']), proxyEndpoint=torEndpoint)
+                agent = SOCKS5Agent(reactor, TorProjectPolicyForHTTPS(self.common.paths['torproject_pem']), proxyEndpoint=torEndpoint)
             else:
                 agent = SOCKS5Agent(reactor, proxyEndpoint=torEndpoint)
         else:
             if self.common.settings['mirror'] == self.common.default_mirror and '{0}' in url:
-                agent = Agent(reactor, VerifyTorProjectCert(self.common.paths['torproject_pem']))
+                agent = Agent(reactor, TorProjectPolicyForHTTPS(self.common.paths['torproject_pem']))
             else:
                 agent = Agent(reactor)
 
@@ -486,63 +446,18 @@
         self.destroy(False)
 
     def try_tor(self, widget, data=None):
-        # set update_over_tor to true and relaunch TBL
-        self.common.settings['update_over_tor'] = True
+        # set download_over_tor to true and relaunch TBL
+        self.common.settings['download_over_tor'] = True
         self.common.save_settings()
         subprocess.Popen([self.common.paths['tbl_bin']])
         self.destroy(False)
 
-    def attempt_update(self):
-        # load the update check file
-        try:
-            versions = json.load(open(self.common.paths['update_check_file']))
-            latest = None
-
-            # filter linux versions
-            valid = []
-            for version in versions:
-                if '-Linux' in version:
-                    valid.append(str(version))
-            valid.sort()
-            if len(valid):
-                versions = valid
-
-            if len(versions) == 1:
-                latest = versions.pop()
-            else:
-                stable = []
-                # remove alphas/betas
-                for version in versions:
-                    if not re.search(r'a\d-Linux', version) and not re.search(r'b\d-Linux', version):
-                        stable.append(version)
-                if len(stable):
-                    latest = stable.pop()
-                else:
-                    latest = versions.pop()
-
-            if latest:
-                latest = str(latest)
-                if latest.endswith('-Linux'):
-                    latest = latest.rstrip('-Linux')
-
-                self.common.settings['latest_version'] = latest
-                self.common.settings['last_update_check_timestamp'] = int(time.time())
-                self.common.settings['check_for_updates'] = False
-                self.common.save_settings()
-                self.common.build_paths(self.common.settings['latest_version'])
-                self.start_launcher()
-
-            else:
-                # failed to find the latest version
-                self.set_gui('error', _("Error checking for updates."), [], False)
-
-        except:
-            # not a valid JSON object
-            self.set_gui('error', _("Error checking for updates."), [], False)
-
-        # now start over
-        self.clear_ui()
-        self.build_ui()
+    def get_stable_version(self):
+        tree = ET.parse(self.common.paths['version_check_file'])
+        for up in tree.getroot():
+            if up.tag == 'update' and up.attrib['appVersion']:
+                return str(up.attrib['appVersion'])
+        return None
 
     def verify(self):
         # initialize the progress bar
@@ -550,16 +465,13 @@
         self.progressbar.set_text(_('Verifying Signature'))
         self.progressbar.show()
 
+        # verify the PGP signature
         verified = False
-        # check the sha256 file's sig, and also take the sha256 of the tarball and compare
-        p = subprocess.Popen(['/usr/bin/gpg', '--homedir', self.common.paths['gnupg_homedir'], '--verify', self.common.paths['sha256_sig_file']])
+        FNULL = open(os.devnull, 'w')
+        p = subprocess.Popen(['/usr/bin/gpg', '--homedir', self.common.paths['gnupg_homedir'], '--verify', self.common.paths['sig_file']], stdout=FNULL, stderr=subprocess.STDOUT)
         self.pulse_until_process_exits(p)
         if p.returncode == 0:
-            # compare with sha256 of the tarball
-            tarball_sha256 = hashlib.sha256(open(self.common.paths['tarball_file'], 'r').read()).hexdigest()
-            for line in open(self.common.paths['sha256_file'], 'r').readlines():
-                if tarball_sha256.lower() in line.lower() and self.common.paths['tarball_filename'] in line:
-                    verified = True
+            verified = True
 
         if verified:
             self.run_task()
@@ -602,10 +514,6 @@
             self.build_ui()
             return
 
-        # installation is finished, so save installed_version
-        self.common.settings['installed_version'] = self.common.settings['latest_version']
-        self.common.save_settings()
-
         self.run_task()
 
     def run(self, run_next_task=True):
@@ -634,10 +542,7 @@
                 gtk.main_iteration_do(True)
 
         # run Tor Browser
-        if self.common.settings['accept_links']:
-            subprocess.call([self.common.paths['tbb']['start'], '-allow-remote'] + self.url_list)
-        else:
-            subprocess.call([self.common.paths['tbb']['start']])
+        subprocess.call([self.common.paths['tbb']['start']], cwd=self.common.paths['tbb']['dir_tbb'])
 
         if run_next_task:
             self.run_task()
@@ -674,4 +579,3 @@
             delattr(self, 'current_download_url')
         if reactor.running:
             reactor.stop()
-
diff -Nru torbrowser-launcher-0.1.9/torbrowser_launcher/settings.py torbrowser-launcher-0.2.2/torbrowser_launcher/settings.py
--- torbrowser-launcher-0.1.9/torbrowser_launcher/settings.py	2015-01-25 16:12:07.000000000 +0100
+++ torbrowser-launcher-0.2.2/torbrowser_launcher/settings.py	2015-11-13 18:49:50.000000000 +0100
@@ -26,7 +26,7 @@
 OTHER DEALINGS IN THE SOFTWARE.
 """
 
-import subprocess, time
+import subprocess, time, shutil
 
 import pygtk
 pygtk.require('2.0')
@@ -34,7 +34,6 @@
 
 class Settings:
     def __init__(self, common):
-        print _('Starting settings dialog')
         self.common = common
 
         # set up the window
@@ -59,50 +58,32 @@
         self.hbox.pack_start(self.settings_box, True, True, 0)
         self.settings_box.show()
 
-        self.labels_box = gtk.VBox(False, 10)
-        self.hbox.pack_start(self.labels_box, True, True, 0)
-        self.labels_box.show()
+        self.status_box = gtk.VBox(False, 10)
+        self.hbox.pack_start(self.status_box, True, True, 0)
+        self.status_box.show()
 
-        # download over tor
+        # download over system tor
         try:
             import txsocksx
             self.txsocks_found = True
         except ImportError:
             self.txsocks_found = False
-        self.tor_update_checkbox = gtk.CheckButton(_("Download updates over Tor (recommended)"))
+        self.tor_download_checkbox = gtk.CheckButton(_("Download over system Tor"))
         if self.txsocks_found:
-            self.tor_update_checkbox.set_tooltip_text(_("This option is only available when using a system wide Tor installation."))
+            self.tor_download_checkbox.set_tooltip_text(_("This option is only available when using a system wide Tor installation."))
         else:
-            self.tor_update_checkbox.set_tooltip_text(_("This option requires the python-txsocksx package."))
+            self.tor_download_checkbox.set_tooltip_text(_("This option requires the python-txsocksx package."))
 
-        self.settings_box.pack_start(self.tor_update_checkbox, True, True, 0)
-        if self.common.settings['update_over_tor'] and self.txsocks_found:
-            self.tor_update_checkbox.set_active(True)
+        self.settings_box.pack_start(self.tor_download_checkbox, True, True, 0)
+        if self.common.settings['download_over_tor'] and self.txsocks_found:
+            self.tor_download_checkbox.set_active(True)
         else:
-            self.tor_update_checkbox.set_active(False)
+            self.tor_download_checkbox.set_active(False)
 
         if self.txsocks_found == False:
-            self.tor_update_checkbox.set_sensitive(False)
+            self.tor_download_checkbox.set_sensitive(False)
 
-        self.tor_update_checkbox.show()
-
-        # check for updates
-        self.update_checkbox = gtk.CheckButton(_("Check for updates next launch"))
-        self.settings_box.pack_start(self.update_checkbox, True, True, 0)
-        if self.common.settings['check_for_updates']:
-            self.update_checkbox.set_active(True)
-        else:
-            self.update_checkbox.set_active(False)
-        self.update_checkbox.show()
-
-        # accept links
-        self.accept_links = gtk.CheckButton(_("Allow opening links with Tor Browser\n(this doesn't work if you use Firefox)"))
-        self.settings_box.pack_start(self.accept_links, True, True, 0)
-        if self.common.settings['accept_links']:
-            self.accept_links.set_active(True)
-        else:
-            self.accept_links.set_active(False)
-        self.accept_links.show()
+        self.tor_download_checkbox.show()
 
         # modem sound
         self.modem_checkbox = gtk.CheckButton(_("Play modem sound, because Tor is slow :]"))
@@ -120,22 +101,33 @@
             self.modem_checkbox.set_tooltip_text(_("This option requires python-pygame to be installed"))
         self.modem_checkbox.show()
 
-        # labels
-        if(self.common.settings['installed_version']):
-            self.label1 = gtk.Label(_('Installed version:\n{0}').format(self.common.settings['installed_version']))
-        else:
-            self.label1 = gtk.Label(_('Not installed'))
-        self.label1.set_line_wrap(True)
-        self.labels_box.pack_start(self.label1, True, True, 0)
-        self.label1.show()
-
-        if(self.common.settings['last_update_check_timestamp'] > 0):
-            self.label1 = gtk.Label(_('Last checked for updates:\n{0}').format(time.strftime("%B %d, %Y %I:%M %P", time.gmtime(self.common.settings['last_update_check_timestamp']))))
-        else:
-            self.label1 = gtk.Label(_('Never checked for updates'))
-        self.label1.set_line_wrap(True)
-        self.labels_box.pack_start(self.label1, True, True, 0)
-        self.label1.show()
+        # status
+        if(self.common.settings['installed']):
+            self.status_label = gtk.Label(_('Status: Installed'))
+        else:
+            self.status_label = gtk.Label(_('Status: Not Installed'))
+        self.status_label.set_line_wrap(True)
+        self.status_box.pack_start(self.status_label, True, True, 0)
+        self.status_label.show()
+
+        if(self.common.settings['installed']):
+           # reinstall button
+            reinstall_image = gtk.Image()
+            reinstall_image.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON)
+            self.reinstall_button = gtk.Button(_("Reinstall Tor Browser"))
+            self.reinstall_button.set_image(reinstall_image)
+            self.reinstall_button.connect("clicked", self.reinstall, None)
+            self.status_box.add(self.reinstall_button)
+            self.reinstall_button.show()
+        else:
+            # install button
+            install_image = gtk.Image()
+            install_image.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON)
+            self.install_button = gtk.Button(_("Install Tor Browser"))
+            self.install_button.set_image(install_image)
+            self.install_button.connect("clicked", self.install, None)
+            self.status_box.add(self.install_button)
+            self.install_button.show()
 
         # mirrors
         self.mirrors_box = gtk.HBox(False, 10)
@@ -163,15 +155,6 @@
         self.box.pack_start(self.button_box, True, True, 0)
         self.button_box.show()
 
-        # save and launch button
-        save_launch_image = gtk.Image()
-        save_launch_image.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON)
-        self.save_launch_button = gtk.Button(_("Launch Tor Browser"))
-        self.save_launch_button.set_image(save_launch_image)
-        self.save_launch_button.connect("clicked", self.save_launch, None)
-        self.button_box.add(self.save_launch_button)
-        self.save_launch_button.show()
-
         # save and exit button
         save_exit_image = gtk.Image()
         save_exit_image.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON)
@@ -203,15 +186,22 @@
         else:
             value = False
 
-        self.tor_update_checkbox.set_active(value)
-        self.tor_update_checkbox.set_sensitive(value)
+        self.tor_download_checkbox.set_active(value)
+        self.tor_download_checkbox.set_sensitive(value)
 
-    # save and launch
-    def save_launch(self, widget, data=None):
+    # install
+    def install(self, widget, data=None):
         self.save()
         subprocess.Popen([self.common.paths['tbl_bin']])
         self.destroy(False)
 
+    # launch
+    def reinstall(self, widget, data=None):
+        self.save()
+        shutil.rmtree(self.common.paths['tbb']['dir'])
+        subprocess.Popen([self.common.paths['tbl_bin']])
+        self.destroy(False)
+
     # save and exit
     def save_exit(self, widget, data=None):
         self.save()
@@ -220,9 +210,7 @@
     # save settings
     def save(self):
         # checkbox options
-        self.common.settings['update_over_tor'] = self.tor_update_checkbox.get_active()
-        self.common.settings['check_for_updates'] = self.update_checkbox.get_active()
-        self.common.settings['accept_links'] = self.accept_links.get_active()
+        self.common.settings['download_over_tor'] = self.tor_download_checkbox.get_active()
         self.common.settings['modem_sound'] = self.modem_checkbox.get_active()
 
         # figure out the selected mirror
@@ -237,5 +225,3 @@
 
     def destroy(self, widget, data=None):
         gtk.main_quit()
-
-

Attachment: signature.asc
Description: This is a digitally signed message part.


--- End Message ---
--- Begin Message ---
Version: 8.3

Hi,

The updates referred to in these bugs were included in today's 8.3
Jessie point release.

Regards,

Adam

--- End Message ---

Reply to: