// 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_CSP_EXECUTION_CONTEXT_CSP_DELEGATE_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_CSP_EXECUTION_CONTEXT_CSP_DELEGATE_H_

#include "third_party/blink/public/mojom/security_context/insecure_request_policy.mojom-blink-forward.h"
#include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"

namespace blink {

class Document;
class ExecutionContext;
class SecurityContext;

class ExecutionContextCSPDelegate final
    : public GarbageCollected<ExecutionContextCSPDelegate>,
      public ContentSecurityPolicyDelegate {
 public:
  explicit ExecutionContextCSPDelegate(ExecutionContext&);

  void Trace(Visitor*) const override;

  // ContentSecurityPolicyDelegate overrides:
  const SecurityOrigin* GetSecurityOrigin() override;
  const KURL& Url() const override;
  void SetSandboxFlags(network::mojom::blink::WebSandboxFlags) override;
  void SetRequireTrustedTypes() override;
  void AddInsecureRequestPolicy(mojom::blink::InsecureRequestPolicy) override;
  std::unique_ptr<SourceLocation> GetSourceLocation() override;
  base::Optional<uint16_t> GetStatusCode() override;
  String GetDocumentReferrer() override;
  void DispatchViolationEvent(const SecurityPolicyViolationEventInit&,
                              Element*) override;
  void PostViolationReport(const SecurityPolicyViolationEventInit&,
                           const String& stringified_report,
                           bool is_frame_ancestors_violation,
                           const Vector<String>& report_endpoints,
                           bool use_reporting_api) override;
  void Count(WebFeature) override;
  void AddConsoleMessage(ConsoleMessage*) override;
  void AddInspectorIssue(mojom::blink::InspectorIssueInfoPtr) override;
  void DisableEval(const String& error_message) override;
  void ReportBlockedScriptExecutionToInspector(
      const String& directive_text) override;
  void DidAddContentSecurityPolicies(
      WTF::Vector<network::mojom::blink::ContentSecurityPolicyPtr>) override;

 private:
  SecurityContext& GetSecurityContext();
  Document* GetDocument();
  void DispatchViolationEventInternal(const SecurityPolicyViolationEventInit*,
                                      Element*);

  const Member<ExecutionContext> execution_context_;
};

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_CSP_EXECUTION_CONTEXT_CSP_DELEGATE_H_
