Skip to content

Commit 6501773

Browse files
ziransunjdm
authored andcommitted
Python 3: port tests in common/security-features/subresource [part 1]
1 parent 68410b5 commit 6501773

File tree

10 files changed

+138
-125
lines changed

10 files changed

+138
-125
lines changed
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import os, sys
2-
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
2+
from wptserve.utils import isomorphic_decode
3+
sys.path.insert(0, os.path.dirname(os.path.abspath(isomorphic_decode(__file__))))
34
import subresource
45

56
def generate_payload(request, server_data):
6-
file = os.path.join(request.doc_root, "webaudio", "resources",
7-
"sin_440Hz_-6dBFS_1s.wav")
7+
file = os.path.join(request.doc_root, u"webaudio", u"resources",
8+
u"sin_440Hz_-6dBFS_1s.wav")
89
return open(file, "rb").read()
910

1011

@@ -13,6 +14,5 @@ def main(request, response):
1314
subresource.respond(request,
1415
response,
1516
payload_generator = handler,
16-
access_control_allow_origin = "*",
17-
content_type = "audio/wav")
18-
17+
access_control_allow_origin = b"*",
18+
content_type = b"audio/wav")

common/security-features/subresource/document.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import os, sys
2-
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
2+
from wptserve.utils import isomorphic_decode
3+
sys.path.insert(0, os.path.dirname(os.path.abspath(isomorphic_decode(__file__))))
34
import subresource
45

56
def generate_payload(server_data):
6-
return subresource.get_template("document.html.template") % server_data
7+
return subresource.get_template(u"document.html.template") % server_data
78

89
def main(request, response):
910
subresource.respond(request,
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import os, sys
2-
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
2+
from wptserve.utils import isomorphic_decode
3+
sys.path.insert(0, os.path.dirname(os.path.abspath(isomorphic_decode(__file__))))
34
import subresource
45

56
def generate_payload(server_data):
6-
return ''
7+
return u''
78

89
def main(request, response):
910
subresource.respond(request,
1011
response,
1112
payload_generator = generate_payload,
12-
access_control_allow_origin = "*",
13-
content_type = "text/plain")
14-
13+
access_control_allow_origin = b"*",
14+
content_type = b"text/plain")
Lines changed: 55 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,73 @@
11
import os, sys, base64
2-
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
2+
from wptserve.utils import isomorphic_decode
3+
sys.path.insert(0, os.path.dirname(os.path.abspath(isomorphic_decode(__file__))))
34
import subresource
45

56
def generate_payload(request, server_data):
6-
data = ('{"headers": %(headers)s}') % server_data
7-
if "id" in request.GET:
8-
request.server.stash.put(request.GET["id"], data)
7+
data = (u'{"headers": %(headers)s}') % server_data
8+
if b"id" in request.GET:
9+
request.server.stash.put(request.GET[b"id"], data)
910
# Simple base64 encoded .tff font
10-
return base64.decodestring("AAEAAAANAIAAAwBQRkZUTU6u6MkAAAXcAAAAHE9TLzJWYW"
11-
"QKAAABWAAAAFZjbWFwAA8D7wAAAcAAAAFCY3Z0IAAhAnkA"
12-
"AAMEAAAABGdhc3D//wADAAAF1AAAAAhnbHlmCC6aTwAAAx"
13-
"QAAACMaGVhZO8ooBcAAADcAAAANmhoZWEIkAV9AAABFAAA"
14-
"ACRobXR4EZQAhQAAAbAAAAAQbG9jYQBwAFQAAAMIAAAACm"
15-
"1heHAASQA9AAABOAAAACBuYW1lehAVOgAAA6AAAAIHcG9z"
16-
"dP+uADUAAAWoAAAAKgABAAAAAQAAMhPyuV8PPPUACwPoAA"
17-
"AAAMU4Lm0AAAAAxTgubQAh/5wFeAK8AAAACAACAAAAAAAA"
18-
"AAEAAAK8/5wAWgXcAAAAAAV4AAEAAAAAAAAAAAAAAAAAAA"
19-
"AEAAEAAAAEAAwAAwAAAAAAAgAAAAEAAQAAAEAALgAAAAAA"
20-
"AQXcAfQABQAAAooCvAAAAIwCigK8AAAB4AAxAQIAAAIABg"
21-
"kAAAAAAAAAAAABAAAAAAAAAAAAAAAAUGZFZABAAEEAQQMg"
22-
"/zgAWgK8AGQAAAABAAAAAAAABdwAIQAAAAAF3AAABdwAZA"
23-
"AAAAMAAAADAAAAHAABAAAAAAA8AAMAAQAAABwABAAgAAAA"
24-
"BAAEAAEAAABB//8AAABB////wgABAAAAAAAAAQYAAAEAAA"
25-
"AAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA"
26-
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAA"
27-
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
28-
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
29-
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
30-
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
31-
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
32-
"AAAAAAAAAAAAAAAAAAAhAnkAAAAqACoAKgBGAAAAAgAhAA"
33-
"ABKgKaAAMABwAusQEALzyyBwQA7TKxBgXcPLIDAgDtMgCx"
34-
"AwAvPLIFBADtMrIHBgH8PLIBAgDtMjMRIREnMxEjIQEJ6M"
35-
"fHApr9ZiECWAAAAwBk/5wFeAK8AAMABwALAAABNSEVATUh"
36-
"FQE1IRUB9AH0/UQDhPu0BRQB9MjI/tTIyP7UyMgAAAAAAA"
37-
"4ArgABAAAAAAAAACYATgABAAAAAAABAAUAgQABAAAAAAAC"
38-
"AAYAlQABAAAAAAADACEA4AABAAAAAAAEAAUBDgABAAAAAA"
39-
"AFABABNgABAAAAAAAGAAUBUwADAAEECQAAAEwAAAADAAEE"
40-
"CQABAAoAdQADAAEECQACAAwAhwADAAEECQADAEIAnAADAA"
41-
"EECQAEAAoBAgADAAEECQAFACABFAADAAEECQAGAAoBRwBD"
42-
"AG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOA"
43-
"AgAE0AbwB6AGkAbABsAGEAIABDAG8AcgBwAG8AcgBhAHQA"
44-
"aQBvAG4AAENvcHlyaWdodCAoYykgMjAwOCBNb3ppbGxhIE"
45-
"NvcnBvcmF0aW9uAABNAGEAcgBrAEEAAE1hcmtBAABNAGUA"
46-
"ZABpAHUAbQAATWVkaXVtAABGAG8AbgB0AEYAbwByAGcAZQ"
47-
"AgADIALgAwACAAOgAgAE0AYQByAGsAQQAgADoAIAA1AC0A"
48-
"MQAxAC0AMgAwADAAOAAARm9udEZvcmdlIDIuMCA6IE1hcm"
49-
"tBIDogNS0xMS0yMDA4AABNAGEAcgBrAEEAAE1hcmtBAABW"
50-
"AGUAcgBzAGkAbwBuACAAMAAwADEALgAwADAAMAAgAABWZX"
51-
"JzaW9uIDAwMS4wMDAgAABNAGEAcgBrAEEAAE1hcmtBAAAA"
52-
"AgAAAAAAAP+DADIAAAABAAAAAAAAAAAAAAAAAAAAAAAEAA"
53-
"AAAQACACQAAAAAAAH//wACAAAAAQAAAADEPovuAAAAAMU4"
54-
"Lm0AAAAAxTgubQ==");
11+
return base64.decodestring(b"AAEAAAANAIAAAwBQRkZUTU6u6MkAAAXcAAAAHE9TLzJWYW"
12+
b"QKAAABWAAAAFZjbWFwAA8D7wAAAcAAAAFCY3Z0IAAhAnkA"
13+
b"AAMEAAAABGdhc3D//wADAAAF1AAAAAhnbHlmCC6aTwAAAx"
14+
b"QAAACMaGVhZO8ooBcAAADcAAAANmhoZWEIkAV9AAABFAAA"
15+
b"ACRobXR4EZQAhQAAAbAAAAAQbG9jYQBwAFQAAAMIAAAACm"
16+
b"1heHAASQA9AAABOAAAACBuYW1lehAVOgAAA6AAAAIHcG9z"
17+
b"dP+uADUAAAWoAAAAKgABAAAAAQAAMhPyuV8PPPUACwPoAA"
18+
b"AAAMU4Lm0AAAAAxTgubQAh/5wFeAK8AAAACAACAAAAAAAA"
19+
b"AAEAAAK8/5wAWgXcAAAAAAV4AAEAAAAAAAAAAAAAAAAAAA"
20+
b"AEAAEAAAAEAAwAAwAAAAAAAgAAAAEAAQAAAEAALgAAAAAA"
21+
b"AQXcAfQABQAAAooCvAAAAIwCigK8AAAB4AAxAQIAAAIABg"
22+
b"kAAAAAAAAAAAABAAAAAAAAAAAAAAAAUGZFZABAAEEAQQMg"
23+
b"/zgAWgK8AGQAAAABAAAAAAAABdwAIQAAAAAF3AAABdwAZA"
24+
b"AAAAMAAAADAAAAHAABAAAAAAA8AAMAAQAAABwABAAgAAAA"
25+
b"BAAEAAEAAABB//8AAABB////wgABAAAAAAAAAQYAAAEAAA"
26+
b"AAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA"
27+
b"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAA"
28+
b"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
29+
b"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
30+
b"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
31+
b"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
32+
b"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
33+
b"AAAAAAAAAAAAAAAAAAAhAnkAAAAqACoAKgBGAAAAAgAhAA"
34+
b"ABKgKaAAMABwAusQEALzyyBwQA7TKxBgXcPLIDAgDtMgCx"
35+
b"AwAvPLIFBADtMrIHBgH8PLIBAgDtMjMRIREnMxEjIQEJ6M"
36+
b"fHApr9ZiECWAAAAwBk/5wFeAK8AAMABwALAAABNSEVATUh"
37+
b"FQE1IRUB9AH0/UQDhPu0BRQB9MjI/tTIyP7UyMgAAAAAAA"
38+
b"4ArgABAAAAAAAAACYATgABAAAAAAABAAUAgQABAAAAAAAC"
39+
b"AAYAlQABAAAAAAADACEA4AABAAAAAAAEAAUBDgABAAAAAA"
40+
b"AFABABNgABAAAAAAAGAAUBUwADAAEECQAAAEwAAAADAAEE"
41+
b"CQABAAoAdQADAAEECQACAAwAhwADAAEECQADAEIAnAADAA"
42+
b"EECQAEAAoBAgADAAEECQAFACABFAADAAEECQAGAAoBRwBD"
43+
b"AG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOA"
44+
b"AgAE0AbwB6AGkAbABsAGEAIABDAG8AcgBwAG8AcgBhAHQA"
45+
b"aQBvAG4AAENvcHlyaWdodCAoYykgMjAwOCBNb3ppbGxhIE"
46+
b"NvcnBvcmF0aW9uAABNAGEAcgBrAEEAAE1hcmtBAABNAGUA"
47+
b"ZABpAHUAbQAATWVkaXVtAABGAG8AbgB0AEYAbwByAGcAZQ"
48+
b"AgADIALgAwACAAOgAgAE0AYQByAGsAQQAgADoAIAA1AC0A"
49+
b"MQAxAC0AMgAwADAAOAAARm9udEZvcmdlIDIuMCA6IE1hcm"
50+
b"tBIDogNS0xMS0yMDA4AABNAGEAcgBrAEEAAE1hcmtBAABW"
51+
b"AGUAcgBzAGkAbwBuACAAMAAwADEALgAwADAAMAAgAABWZX"
52+
b"JzaW9uIDAwMS4wMDAgAABNAGEAcgBrAEEAAE1hcmtBAAAA"
53+
b"AgAAAAAAAP+DADIAAAABAAAAAAAAAAAAAAAAAAAAAAAEAA"
54+
b"AAAQACACQAAAAAAAH//wACAAAAAQAAAADEPovuAAAAAMU4"
55+
b"Lm0AAAAAxTgubQ==")
5556

