diff --git a/testing/web-platform/tests/common/security-features/tools/generate.py b/testing/web-platform/tests/common/security-features/tools/generate.py
index fc10e635dbd0..a97a396e3047 100644
--- a/testing/web-platform/tests/common/security-features/tools/generate.py
+++ b/testing/web-platform/tests/common/security-features/tools/generate.py
@@ -57,6 +57,45 @@ def dump_test_parameters(selection):
selection, indent=2, separators=(',', ': '), sort_keys=True)
+def handle_deliveries(policy_deliveries):
+ '''
+ Generate elements and HTTP headers for the given list of
+ PolicyDelivery.
+ TODO(hiroshige): Merge duplicated code here, scope/document.py, etc.
+ '''
+
+ meta = ''
+ headers = {}
+
+ for delivery in policy_deliveries:
+ if delivery.value is None:
+ continue
+ if delivery.key == 'referrerPolicy':
+ if delivery.delivery_type == 'meta':
+ meta += \
+ '' % delivery.value
+ elif delivery.delivery_type == 'http-rp':
+ headers['Referrer-Policy'] = delivery.value
+ # TODO(kristijanburnik): Limit to WPT origins.
+ headers['Access-Control-Allow-Origin'] = '*'
+ else:
+ raise Exception(
+ 'Invalid delivery_type: %s' % delivery.delivery_type)
+ elif delivery.key == 'mixedContent':
+ assert (delivery.value == 'opt-in')
+ if delivery.delivery_type == 'meta':
+ meta += ''
+ elif delivery.delivery_type == 'http-rp':
+ headers['Content-Security-Policy'] = 'block-all-mixed-content'
+ else:
+ raise Exception(
+ 'Invalid delivery_type: %s' % delivery.delivery_type)
+ else:
+ raise Exception('Invalid delivery_key: %s' % delivery.key)
+ return {"meta": meta, "headers": headers}
+
+
def generate_selection(config, selection, spec, test_html_template_basename):
test_parameters = dump_test_parameters(selection)
# Adjust the template for the test invoking JS. Indent it to look nice.
@@ -109,13 +148,16 @@ def generate_selection(config, selection, spec, test_html_template_basename):
except:
pass
- delivery = config.handleDelivery(selection, spec)
+ delivery = handle_deliveries([
+ util.PolicyDelivery(selection['delivery_type'],
+ selection['delivery_key'],
+ selection['delivery_value'])
+ ])
if len(delivery['headers']) > 0:
with open(test_headers_filename, "w") as f:
for header in delivery['headers']:
- f.write(header)
- f.write('\n')
+ f.write('%s: %s\n' % (header, delivery['headers'][header]))
selection['meta_delivery_method'] = delivery['meta']
# Obey the lint and pretty format.
diff --git a/testing/web-platform/tests/common/security-features/tools/util.py b/testing/web-platform/tests/common/security-features/tools/util.py
index 1f6c86e6efcc..fc8d3b30ef71 100644
--- a/testing/web-platform/tests/common/security-features/tools/util.py
+++ b/testing/web-platform/tests/common/security-features/tools/util.py
@@ -39,3 +39,14 @@ def load_spec_json(path_to_spec):
print(read_nth_line(f, line_number).rstrip())
print(" " * (column - 1) + "^")
sys.exit(1)
+
+
+class PolicyDelivery(object):
+ '''
+ See `@typedef PolicyDelivery` comments in `resources/common.js`.
+ '''
+
+ def __init__(self, delivery_type, key, value):
+ self.delivery_type = delivery_type
+ self.key = key
+ self.value = value
diff --git a/testing/web-platform/tests/mixed-content/generic/tools/generate.py b/testing/web-platform/tests/mixed-content/generic/tools/generate.py
index ed978bcef9cc..9c911aa6c410 100755
--- a/testing/web-platform/tests/mixed-content/generic/tools/generate.py
+++ b/testing/web-platform/tests/mixed-content/generic/tools/generate.py
@@ -48,25 +48,6 @@ expectation: %(expectation)s
self.spec_directory = os.path.abspath(
os.path.join(script_directory, '..', '..'))
- def handleDelivery(self, selection, spec):
- delivery_type = selection['delivery_type']
- delivery_value = selection['delivery_value']
-
- meta = ''
- headers = []
-
- if delivery_value is not None:
- if delivery_type == 'meta':
- meta = ''
- elif delivery_type == 'http-rp':
- headers.append(
- "Content-Security-Policy: block-all-mixed-content")
- else:
- raise ValueError("Invalid delivery_type %s" % delivery_type)
-
- return {"meta": meta, "headers": headers}
-
if __name__ == '__main__':
generate.main(MixedContentConfig())
diff --git a/testing/web-platform/tests/referrer-policy/generic/tools/generate.py b/testing/web-platform/tests/referrer-policy/generic/tools/generate.py
index 98374982a8d1..ba1e963787be 100755
--- a/testing/web-platform/tests/referrer-policy/generic/tools/generate.py
+++ b/testing/web-platform/tests/referrer-policy/generic/tools/generate.py
@@ -42,33 +42,6 @@ the target request is %(origin)s.'''
self.spec_directory = os.path.abspath(
os.path.join(script_directory, '..', '..'))
- def handleDelivery(self, selection, spec):
- delivery_type = selection['delivery_type']
- delivery_value = selection['delivery_value']
-
- meta = ''
- headers = []
- if delivery_value != None:
- if delivery_type == 'meta':
- meta = \
- '' % delivery_value
- elif delivery_type == 'http-rp':
- meta = \
- ""
- headers.append('Referrer-Policy: ' + '%s' % delivery_value)
- # TODO(kristijanburnik): Limit to WPT origins.
- headers.append('Access-Control-Allow-Origin: *')
- elif delivery_type == 'attr':
- # attr-referrer is supported by the JS test wrapper.
- pass
- elif delivery_type == 'rel-noref':
- # rel=noreferrer is supported by the JS test wrapper.
- pass
- else:
- raise ValueError('Not implemented delivery_type: ' \
- + delivery_type)
- return {"meta": meta, "headers": headers}
-
if __name__ == '__main__':
generate.main(ReferrerPolicyConfig())