Thu, 15 Jan 2015 15:59:08 +0100
Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
1 #!/usr/bin/env python
2 # This Source Code Form is subject to the terms of the Mozilla Public
3 # License, v. 2.0. If a copy of the MPL was not distributed with this
4 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 import re
6 import sys
7 import telnetlib
9 class JsshDriver:
11 COMMAND_PROMPT = "\n> "
13 def __init__(self, host=None, port=9997, telnetklass=telnetlib.Telnet):
14 """Ctor
15 Ctor
16 """
17 self.host = host
18 self.port = port
19 self.tn = telnetklass(host,port)
20 self.init()
22 def open(self,host,port=9997):
23 self.tn.close()
24 self.host = host
25 self.port = port
26 self.tn.open(host,port)
27 self.init()
29 def init(self):
30 if not self.tn.get_socket():
31 return
33 self.tn.read_until(JsshDriver.COMMAND_PROMPT)
34 self.send_command("setProtocol('synchronous')")
36 def send_command(self,command):
37 self.tn.write(command + "\n")
38 return self.tn.read_until(JsshDriver.COMMAND_PROMPT)
40 def send_quit(self):
41 self.tn.write("quit()\n")
42 return self.tn.read_all()
44 class JsshTester:
46 def __init__(self, host, port=9997, telnetklass=telnetlib.Telnet):
47 self.browser = JsshDriver(host,port,telnetklass)
49 def __del__(self):
50 self.browser.send_quit()
52 def get_innerHTML_from_URL(self,url):
53 self.browser.send_command ('var browser = getWindows()[0].getBrowser()')
55 if url:
56 self.browser.send_command ('browser.loadURI("' + url + '")')
58 self.browser.send_command ('var document = browser.contentDocument')
59 self.browser.send_command ('var window = browser.contentWindow')
60 jssh_response = self.browser.send_command ('print(document.documentElement.innerHTML)')
62 m = re.compile(r"\[(?P<len>\d+)](?P<rest>.*)", re.DOTALL).search(jssh_response)
64 return m.group('rest')[0:int(m.group('len'))]