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 = [
"$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.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.h",
"$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(
"//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/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_post_task_options.idl",
"//third_party/blink/renderer/modules/scheduler/task_controller.idl",
......
......@@ -3,3 +3,5 @@
# found in the LICENSE file.
modules_idl_files = [ "sanitizer.idl" ]
modules_dictionary_idl_files = [ "sanitizer_config.idl" ]
......@@ -4,6 +4,7 @@
#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/editing/serializers/serialization.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
......@@ -13,11 +14,13 @@
namespace blink {
Sanitizer* Sanitizer::Create(ExceptionState& exception_state) {
return MakeGarbageCollected<Sanitizer>();
Sanitizer* Sanitizer::Create(const SanitizerConfig* config,
ExceptionState& exception_state) {
return MakeGarbageCollected<Sanitizer>(config);
}
Sanitizer::Sanitizer() = default;
Sanitizer::Sanitizer(const SanitizerConfig* config)
: config_(const_cast<SanitizerConfig*>(config)) {}
Sanitizer::~Sanitizer() = default;
......@@ -44,4 +47,13 @@ DocumentFragment* Sanitizer::sanitize(ScriptState* script_state,
return fragment;
}
SanitizerConfig* Sanitizer::creationOptions() const {
return config_;
}
void Sanitizer::Trace(Visitor* visitor) const {
ScriptWrappable::Trace(visitor);
visitor->Trace(config_);
}
} // namespace blink
......@@ -13,18 +13,26 @@ namespace blink {
class DocumentFragment;
class ExceptionState;
class SanitizerConfig;
class ScriptState;
class MODULES_EXPORT Sanitizer final : public ScriptWrappable {
DEFINE_WRAPPERTYPEINFO();
public:
static Sanitizer* Create(ExceptionState&);
Sanitizer();
static Sanitizer* Create(const SanitizerConfig*, ExceptionState&);
explicit Sanitizer(const SanitizerConfig*);
~Sanitizer() override;
String sanitizeToString(ScriptState*, const String&, ExceptionState&);
DocumentFragment* sanitize(ScriptState*, const String&, ExceptionState&);
SanitizerConfig* creationOptions() const;
void Trace(Visitor*) const override;
private:
Member<SanitizerConfig> config_ = {};
};
} // namespace blink
......
......@@ -8,7 +8,9 @@
Exposed=Window,
RuntimeEnabled=SanitizerAPI
] interface Sanitizer {
[RaisesException] constructor();
[RaisesException] constructor(optional SanitizerConfig config = {});
[CallWith=ScriptState, RaisesException] DOMString sanitizeToString(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 @@
[
Exposed=Window
] interface Sanitizer {
[RaisesException] constructor();
DOMString sanitizeToString(DOMString input);
[RaisesException] constructor(optional SanitizerConfig sanitizerConfig = {});
[CallWith=ScriptState, RaisesException] DocumentFragment sanitize(DOMString input);
[CallWith=ScriptState, RaisesException] DOMString sanitizeToString(DOMString input);
};
dictionary SanitizerConfig {};
......@@ -6,7 +6,7 @@ idl_test(
['html'],
idl_array => {
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 @@
d.appendChild(fragment);
return d.innerHTML;
}
const s = new Sanitizer();
const s = new Sanitizer({});
testcases.forEach(c => test(t => {
fragment = s.sanitize(c.value);
assert_equals("[object DocumentFragment]", fragment.toString());
assert_true(fragment instanceof DocumentFragment);
assert_equals(getString(fragment), c.result);
}, "SanitizerAPI sanitize function for " + c.message));
</script>
......
......@@ -8,7 +8,7 @@
<body>
<script>
const s = new Sanitizer();
const s = new Sanitizer({});
testcases.forEach(c => test(t => {
assert_equals(s.sanitizeToString(c.value), c.result);
......
......@@ -7929,6 +7929,7 @@ interface SVGViewElement : SVGElement
setter zoomAndPan
interface Sanitizer
attribute @@toStringTag
getter creationOptions
method constructor
method sanitize
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