1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_CSP_CSP_VIOLATION_REPORT_BODY_H_
6 #define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_CSP_CSP_VIOLATION_REPORT_BODY_H_
7 
8 #include "third_party/blink/renderer/bindings/core/v8/source_location.h"
9 #include "third_party/blink/renderer/bindings/core/v8/v8_object_builder.h"
10 #include "third_party/blink/renderer/bindings/core/v8/v8_security_policy_violation_event_init.h"
11 #include "third_party/blink/renderer/core/frame/location_report_body.h"
12 
13 namespace blink {
14 
15 class CORE_EXPORT CSPViolationReportBody : public LocationReportBody {
16   DEFINE_WRAPPERTYPEINFO();
17 
18  public:
CSPViolationReportBody(const SecurityPolicyViolationEventInit & violation_data)19   explicit CSPViolationReportBody(
20       const SecurityPolicyViolationEventInit& violation_data)
21       : LocationReportBody(violation_data.sourceFile(),
22                            violation_data.lineNumber(),
23                            violation_data.columnNumber()),
24         document_url_(violation_data.documentURI()),
25         referrer_(violation_data.referrer()),
26         blocked_url_(violation_data.blockedURI()),
27         effective_directive_(violation_data.effectiveDirective()),
28         original_policy_(violation_data.originalPolicy()),
29         sample_(violation_data.sample()),
30         disposition_(violation_data.disposition()),
31         status_code_(violation_data.statusCode()) {}
32 
33   ~CSPViolationReportBody() override = default;
34 
documentURL()35   const String& documentURL() const { return document_url_; }
referrer()36   const String& referrer() const { return referrer_; }
blockedURL()37   const String& blockedURL() const { return blocked_url_; }
effectiveDirective()38   const String& effectiveDirective() const { return effective_directive_; }
originalPolicy()39   const String& originalPolicy() const { return original_policy_; }
sample()40   const String& sample() const { return sample_; }
disposition()41   const String& disposition() const { return disposition_; }
statusCode()42   uint16_t statusCode() const { return status_code_; }
43 
44   void BuildJSONValue(V8ObjectBuilder& builder) const override;
45 
46  private:
47   const String document_url_;
48   const String referrer_;
49   const String blocked_url_;
50   const String effective_directive_;
51   const String original_policy_;
52   const String sample_;
53   const String disposition_;
54   const uint16_t status_code_;
55 };
56 
57 }  // namespace blink
58 
59 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_CSP_CSP_VIOLATION_REPORT_BODY_H_
60