Commit 04df986a authored by Paul Meyer's avatar Paul Meyer Committed by Commit Bot

Implement ReportingObserver.takeRecords().

This method allows queued reports to be captured early.

https://wicg.github.io/reporting/#dom-reportingobserver-takerecords

Bug: 731810
Change-Id: I885d53a1800959d39e9451fc014ce05a4cda475f
Reviewed-on: https://chromium-review.googlesource.com/1106642
Commit-Queue: Paul Meyer <paulmeyer@chromium.org>
Reviewed-by: default avatarNate Chapin <japhet@chromium.org>
Cr-Commit-Position: refs/heads/master@{#569155}
parent 686c6c7e
<!doctype html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="resources/intervention.js"></script>
<div id="target" style="padding: 10px; background-color: blue;">
<p>Testing ReportingObserver's takeRecords().</p>
</div>
<script>
async_test(function(test) {
var observer = new ReportingObserver(function(reports, observer) {
test.step(function() {
// Only 1 report should be observed, since the first report should have
// been returned by takeRecords().
assert_equals(reports.length, 1);
});
test.done();
}, { buffered: true });
observer.observe();
// Generate two reports, one before and one after calling takeRecords().
causeIntervention();
var reports = observer.takeRecords();
causeIntervention();
assert_equals(reports.length, 1);
assert_equals(reports[0].type, "intervention");
}, "takeRecords");
</script>
......@@ -5580,6 +5580,7 @@ interface ReportingObserver
method constructor
method disconnect
method observe
method takeRecords
interface Request
attribute @@toStringTag
getter bodyUsed
......
......@@ -72,6 +72,12 @@ void ReportingObserver::disconnect() {
ReportingContext::From(execution_context_)->UnregisterObserver(this);
}
HeapVector<Member<Report>> ReportingObserver::takeRecords() {
auto reports = report_queue_;
report_queue_.clear();
return reports;
}
void ReportingObserver::Trace(blink::Visitor* visitor) {
visitor->Trace(execution_context_);
visitor->Trace(callback_);
......
......@@ -44,6 +44,7 @@ class CORE_EXPORT ReportingObserver final : public ScriptWrappable {
void observe();
void disconnect();
HeapVector<Member<Report>> takeRecords();
void Trace(blink::Visitor*) override;
......
......@@ -13,4 +13,7 @@ callback ReportingObserverCallback = void (sequence<Report> reports, ReportingOb
] interface ReportingObserver {
void observe();
void disconnect();
ReportList takeRecords();
};
typedef sequence<Report> ReportList;
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