Reporting: Add ReportingDelegate to check site permissions

This adds a Delegate to Reporting that can eventually be plumbed to
check whether sites are allowed to store data (reports and clients).

BUG=704259,676324

Review-Url: https://codereview.chromium.org/2889193002
Cr-Commit-Position: refs/heads/master@{#473885}
diff --git a/net/reporting/reporting_delegate.h b/net/reporting/reporting_delegate.h
new file mode 100644
index 0000000..7acf4c76
--- /dev/null
+++ b/net/reporting/reporting_delegate.h
@@ -0,0 +1,46 @@
+// Copyright 2017 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 NET_REPORTING_REPORTING_DELEGATE_H_
+#define NET_REPORTING_REPORTING_DELEGATE_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "net/base/net_export.h"
+
+class GURL;
+
+namespace url {
+class Origin;
+}  // namespace url
+
+namespace net {
+
+class NET_EXPORT ReportingDelegate {
+ public:
+  virtual ~ReportingDelegate();
+
+  // Checks whether |origin| is allowed to queue reports for future delivery.
+  virtual bool CanQueueReport(const url::Origin& origin) const = 0;
+
+  // Checks whether |origin| is allowed to receive reports, either in real time
+  // or that were queued earlier.
+  virtual bool CanSendReport(const url::Origin& origin) const = 0;
+
+  // Checks whether |origin| can set |endpoint| to be used for future report
+  // deliveries.
+  virtual bool CanSetClient(const url::Origin& origin,
+                            const GURL& endpoint) const = 0;
+
+  // Checks whether |origin| can use |endpoint| for a report delivery right now.
+  virtual bool CanUseClient(const url::Origin& origin,
+                            const GURL& endpoint) const = 0;
+
+  static std::unique_ptr<ReportingDelegate> Create();
+};
+
+}  // namespace net
+
+#endif  // NET_REPORTING_REPORTING_DELEGATE_H_