Commit 428b08c5 authored by Yifan Luo's avatar Yifan Luo Committed by Commit Bot

[Sanitizer API] Add empty config dictionary.

Bug: 1116418
Change-Id: I770f1032deb1558203fee33528ec08ae475e3c00
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2396217
Commit-Queue: Yifan Luo <lyf@chromium.org>
Reviewed-by: default avatarDaniel Vogelheim <vogelheim@chromium.org>
Reviewed-by: default avatarMike West <mkwst@chromium.org>
Cr-Commit-Position: refs/heads/master@{#806182}
parent d5f7921b
...@@ -637,6 +637,8 @@ generated_dictionary_sources_in_modules = [ ...@@ -637,6 +637,8 @@ generated_dictionary_sources_in_modules = [
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_rtc_session_description_init.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_rtc_session_description_init.h",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_rtc_track_event_init.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_rtc_track_event_init.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_rtc_track_event_init.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_rtc_track_event_init.h",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_sanitizer_config.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_sanitizer_config.h",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_save_file_picker_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_save_file_picker_options.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_save_file_picker_options.h", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_save_file_picker_options.h",
"$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_scheduler_post_task_options.cc", "$root_gen_dir/third_party/blink/renderer/bindings/modules/v8/v8_scheduler_post_task_options.cc",
......
...@@ -584,6 +584,7 @@ static_idl_files_in_modules = get_path_info( ...@@ -584,6 +584,7 @@ static_idl_files_in_modules = get_path_info(
"//third_party/blink/renderer/modules/remoteplayback/html_media_element_remote_playback.idl", "//third_party/blink/renderer/modules/remoteplayback/html_media_element_remote_playback.idl",
"//third_party/blink/renderer/modules/remoteplayback/remote_playback.idl", "//third_party/blink/renderer/modules/remoteplayback/remote_playback.idl",
"//third_party/blink/renderer/modules/sanitizer_api/sanitizer.idl", "//third_party/blink/renderer/modules/sanitizer_api/sanitizer.idl",
"//third_party/blink/renderer/modules/sanitizer_api/sanitizer_config.idl",
"//third_party/blink/renderer/modules/scheduler/scheduler.idl", "//third_party/blink/renderer/modules/scheduler/scheduler.idl",
"//third_party/blink/renderer/modules/scheduler/scheduler_post_task_options.idl", "//third_party/blink/renderer/modules/scheduler/scheduler_post_task_options.idl",
"//third_party/blink/renderer/modules/scheduler/task_controller.idl", "//third_party/blink/renderer/modules/scheduler/task_controller.idl",
......
...@@ -3,3 +3,5 @@ ...@@ -3,3 +3,5 @@
# found in the LICENSE file. # found in the LICENSE file.
modules_idl_files = [ "sanitizer.idl" ] modules_idl_files = [ "sanitizer.idl" ]
modules_dictionary_idl_files = [ "sanitizer_config.idl" ]
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "sanitizer.h" #include "sanitizer.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_sanitizer_config.h"
#include "third_party/blink/renderer/core/dom/document_fragment.h" #include "third_party/blink/renderer/core/dom/document_fragment.h"
#include "third_party/blink/renderer/core/editing/serializers/serialization.h" #include "third_party/blink/renderer/core/editing/serializers/serialization.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h"
...@@ -13,11 +14,13 @@ ...@@ -13,11 +14,13 @@
namespace blink { namespace blink {
Sanitizer* Sanitizer::Create(ExceptionState& exception_state) { Sanitizer* Sanitizer::Create(const SanitizerConfig* config,
return MakeGarbageCollected<Sanitizer>(); ExceptionState& exception_state) {
return MakeGarbageCollected<Sanitizer>(config);
} }
Sanitizer::Sanitizer() = default; Sanitizer::Sanitizer(const SanitizerConfig* config)
: config_(const_cast<SanitizerConfig*>(config)) {}
Sanitizer::~Sanitizer() = default; Sanitizer::~Sanitizer() = default;
...@@ -44,4 +47,13 @@ DocumentFragment* Sanitizer::sanitize(ScriptState* script_state, ...@@ -44,4 +47,13 @@ DocumentFragment* Sanitizer::sanitize(ScriptState* script_state,
return fragment; return fragment;
} }
SanitizerConfig* Sanitizer::creationOptions() const {
return config_;
}
void Sanitizer::Trace(Visitor* visitor) const {
ScriptWrappable::Trace(visitor);
visitor->Trace(config_);
}
} // namespace blink } // namespace blink
...@@ -13,18 +13,26 @@ namespace blink { ...@@ -13,18 +13,26 @@ namespace blink {
class DocumentFragment; class DocumentFragment;
class ExceptionState; class ExceptionState;
class SanitizerConfig;
class ScriptState; class ScriptState;
class MODULES_EXPORT Sanitizer final : public ScriptWrappable { class MODULES_EXPORT Sanitizer final : public ScriptWrappable {
DEFINE_WRAPPERTYPEINFO(); DEFINE_WRAPPERTYPEINFO();
public: public:
static Sanitizer* Create(ExceptionState&); static Sanitizer* Create(const SanitizerConfig*, ExceptionState&);
Sanitizer(); explicit Sanitizer(const SanitizerConfig*);
~Sanitizer() override; ~Sanitizer() override;
String sanitizeToString(ScriptState*, const String&, ExceptionState&); String sanitizeToString(ScriptState*, const String&, ExceptionState&);
DocumentFragment* sanitize(ScriptState*, const String&, ExceptionState&); DocumentFragment* sanitize(ScriptState*, const String&, ExceptionState&);
SanitizerConfig* creationOptions() const;
void Trace(Visitor*) const override;
private:
Member<SanitizerConfig> config_ = {};
}; };
} // namespace blink } // namespace blink
......
...@@ -8,7 +8,9 @@ ...@@ -8,7 +8,9 @@
Exposed=Window, Exposed=Window,
RuntimeEnabled=SanitizerAPI RuntimeEnabled=SanitizerAPI
] interface Sanitizer { ] interface Sanitizer {
[RaisesException] constructor(); [RaisesException] constructor(optional SanitizerConfig config = {});
[CallWith=ScriptState, RaisesException] DOMString sanitizeToString(DOMString input); [CallWith=ScriptState, RaisesException] DOMString sanitizeToString(DOMString input);
[CallWith=ScriptState, RaisesException] DocumentFragment sanitize(DOMString input); [CallWith=ScriptState, RaisesException] DocumentFragment sanitize(DOMString input);
readonly attribute SanitizerConfig creationOptions;
}; };
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// https://github.com/WICG/sanitizer-api
dictionary SanitizerConfig {};
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
[ [
Exposed=Window Exposed=Window
] interface Sanitizer { ] interface Sanitizer {
[RaisesException] constructor(); [RaisesException] constructor(optional SanitizerConfig sanitizerConfig = {});
DOMString sanitizeToString(DOMString input); [CallWith=ScriptState, RaisesException] DocumentFragment sanitize(DOMString input);
[CallWith=ScriptState, RaisesException] DOMString sanitizeToString(DOMString input);
}; };
dictionary SanitizerConfig {};
...@@ -6,7 +6,7 @@ idl_test( ...@@ -6,7 +6,7 @@ idl_test(
['html'], ['html'],
idl_array => { idl_array => {
idl_array.add_objects({ idl_array.add_objects({
Sanitizer: ['new Sanitizer()'] Sanitizer: ['new Sanitizer({})']
}); });
} }
); );
<!DOCTYPE html>
<html>
<head>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/testcases.sub.js"></script>
</head>
<body>
<script>
test(t => {
let s = new Sanitizer();
assert_true(s instanceof Sanitizer);
assert_object_equals(s.creationOptions, {});
}, "SanitizerAPI creator without config.");
test(t => {
let s = new Sanitizer({});
assert_true(s instanceof Sanitizer);
assert_object_equals(s.creationOptions, {});
}, "SanitizerAPI creator with empty config.");
test(t => {
let s = new Sanitizer(null);
assert_true(s instanceof Sanitizer);
assert_object_equals(s.creationOptions, {});
}, "SanitizerAPI creator with null as config.");
test(t => {
let s = new Sanitizer(undefined);
assert_true(s instanceof Sanitizer);
assert_object_equals(s.creationOptions, {});
}, "SanitizerAPI creator with undefined as config.");
test(t => {
let s = new Sanitizer({testConfig: [1,2,3], attr: ["test", "i", "am"]});
assert_true(s instanceof Sanitizer);
assert_object_equals(s.creationOptions, {});
}, "SanitizerAPI creator with config ignore unknown values.");
test(t => {
let options = {};
let s = new Sanitizer(options);
assert_true(s instanceof Sanitizer);
assert_object_equals(s.creationOptions, {});
options.testConfig = [1,2,3];
assert_object_equals(s.creationOptions, {});
s.creationOptions = {testConfig: [1,2,3]};
assert_object_equals(s.creationOptions, {});
s.creationOptions['testConfig'] = [1,2,3];
assert_object_equals(s.creationOptions, {});
}, "SanitizerAPI config is not editable.");
</script>
</body>
</html>
...@@ -13,11 +13,11 @@ ...@@ -13,11 +13,11 @@
d.appendChild(fragment); d.appendChild(fragment);
return d.innerHTML; return d.innerHTML;
} }
const s = new Sanitizer(); const s = new Sanitizer({});
testcases.forEach(c => test(t => { testcases.forEach(c => test(t => {
fragment = s.sanitize(c.value); fragment = s.sanitize(c.value);
assert_equals("[object DocumentFragment]", fragment.toString()); assert_true(fragment instanceof DocumentFragment);
assert_equals(getString(fragment), c.result); assert_equals(getString(fragment), c.result);
}, "SanitizerAPI sanitize function for " + c.message)); }, "SanitizerAPI sanitize function for " + c.message));
</script> </script>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<body> <body>
<script> <script>
const s = new Sanitizer(); const s = new Sanitizer({});
testcases.forEach(c => test(t => { testcases.forEach(c => test(t => {
assert_equals(s.sanitizeToString(c.value), c.result); assert_equals(s.sanitizeToString(c.value), c.result);
......
...@@ -7929,6 +7929,7 @@ interface SVGViewElement : SVGElement ...@@ -7929,6 +7929,7 @@ interface SVGViewElement : SVGElement
setter zoomAndPan setter zoomAndPan
interface Sanitizer interface Sanitizer
attribute @@toStringTag attribute @@toStringTag
getter creationOptions
method constructor method constructor
method sanitize method sanitize
method sanitizeToString method sanitizeToString
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment