Commit cc9ef540 authored by Paul Meyer's avatar Paul Meyer Committed by Commit Bot

Add DevTools protocol to generate test report.

This protocol will be use to implement the WebDriver Extension
Command specced here:
https://w3c.github.io/reporting/#generate-test-report-command

Change-Id: Idfe7fc40bc85589b1fc6e79f2d603ed01cf78840
Reviewed-on: https://chromium-review.googlesource.com/1188754Reviewed-by: default avatarPavel Feldman <pfeldman@chromium.org>
Commit-Queue: Paul Meyer <paulmeyer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#586391}
parent 1bbd21bb
Tests that Page.generateTestReport works for main frame.
>> GENERATING TEST REPORT <<
Reports: 1
Report Type: test
Good URL: true
Report Message: "Test message 42."
DONE
(async function(testRunner) {
const {page, session, dp} = await testRunner.startBlank(
"Tests that Page.generateTestReport works for main frame.");
await session.evaluate(`var observer = new ReportingObserver(function(reports, observer) {
window.console.log("Reports: " + reports.length);
// Ensure that the contents of the report are valid.
window.console.log("Report Type: " + reports[0].type);
window.console.log("Good URL: " + reports[0].url.endsWith("inspector-protocol-page.html"));
window.console.log("Report Message: \\"" + reports[0].body.message + "\\"");
window.console.log("DONE");
});`);
await session.evaluate(`observer.observe()`);
await dp.Page.enable();
await dp.Runtime.enable();
testRunner.log("\n>> GENERATING TEST REPORT <<\n");
await dp.Page.generateTestReport({ message: "Test message 42." });
dp.Runtime.onConsoleAPICalled(result => {
testRunner.log(result.params.args[0].value);
if (result.params.args[0].value === 'DONE')
testRunner.completeTest();
});
})
...@@ -187,6 +187,7 @@ core_idl_files = ...@@ -187,6 +187,7 @@ core_idl_files =
"frame/report.idl", "frame/report.idl",
"frame/report_body.idl", "frame/report_body.idl",
"frame/reporting_observer.idl", "frame/reporting_observer.idl",
"frame/test_report_body.idl",
"frame/user_activation.idl", "frame/user_activation.idl",
"frame/visual_viewport.idl", "frame/visual_viewport.idl",
"geometry/dom_matrix.idl", "geometry/dom_matrix.idl",
......
...@@ -159,6 +159,7 @@ blink_core_sources("frame") { ...@@ -159,6 +159,7 @@ blink_core_sources("frame") {
"settings_delegate.h", "settings_delegate.h",
"smart_clip.cc", "smart_clip.cc",
"smart_clip.h", "smart_clip.h",
"test_report_body.h",
"use_counter.cc", "use_counter.cc",
"use_counter.h", "use_counter.h",
"user_activation.cc", "user_activation.cc",
......
...@@ -53,7 +53,6 @@ void ReportingContext::CountReport(Report* report) { ...@@ -53,7 +53,6 @@ void ReportingContext::CountReport(Report* report) {
} else if (type == "intervention") { } else if (type == "intervention") {
feature = WebFeature::kInterventionReport; feature = WebFeature::kInterventionReport;
} else { } else {
NOTREACHED();
return; return;
} }
......
// Copyright 2018 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.
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_TEST_REPORT_BODY_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_TEST_REPORT_BODY_H_
#include "third_party/blink/renderer/core/frame/report_body.h"
namespace blink {
class TestReportBody : public ReportBody {
DEFINE_WRAPPERTYPEINFO();
public:
TestReportBody(const String& message) : message_(message) {}
~TestReportBody() override = default;
String message() const { return message_; }
private:
const String message_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_TEST_REPORT_BODY_H_
// Copyright 2018 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://w3c.github.io/reporting/#test-report
[
NoInterfaceObject,
RuntimeEnabled=TestReporting
] interface TestReportBody : ReportBody {
readonly attribute DOMString message;
};
...@@ -5276,6 +5276,14 @@ domain Page ...@@ -5276,6 +5276,14 @@ domain Page
# Clears seeded compilation cache. # Clears seeded compilation cache.
experimental command clearCompilationCache experimental command clearCompilationCache
# Generates a report for testing.
experimental command generateTestReport
parameters
# Message to be displayed in the report.
string message
# Specifies the endpoint group to deliver the report to.
optional string group
event domContentEventFired event domContentEventFired
parameters parameters
Network.MonotonicTime timestamp Network.MonotonicTime timestamp
......
...@@ -43,7 +43,10 @@ ...@@ -43,7 +43,10 @@
#include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/local_frame_client.h" #include "third_party/blink/renderer/core/frame/local_frame_client.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h" #include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/frame/report.h"
#include "third_party/blink/renderer/core/frame/reporting_context.h"
#include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/core/frame/test_report_body.h"
#include "third_party/blink/renderer/core/frame/visual_viewport.h" #include "third_party/blink/renderer/core/frame/visual_viewport.h"
#include "third_party/blink/renderer/core/html/html_frame_owner_element.h" #include "third_party/blink/renderer/core/html/html_frame_owner_element.h"
#include "third_party/blink/renderer/core/html/imports/html_import_loader.h" #include "third_party/blink/renderer/core/html/imports/html_import_loader.h"
...@@ -1302,6 +1305,20 @@ Response InspectorPageAgent::clearCompilationCache() { ...@@ -1302,6 +1305,20 @@ Response InspectorPageAgent::clearCompilationCache() {
return Response::OK(); return Response::OK();
} }
protocol::Response InspectorPageAgent::generateTestReport(const String& message,
Maybe<String> group) {
Document* document = inspected_frames_->Root()->GetDocument();
// Construct the test report.
TestReportBody* body = new TestReportBody(message);
Report* report = new Report("test", document->Url().GetString(), body);
// Send the test report to any ReportingObservers.
ReportingContext::From(document)->QueueReport(report);
return Response::OK();
}
void InspectorPageAgent::Trace(blink::Visitor* visitor) { void InspectorPageAgent::Trace(blink::Visitor* visitor) {
visitor->Trace(inspected_frames_); visitor->Trace(inspected_frames_);
visitor->Trace(inspector_resource_content_loader_); visitor->Trace(inspector_resource_content_loader_);
......
...@@ -158,6 +158,8 @@ class CORE_EXPORT InspectorPageAgent final ...@@ -158,6 +158,8 @@ class CORE_EXPORT InspectorPageAgent final
std::unique_ptr<protocol::Page::FontFamilies>) override; std::unique_ptr<protocol::Page::FontFamilies>) override;
protocol::Response setFontSizes( protocol::Response setFontSizes(
std::unique_ptr<protocol::Page::FontSizes>) override; std::unique_ptr<protocol::Page::FontSizes>) override;
protocol::Response generateTestReport(const String& message,
Maybe<String> group) override;
protocol::Response setProduceCompilationCache(bool enabled) override; protocol::Response setProduceCompilationCache(bool enabled) override;
protocol::Response addCompilationCache(const String& url, protocol::Response addCompilationCache(const String& url,
......
...@@ -1158,6 +1158,10 @@ ...@@ -1158,6 +1158,10 @@
origin_trial_feature_name: "StaleWhileRevalidate", origin_trial_feature_name: "StaleWhileRevalidate",
status: "experimental", status: "experimental",
}, },
{
name: "TestReporting",
status: "test",
},
{ {
name: "TextUnderlinePositionLeftRight", name: "TextUnderlinePositionLeftRight",
status: "experimental", status: "experimental",
......
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