5657
def generate_report_headers_payload(request, server_data):
57-
stashed_data = request.server.stash.take(request.GET["id"])
58+
stashed_data = request.server.stash.take(request.GET[b"id"])
5859
return stashed_data
5960

6061
def main(request, response):
6162
handler = lambda data: generate_payload(request, data)
62-
content_type = 'application/x-font-truetype'
63+
content_type = b'application/x-font-truetype'
6364

64-
if "report-headers" in request.GET:
65+
if b"report-headers" in request.GET:
6566
handler = lambda data: generate_report_headers_payload(request, data)
66-
content_type = 'application/json'
67+
content_type = b'application/json'
6768

6869
subresource.respond(request,
6970
response,
7071
payload_generator = handler,
7172
content_type = content_type,
72-
access_control_allow_origin = "*")
73+
access_control_allow_origin = b"*")

common/security-features/subresource/image.py

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1-
import os, sys, array, math, StringIO
2-
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
1+
import os, sys, array, math
2+
3+
from six import BytesIO
4+
35
import subresource
46

7+
from wptserve.utils import isomorphic_decode
8+
9+
sys.path.insert(0, os.path.dirname(os.path.abspath(isomorphic_decode(__file__))))
10+
511
class Image:
612
"""This class partially implements the interface of the PIL.Image.Image.
713
One day in the future WPT might support the PIL module or another imaging
@@ -36,9 +42,9 @@ def putdata(self, color_data):
3642
def save(self, f, type):
3743
assert type == "BMP"
3844
# 54 bytes of preambule + image color data.
39-
filesize = 54 + 3 * self.width * self.height;
45+
filesize = 54 + 3 * self.width * self.height
4046
# 14 bytes of header.
41-
bmpfileheader = bytearray(['B', 'M'] + self._int_to_bytes(filesize) +
47+
bmpfileheader = bytearray([ord('B'), ord('M')] + self._int_to_bytes(filesize) +
4248
[0, 0, 0, 0, 54, 0, 0, 0])
4349
# 40 bytes of info.
4450
bmpinfoheader = bytearray([40, 0, 0, 0] +
@@ -47,7 +53,7 @@ def save(self, f, type):
4753
[1, 0, 24] + (25 * [0]))
4854

4955
padlength = (4 - (self.width * 3) % 4) % 4
50-
bmppad = bytearray([0, 0, 0]);
56+
bmppad = bytearray([0, 0, 0])
5157
padding = bmppad[0 : padlength]
5258

5359
f.write(bmpfileheader)
@@ -59,7 +65,7 @@ def save(self, f, type):
5965
f.write(padding)
6066

6167
def encode_string_as_bmp_image(string_data):
62-
data_bytes = array.array("B", string_data)
68+
data_bytes = array.array("B", string_data.encode("utf-8"))
6369

6470
num_bytes = len(data_bytes)
6571

@@ -79,33 +85,33 @@ def encode_string_as_bmp_image(string_data):
7985
img.putdata(color_data)
8086

8187
# Flush image to string.
82-
f = StringIO.StringIO()
88+
f = BytesIO()
8389
img.save(f, "BMP")
8490
f.seek(0)
8591

8692
return f.read()
8793

8894
def generate_payload(request, server_data):
89-
data = ('{"headers": %(headers)s}') % server_data
90-
if "id" in request.GET:
91-
request.server.stash.put(request.GET["id"], data)
95+
data = (u'{"headers": %(headers)s}') % server_data
96+
if b"id" in request.GET:
97+
request.server.stash.put(request.GET[b"id"], data)
9298
data = encode_string_as_bmp_image(data)
9399
return data
94100

95101
def generate_report_headers_payload(request, server_data):
96-
stashed_data = request.server.stash.take(request.GET["id"])
102+
stashed_data = request.server.stash.take(request.GET[b"id"])
97103
return stashed_data
98104

99105
def main(request, response):
100106
handler = lambda data: generate_payload(request, data)
101-
content_type = 'image/bmp'
107+
content_type = b'image/bmp'
102108

103-
if "report-headers" in request.GET:
109+
if b"report-headers" in request.GET:
104110
handler = lambda data: generate_report_headers_payload(request, data)
105-
content_type = 'application/json'
111+
content_type = b'application/json'
106112

107113
subresource.respond(request,
108114
response,
109115
payload_generator = handler,
110116
content_type = content_type,
111-
access_control_allow_origin = "*")
117+
access_control_allow_origin = b"*")
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
def main(request, response):
2-
referrer = request.headers.get("referer", "")
3-
response_headers = [("Content-Type", "text/javascript")];
4-
return (200, response_headers, "window.referrer = '" + referrer + "'")
2+
referrer = request.headers.get(b"referer", b"")
3+
response_headers = [(b"Content-Type", b"text/javascript")]
4+
return (200, response_headers, b"window.referrer = '" + referrer + b"'")
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import os, sys
2-
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
2+
from wptserve.utils import isomorphic_decode
3+
sys.path.insert(0, os.path.dirname(os.path.abspath(isomorphic_decode(__file__))))
34
import subresource
45

56
def generate_payload(server_data):
6-
return subresource.get_template("script.js.template") % server_data
7+
return subresource.get_template(u"script.js.template") % server_data
78

89
def main(request, response):
910
subresource.respond(request,
1011
response,
1112
payload_generator = generate_payload,
12-
content_type = "application/javascript")
13-
13+
content_type = b"application/javascript")
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import os, sys
2-
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
2+
from wptserve.utils import isomorphic_decode
3+
sys.path.insert(0, os.path.dirname(os.path.abspath(isomorphic_decode(__file__))))
34
import subresource
45

56
def generate_payload(server_data):
6-
return subresource.get_template("shared-worker.js.template") % server_data
7+
return subresource.get_template(u"shared-worker.js.template") % server_data
78

89
def main(request, response):
910
subresource.respond(request,
1011
response,
1112
payload_generator = generate_payload,
12-
content_type = "application/javascript")
13+
content_type = b"application/javascript")
Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
1-
import os, sys, urllib
2-
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
1+
import os, sys
2+
from six.moves.urllib.parse import unquote
3+
4+
from wptserve.utils import isomorphic_decode
5+
sys.path.insert(0, os.path.dirname(os.path.abspath(isomorphic_decode(__file__))))
36
import subresource
47

58
def generate_payload(request):
6-
import_url = urllib.unquote(request.GET['import_url'])
7-
return subresource.get_template("static-import.js.template") % {
8-
"import_url": import_url
9+
import_url = unquote(isomorphic_decode(request.GET[b'import_url']))
10+
return subresource.get_template(u"static-import.js.template") % {
11+
u"import_url": import_url
912
}
1013

1114
def main(request, response):
1215
payload_generator = lambda _: generate_payload(request)
1316
subresource.respond(request,
1417
response,
1518
payload_generator = payload_generator,
16-
content_type = "application/javascript")
19+
content_type = b"application/javascript")

0 commit comments

Comments
 (0)