Commit 3ed38849 authored by arthursonzogni's avatar arthursonzogni Committed by Commit Bot

[COOP] access reporting: expose "type" to ReportingObserver.

This makes network reports and ReportingObserver's report similar.

Bug: 1090273
Change-Id: I0fce6f0a25153e6f32feaeaf713d44ab081c1a97
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2436533Reviewed-by: default avatarCamille Lamy <clamy@chromium.org>
Commit-Queue: Arthur Sonzogni <arthursonzogni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#812686}
parent f8df1ab6
...@@ -34,7 +34,7 @@ constexpr char kPreviousURL[] = "previousResponseURL"; ...@@ -34,7 +34,7 @@ constexpr char kPreviousURL[] = "previousResponseURL";
constexpr char kProperty[] = "property"; constexpr char kProperty[] = "property";
constexpr char kReferrer[] = "referrer"; constexpr char kReferrer[] = "referrer";
constexpr char kSourceFile[] = "sourceFile"; constexpr char kSourceFile[] = "sourceFile";
constexpr char kViolationType[] = "type"; constexpr char kType[] = "type";
// Report attribute values: // Report attribute values:
constexpr char kDispositionEnforce[] = "enforce"; constexpr char kDispositionEnforce[] = "enforce";
...@@ -55,23 +55,6 @@ std::string ToString(network::mojom::CrossOriginOpenerPolicyValue coop_value) { ...@@ -55,23 +55,6 @@ std::string ToString(network::mojom::CrossOriginOpenerPolicyValue coop_value) {
} }
} }
const char* ToString(network::mojom::CoopAccessReportType report_type) {
switch (report_type) {
case network::mojom::CoopAccessReportType::kAccessFromCoopPageToOpener:
return "access-from-coop-page-to-opener";
case network::mojom::CoopAccessReportType::kAccessFromCoopPageToOpenee:
return "access-from-coop-page-to-openee";
case network::mojom::CoopAccessReportType::kAccessFromCoopPageToOther:
return "access-from-coop-page-to-other";
case network::mojom::CoopAccessReportType::kAccessToCoopPageFromOpener:
return "access-to-coop-page-from-opener";
case network::mojom::CoopAccessReportType::kAccessToCoopPageFromOpenee:
return "access-to-coop-page-from-openee";
case network::mojom::CoopAccessReportType::kAccessToCoopPageFromOther:
return "access-to-coop-page-from-other";
}
}
base::Optional<base::UnguessableToken> GetFrameToken( base::Optional<base::UnguessableToken> GetFrameToken(
FrameTreeNode* frame, FrameTreeNode* frame,
SiteInstance* site_instance) { SiteInstance* site_instance) {
...@@ -182,7 +165,7 @@ void CrossOriginOpenerPolicyReporter::QueueNavigationToCOOPReport( ...@@ -182,7 +165,7 @@ void CrossOriginOpenerPolicyReporter::QueueNavigationToCOOPReport(
body.SetString(kPreviousURL, body.SetString(kPreviousURL,
same_origin_with_previous ? SanitizedURL(previous_url) : ""); same_origin_with_previous ? SanitizedURL(previous_url) : "");
body.SetString(kReferrer, context_referrer_url_); body.SetString(kReferrer, context_referrer_url_);
body.SetString(kViolationType, kTypeToResponse); body.SetString(kType, kTypeToResponse);
QueueNavigationReport(std::move(body), *endpoint, is_report_only); QueueNavigationReport(std::move(body), *endpoint, is_report_only);
} }
...@@ -202,7 +185,7 @@ void CrossOriginOpenerPolicyReporter::QueueNavigationAwayFromCOOPReport( ...@@ -202,7 +185,7 @@ void CrossOriginOpenerPolicyReporter::QueueNavigationAwayFromCOOPReport(
sanitized_next_url = SanitizedURL(next_url); sanitized_next_url = SanitizedURL(next_url);
base::DictionaryValue body; base::DictionaryValue body;
body.SetString(kNextURL, sanitized_next_url); body.SetString(kNextURL, sanitized_next_url);
body.SetString(kViolationType, kTypeFromResponse); body.SetString(kType, kTypeFromResponse);
QueueNavigationReport(std::move(body), *endpoint, is_report_only); QueueNavigationReport(std::move(body), *endpoint, is_report_only);
} }
...@@ -223,7 +206,7 @@ void CrossOriginOpenerPolicyReporter::QueueAccessReport( ...@@ -223,7 +206,7 @@ void CrossOriginOpenerPolicyReporter::QueueAccessReport(
network::features::kCrossOriginOpenerPolicyAccessReporting)); network::features::kCrossOriginOpenerPolicyAccessReporting));
base::DictionaryValue body; base::DictionaryValue body;
body.SetStringPath(kViolationType, ToString(report_type)); body.SetStringPath(kType, network::CoopAccessReportTypeToString(report_type));
body.SetStringPath(kDisposition, kDispositionReporting); body.SetStringPath(kDisposition, kDispositionReporting);
body.SetStringPath(kEffectivePolicy, body.SetStringPath(kEffectivePolicy,
ToString(coop_.report_only_value)); ToString(coop_.report_only_value));
......
...@@ -38,4 +38,21 @@ bool IsAccessFromCoopPage(mojom::CoopAccessReportType type) { ...@@ -38,4 +38,21 @@ bool IsAccessFromCoopPage(mojom::CoopAccessReportType type) {
} }
} }
const char* CoopAccessReportTypeToString(mojom::CoopAccessReportType type) {
switch (type) {
case network::mojom::CoopAccessReportType::kAccessFromCoopPageToOpener:
return "access-from-coop-page-to-opener";
case network::mojom::CoopAccessReportType::kAccessFromCoopPageToOpenee:
return "access-from-coop-page-to-openee";
case network::mojom::CoopAccessReportType::kAccessFromCoopPageToOther:
return "access-from-coop-page-to-other";
case network::mojom::CoopAccessReportType::kAccessToCoopPageFromOpener:
return "access-to-coop-page-from-opener";
case network::mojom::CoopAccessReportType::kAccessToCoopPageFromOpenee:
return "access-to-coop-page-from-openee";
case network::mojom::CoopAccessReportType::kAccessToCoopPageFromOther:
return "access-to-coop-page-from-other";
}
}
} // namespace network } // namespace network
...@@ -34,6 +34,9 @@ struct COMPONENT_EXPORT(NETWORK_CPP_BASE) CrossOriginOpenerPolicy final { ...@@ -34,6 +34,9 @@ struct COMPONENT_EXPORT(NETWORK_CPP_BASE) CrossOriginOpenerPolicy final {
COMPONENT_EXPORT(NETWORK_CPP_BASE) COMPONENT_EXPORT(NETWORK_CPP_BASE)
bool IsAccessFromCoopPage(mojom::CoopAccessReportType); bool IsAccessFromCoopPage(mojom::CoopAccessReportType);
COMPONENT_EXPORT(NETWORK_CPP_BASE)
const char* CoopAccessReportTypeToString(mojom::CoopAccessReportType type);
} // namespace network } // namespace network
#endif // SERVICES_NETWORK_PUBLIC_CPP_CROSS_ORIGIN_OPENER_POLICY_H_ #endif // SERVICES_NETWORK_PUBLIC_CPP_CROSS_ORIGIN_OPENER_POLICY_H_
...@@ -2,6 +2,9 @@ specific_include_rules = { ...@@ -2,6 +2,9 @@ specific_include_rules = {
"ad_tracker_test.cc": [ "ad_tracker_test.cc": [
"+base/run_loop.h", "+base/run_loop.h",
], ],
"coop_access_violation_report_body.cc": [
"+services/network/public/cpp/cross_origin_opener_policy.h"
],
"frame_view.cc": [ "frame_view.cc": [
"+ui/gfx/transform.h" "+ui/gfx/transform.h"
], ],
......
...@@ -3,17 +3,26 @@ ...@@ -3,17 +3,26 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "third_party/blink/renderer/core/frame/coop_access_violation_report_body.h" #include "third_party/blink/renderer/core/frame/coop_access_violation_report_body.h"
#include "services/network/public/cpp/cross_origin_opener_policy.h"
namespace blink { namespace blink {
CoopAccessViolationReportBody::CoopAccessViolationReportBody( CoopAccessViolationReportBody::CoopAccessViolationReportBody(
std::unique_ptr<SourceLocation> source_location, std::unique_ptr<SourceLocation> source_location,
network::mojom::blink::CoopAccessReportType type,
const String& property) const String& property)
: LocationReportBody(std::move(source_location)), property_(property) {} : LocationReportBody(std::move(source_location)),
type_(type),
property_(property) {}
String CoopAccessViolationReportBody::type() const {
return network::CoopAccessReportTypeToString(type_);
}
void CoopAccessViolationReportBody::BuildJSONValue( void CoopAccessViolationReportBody::BuildJSONValue(
V8ObjectBuilder& builder) const { V8ObjectBuilder& builder) const {
LocationReportBody::BuildJSONValue(builder); LocationReportBody::BuildJSONValue(builder);
builder.AddString("type", type());
builder.AddString("property", property()); builder.AddString("property", property());
} }
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_COOP_ACCESS_VIOLATION_REPORT_BODY_H_ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_COOP_ACCESS_VIOLATION_REPORT_BODY_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_COOP_ACCESS_VIOLATION_REPORT_BODY_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_COOP_ACCESS_VIOLATION_REPORT_BODY_H_
#include "services/network/public/mojom/cross_origin_opener_policy.mojom-blink-forward.h"
#include "third_party/blink/renderer/bindings/core/v8/source_location.h" #include "third_party/blink/renderer/bindings/core/v8/source_location.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_object_builder.h" #include "third_party/blink/renderer/bindings/core/v8/v8_object_builder.h"
#include "third_party/blink/renderer/core/frame/location_report_body.h" #include "third_party/blink/renderer/core/frame/location_report_body.h"
...@@ -15,13 +16,17 @@ class CORE_EXPORT CoopAccessViolationReportBody : public LocationReportBody { ...@@ -15,13 +16,17 @@ class CORE_EXPORT CoopAccessViolationReportBody : public LocationReportBody {
DEFINE_WRAPPERTYPEINFO(); DEFINE_WRAPPERTYPEINFO();
public: public:
CoopAccessViolationReportBody(std::unique_ptr<SourceLocation> source_location, CoopAccessViolationReportBody(
const String& property); std::unique_ptr<SourceLocation> source_location,
network::mojom::blink::CoopAccessReportType type,
const String& property);
~CoopAccessViolationReportBody() final = default; ~CoopAccessViolationReportBody() final = default;
String type() const;
const String& property() const { return property_; } const String& property() const { return property_; }
void BuildJSONValue(V8ObjectBuilder& builder) const final; void BuildJSONValue(V8ObjectBuilder& builder) const final;
private: private:
network::mojom::blink::CoopAccessReportType type_;
const String property_; const String property_;
}; };
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
readonly attribute DOMString? sourceFile; readonly attribute DOMString? sourceFile;
readonly attribute unsigned long? lineNumber; readonly attribute unsigned long? lineNumber;
readonly attribute unsigned long? columnNumber; readonly attribute unsigned long? columnNumber;
readonly attribute DOMString type;
readonly attribute DOMString property; readonly attribute DOMString property;
[CallWith=ScriptState] object toJSON(); [CallWith=ScriptState] object toJSON();
}; };
...@@ -547,7 +547,8 @@ void DOMWindow::ReportCoopAccess(const char* property_name) { ...@@ -547,7 +547,8 @@ void DOMWindow::ReportCoopAccess(const char* property_name) {
ReportType::kCoopAccessViolation, ReportType::kCoopAccessViolation,
accessing_main_frame.GetDocument()->Url().GetString(), accessing_main_frame.GetDocument()->Url().GetString(),
MakeGarbageCollected<CoopAccessViolationReportBody>( MakeGarbageCollected<CoopAccessViolationReportBody>(
std::move(location), String(property_name)))); std::move(location), it->report_type,
String(property_name))));
} }
} }
......
...@@ -63,6 +63,8 @@ promise_test(async t => { ...@@ -63,6 +63,8 @@ promise_test(async t => {
assert_equals(report_access_from[0].type, "coop-access-violation"); assert_equals(report_access_from[0].type, "coop-access-violation");
assert_equals(report_access_from[0].url, opener_url.replace(/"/g, '%22')); assert_equals(report_access_from[0].url, opener_url.replace(/"/g, '%22'));
assert_source_location_found(report_access_from[0]) assert_source_location_found(report_access_from[0])
assert_equals(report_access_from[0].body.type,
"access-from-coop-page-to-openee");
// 5. The openee tries to access its opener. No reports for blocked access // 5. The openee tries to access its opener. No reports for blocked access
// to the COOP page should be dispatched. // to the COOP page should be dispatched.
...@@ -118,6 +120,8 @@ promise_test(async t => { ...@@ -118,6 +120,8 @@ promise_test(async t => {
assert_equals(report_access_from[0].url, openee_url.replace(/"/g, '%22')); assert_equals(report_access_from[0].url, openee_url.replace(/"/g, '%22'));
assert_true(report_access_from[0].body.sourceFile.includes("try-access.js")); assert_true(report_access_from[0].body.sourceFile.includes("try-access.js"));
assert_source_location_found(report_access_from[0]) assert_source_location_found(report_access_from[0])
assert_equals(report_access_from[0].body.type,
"access-from-coop-page-to-opener");
// 4. The opener tries to access its openee. No reports for blocked access // 4. The opener tries to access its openee. No reports for blocked access
// to the COOP page should be dispatched. // to the COOP page should be dispatched.
...@@ -192,6 +196,8 @@ promise_test(async t => { ...@@ -192,6 +196,8 @@ promise_test(async t => {
assert_equals(reports[0].url, opener_url.replace(/"/g, '%22')); assert_equals(reports[0].url, opener_url.replace(/"/g, '%22'));
assert_true(reports[0].body.sourceFile.includes("try-access.js")); assert_true(reports[0].body.sourceFile.includes("try-access.js"));
assert_source_location_found(reports[0]); assert_source_location_found(reports[0]);
assert_equals(reports[0].body.type,
"access-from-coop-page-to-openee");
}, "Access from same-origin iframe") }, "Access from same-origin iframe")
promise_test(async t => { promise_test(async t => {
......
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