tools/test-harness/jssh-driver/jssh_driver.py

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rwxr-xr-x

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'))]

mercurial