Bug 1492036 - Reporting API - part 1 - WebIDL, r=smaug
authorAndrea Marchesini <amarchesini@mozilla.com>
Wed, 14 Nov 2018 20:02:32 +0100
changeset 446480 e8d5d9f9ecc80a6870155fc3d7de0ab726b114f4
parent 446401 fcbdfdfb077626ac424844baed754b9f7168ada2
child 446481 a599388cbfe7515ea0b4e616c7bb2e60624c0072
push id35042
push useraiakab@mozilla.com
push dateThu, 15 Nov 2018 09:54:38 +0000
treeherdermozilla-central@dca9c72df68b [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerssmaug
bugs1492036
milestone65.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1492036 - Reporting API - part 1 - WebIDL, r=smaug
dom/base/DOMPrefsInternal.h
dom/moz.build
dom/reporting/Report.cpp
dom/reporting/Report.h
dom/reporting/ReportBody.cpp
dom/reporting/ReportBody.h
dom/reporting/ReportingObserver.cpp
dom/reporting/ReportingObserver.h
dom/reporting/moz.build
dom/webidl/Reporting.webidl
dom/webidl/moz.build
modules/libpref/init/StaticPrefList.h
testing/web-platform/meta/reporting/__dir__.ini
testing/web-platform/meta/reporting/idlharness.window.js.ini
--- a/dom/base/DOMPrefsInternal.h
+++ b/dom/base/DOMPrefsInternal.h
@@ -23,9 +23,10 @@ DOM_WEBIDL_PREF(dom_testing_structuredcl
 DOM_WEBIDL_PREF(dom_promise_rejection_events_enabled)
 DOM_WEBIDL_PREF(dom_push_enabled)
 DOM_WEBIDL_PREF(gfx_offscreencanvas_enabled)
 DOM_WEBIDL_PREF(dom_webkitBlink_dirPicker_enabled)
 DOM_WEBIDL_PREF(dom_netinfo_enabled)
 DOM_WEBIDL_PREF(dom_fetchObserver_enabled)
 DOM_WEBIDL_PREF(dom_enable_performance_observer)
 DOM_WEBIDL_PREF(dom_performance_enable_scheduler_timing)
+DOM_WEBIDL_PREF(dom_reporting_enabled)
 DOM_WEBIDL_PREF(javascript_options_streams)
--- a/dom/moz.build
+++ b/dom/moz.build
@@ -97,16 +97,17 @@ DIRS += [
     'webbrowserpersist',
     'xhr',
     'worklet',
     'script',
     'payments',
     'websocket',
     'serviceworkers',
     'simpledb',
+    'reporting',
 ]
 
 if CONFIG['MOZ_LIBPRIO']:
     DIRS += ['prio']
 
 if CONFIG['OS_ARCH'] == 'WINNT':
     DIRS += ['plugins/ipc/hangui']
 
new file mode 100644
--- /dev/null
+++ b/dom/reporting/Report.cpp
@@ -0,0 +1,62 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/dom/Report.h"
+#include "mozilla/dom/ReportBody.h"
+#include "mozilla/dom/ReportingBinding.h"
+
+namespace mozilla {
+namespace dom {
+
+NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(Report, mWindow, mBody)
+NS_IMPL_CYCLE_COLLECTING_ADDREF(Report)
+NS_IMPL_CYCLE_COLLECTING_RELEASE(Report)
+
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Report)
+  NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
+  NS_INTERFACE_MAP_ENTRY(nsISupports)
+NS_INTERFACE_MAP_END
+
+Report::Report(nsPIDOMWindowInner* aWindow,
+               const nsAString& aType,
+               const nsAString& aURL,
+               ReportBody* aBody)
+  : mWindow(aWindow)
+  , mType(aType)
+  , mURL(aURL)
+  , mBody(aBody)
+{
+  MOZ_ASSERT(aWindow);
+}
+
+Report::~Report() = default;
+
+JSObject*
+Report::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
+{
+  return Report_Binding::Wrap(aCx, this, aGivenProto);
+}
+
+void
+Report::GetType(nsAString& aType) const
+{
+  aType = mType;
+}
+
+void
+Report::GetUrl(nsAString& aURL) const
+{
+  aURL = mURL;
+}
+
+ReportBody*
+Report::GetBody() const
+{
+  return mBody;
+}
+
+} // dom namespace
+} // mozilla namespace
new file mode 100644
--- /dev/null
+++ b/dom/reporting/Report.h
@@ -0,0 +1,63 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef mozilla_dom_Report_h
+#define mozilla_dom_Report_h
+
+#include "mozilla/Attributes.h"
+#include "mozilla/dom/BindingUtils.h"
+#include "nsCycleCollectionParticipant.h"
+#include "nsWrapperCache.h"
+
+namespace mozilla {
+namespace dom {
+
+class ReportBody;
+
+class Report final : public nsISupports
+                   , public nsWrapperCache
+{
+public:
+  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
+  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Report)
+
+  Report(nsPIDOMWindowInner* aWindow,
+         const nsAString& aType,
+         const nsAString& aURL,
+         ReportBody* aBody);
+
+  JSObject*
+  WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
+
+  nsPIDOMWindowInner*
+  GetParentObject() const
+  {
+    return mWindow;
+  }
+
+  void
+  GetType(nsAString& aType) const;
+
+  void
+  GetUrl(nsAString& aURL) const;
+
+  ReportBody*
+  GetBody() const;
+
+private:
+  ~Report();
+
+  nsCOMPtr<nsPIDOMWindowInner> mWindow;
+
+  const nsString mType;
+  const nsString mURL;
+  RefPtr<ReportBody> mBody;
+};
+
+} // dom namespace
+} // mozilla namespace
+
+#endif // mozilla_dom_Report_h
new file mode 100644
--- /dev/null
+++ b/dom/reporting/ReportBody.cpp
@@ -0,0 +1,38 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/dom/ReportBody.h"
+#include "mozilla/dom/ReportingBinding.h"
+#include "nsPIDOMWindow.h"
+
+namespace mozilla {
+namespace dom {
+
+NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(ReportBody, mWindow)
+NS_IMPL_CYCLE_COLLECTING_ADDREF(ReportBody)
+NS_IMPL_CYCLE_COLLECTING_RELEASE(ReportBody)
+
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ReportBody)
+  NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
+  NS_INTERFACE_MAP_ENTRY(nsISupports)
+NS_INTERFACE_MAP_END
+
+ReportBody::ReportBody(nsPIDOMWindowInner* aWindow)
+  : mWindow(aWindow)
+{
+  MOZ_ASSERT(aWindow);
+}
+
+ReportBody::~ReportBody() = default;
+
+JSObject*
+ReportBody::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
+{
+  return ReportBody_Binding::Wrap(aCx, this, aGivenProto);
+}
+
+} // dom namespace
+} // mozilla namespace
new file mode 100644
--- /dev/null
+++ b/dom/reporting/ReportBody.h
@@ -0,0 +1,47 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef mozilla_dom_ReportBody_h
+#define mozilla_dom_ReportBody_h
+
+#include "mozilla/Attributes.h"
+#include "mozilla/dom/BindingUtils.h"
+#include "nsCycleCollectionParticipant.h"
+#include "nsWrapperCache.h"
+
+class nsPIDOMWindowInner;
+
+namespace mozilla {
+namespace dom {
+
+class ReportBody final : public nsISupports
+                       , public nsWrapperCache
+{
+public:
+  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
+  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ReportBody)
+
+  explicit ReportBody(nsPIDOMWindowInner* aWindow);
+
+  JSObject*
+  WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
+
+  nsPIDOMWindowInner*
+  GetParentObject() const
+  {
+    return mWindow;
+  }
+
+private:
+  ~ReportBody();
+
+  nsCOMPtr<nsPIDOMWindowInner> mWindow;
+};
+
+} // dom namespace
+} // mozilla namespace
+
+#endif // mozilla_dom_ReportBody_h
new file mode 100644
--- /dev/null
+++ b/dom/reporting/ReportingObserver.cpp
@@ -0,0 +1,98 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/dom/ReportingObserver.h"
+#include "mozilla/dom/ReportingBinding.h"
+#include "nsContentUtils.h"
+#include "nsGlobalWindowInner.h"
+
+namespace mozilla {
+namespace dom {
+
+NS_IMPL_CYCLE_COLLECTION_CLASS(ReportingObserver)
+NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ReportingObserver)
+  tmp->Disconnect();
+  NS_IMPL_CYCLE_COLLECTION_UNLINK(mWindow)
+  NS_IMPL_CYCLE_COLLECTION_UNLINK(mCallback)
+  NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER
+NS_IMPL_CYCLE_COLLECTION_UNLINK_END
+
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(ReportingObserver)
+  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mWindow)
+  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCallback)
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
+NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(ReportingObserver)
+
+NS_IMPL_CYCLE_COLLECTING_ADDREF(ReportingObserver)
+NS_IMPL_CYCLE_COLLECTING_RELEASE(ReportingObserver)
+
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ReportingObserver)
+  NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
+  NS_INTERFACE_MAP_ENTRY(nsISupports)
+NS_INTERFACE_MAP_END
+
+/* static */ already_AddRefed<ReportingObserver>
+ReportingObserver::Constructor(const GlobalObject& aGlobal,
+                               ReportingObserverCallback& aCallback,
+                               const ReportingObserverOptions& aOptions,
+                               ErrorResult& aRv)
+{
+  nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(aGlobal.GetAsSupports());
+  MOZ_ASSERT(window);
+
+  nsTArray<nsString> types;
+  if (aOptions.mTypes.WasPassed()) {
+    types = aOptions.mTypes.Value();
+  }
+
+  RefPtr<ReportingObserver> ro =
+    new ReportingObserver(window, aCallback, types, aOptions.mBuffered);
+  return ro.forget();
+}
+
+ReportingObserver::ReportingObserver(nsPIDOMWindowInner* aWindow,
+                                     ReportingObserverCallback& aCallback,
+                                     const nsTArray<nsString>& aTypes,
+                                     bool aBuffered)
+  : mWindow(aWindow)
+  , mCallback(&aCallback)
+  , mTypes(aTypes)
+  , mBuffered(aBuffered)
+{
+  MOZ_ASSERT(aWindow);
+}
+
+ReportingObserver::~ReportingObserver()
+{
+  Disconnect();
+}
+
+JSObject*
+ReportingObserver::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
+{
+  return ReportingObserver_Binding::Wrap(aCx, this, aGivenProto);
+}
+
+void
+ReportingObserver::Observe()
+{
+  // TODO
+}
+
+void
+ReportingObserver::Disconnect()
+{
+  // TODO
+}
+
+void
+ReportingObserver::TakeRecords(nsTArray<RefPtr<Report>>& aRecords)
+{
+  // TODO
+}
+
+} // dom namespace
+} // mozilla namespace
new file mode 100644
--- /dev/null
+++ b/dom/reporting/ReportingObserver.h
@@ -0,0 +1,68 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef mozilla_dom_ReportingObserver_h
+#define mozilla_dom_ReportingObserver_h
+
+#include "mozilla/Attributes.h"
+#include "mozilla/dom/BindingUtils.h"
+#include "nsCycleCollectionParticipant.h"
+#include "nsWrapperCache.h"
+
+class nsPIDOMWindowInner;
+
+namespace mozilla {
+namespace dom {
+
+class ReportingObserver final : public nsISupports
+                              , public nsWrapperCache
+{
+public:
+  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
+  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ReportingObserver)
+
+  static already_AddRefed<ReportingObserver>
+  Constructor(const GlobalObject& aGlobal,
+              ReportingObserverCallback& aCallback,
+              const ReportingObserverOptions& aOptions,
+              ErrorResult& aRv);
+
+  ReportingObserver(nsPIDOMWindowInner* aWindow,
+                    ReportingObserverCallback& aCallback,
+                    const nsTArray<nsString>& aTypes,
+                    bool aBuffered);
+
+  JSObject*
+  WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
+
+  nsPIDOMWindowInner*
+  GetParentObject() const
+  {
+    return mWindow;
+  }
+
+  void
+  Observe();
+
+  void
+  Disconnect();
+
+  void
+  TakeRecords(nsTArray<RefPtr<Report>>& aRecords);
+
+private:
+  ~ReportingObserver();
+
+  nsCOMPtr<nsPIDOMWindowInner> mWindow;
+  RefPtr<ReportingObserverCallback> mCallback;
+  nsTArray<nsString> mTypes;
+  bool mBuffered;
+};
+
+} // dom namespace
+} // mozilla namespace
+
+#endif // mozilla_dom_ReportingObserver_h
new file mode 100644
--- /dev/null
+++ b/dom/reporting/moz.build
@@ -0,0 +1,24 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+EXPORTS.mozilla.dom = [
+    'Report.h',
+    'ReportBody.h',
+    'ReportingObserver.h',
+]
+
+UNIFIED_SOURCES += [
+    'Report.cpp',
+    'ReportBody.cpp',
+    'ReportingObserver.cpp',
+]
+
+include('/ipc/chromium/chromium-config.mozbuild')
+
+with Files('**'):
+    BUG_COMPONENT = ('DOM', 'Security')
+
+FINAL_LIBRARY = 'xul'
new file mode 100644
--- /dev/null
+++ b/dom/webidl/Reporting.webidl
@@ -0,0 +1,36 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * The origin of this IDL file is
+ * https://w3c.github.io/reporting/#interface-reporting-observer
+ */
+
+[Func="mozilla::dom::DOMPrefs::dom_reporting_enabled"]
+interface ReportBody {
+};
+
+[Func="mozilla::dom::DOMPrefs::dom_reporting_enabled"]
+interface Report {
+  readonly attribute DOMString type;
+  readonly attribute DOMString url;
+  readonly attribute ReportBody? body;
+};
+
+[Constructor(ReportingObserverCallback callback, optional ReportingObserverOptions options),
+ Func="mozilla::dom::DOMPrefs::dom_reporting_enabled"]
+interface ReportingObserver {
+  void observe();
+  void disconnect();
+  ReportList takeRecords();
+};
+
+callback ReportingObserverCallback = void (sequence<Report> reports, ReportingObserver observer);
+
+dictionary ReportingObserverOptions {
+  sequence<DOMString> types;
+  boolean buffered = false;
+};
+
+typedef sequence<Report> ReportList;
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -735,16 +735,17 @@ WEBIDL_FILES = [
     'PushEvent.webidl',
     'PushManager.webidl',
     'PushManager.webidl',
     'PushMessageData.webidl',
     'PushSubscription.webidl',
     'PushSubscriptionOptions.webidl',
     'RadioNodeList.webidl',
     'Range.webidl',
+    'Reporting.webidl',
     'Request.webidl',
     'Response.webidl',
     'RTCStatsReport.webidl',
     'Screen.webidl',
     'ScreenOrientation.webidl',
     'ScriptProcessorNode.webidl',
     'ScrollAreaEvent.webidl',
     'Selection.webidl',
--- a/modules/libpref/init/StaticPrefList.h
+++ b/modules/libpref/init/StaticPrefList.h
@@ -1776,12 +1776,22 @@ VARCACHE_PREF(
 VARCACHE_PREF(
   "dom.security.featurePolicy.enabled",
    dom_security_featurePolicy_enabled,
   bool, PREF_VALUE
 )
 #undef PREF_VALUE
 
 //---------------------------------------------------------------------------
+// Reporting API
+//---------------------------------------------------------------------------
+
+VARCACHE_PREF(
+  "dom.reporting.enabled",
+   dom_reporting_enabled,
+  RelaxedAtomicBool, false
+)
+
+//---------------------------------------------------------------------------
 // End of prefs
 //---------------------------------------------------------------------------
 
 // clang-format on
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/reporting/__dir__.ini
@@ -0,0 +1,1 @@
+prefs: [dom.reporting.enabled:true]
--- a/testing/web-platform/meta/reporting/idlharness.window.js.ini
+++ b/testing/web-platform/meta/reporting/idlharness.window.js.ini
@@ -1,166 +1,94 @@
 [idlharness.window.html]
-  [ReportingObserver interface: operation disconnect()]
-    expected: FAIL
-
   [DeprecationReportBody interface object length]
     expected: FAIL
 
   [DeprecationReportBody interface: existence and properties of interface prototype object's "constructor" property]
     expected: FAIL
 
-  [ReportBody interface: existence and properties of interface prototype object's "constructor" property]
-    expected: FAIL
-
   [DeprecationReportBody interface: attribute lineNumber]
     expected: FAIL
 
-  [Report interface: attribute body]
-    expected: FAIL
-
-  [Report interface: existence and properties of interface prototype object's @@unscopables property]
-    expected: FAIL
-
-  [ReportBody interface object length]
-    expected: FAIL
-
-  [ReportingObserver interface: existence and properties of interface prototype object]
-    expected: FAIL
-
   [DeprecationReportBody interface object name]
     expected: FAIL
 
   [DeprecationReportBody interface: attribute anticipatedRemoval]
     expected: FAIL
 
-  [ReportingObserver interface: existence and properties of interface prototype object's "constructor" property]
-    expected: FAIL
-
   [CrashReportBody interface: existence and properties of interface prototype object]
     expected: FAIL
 
   [CrashReportBody interface: existence and properties of interface prototype object's @@unscopables property]
     expected: FAIL
 
-  [Report interface object name]
-    expected: FAIL
-
   [DeprecationReportBody interface: existence and properties of interface prototype object]
     expected: FAIL
 
   [DeprecationReportBody interface: attribute message]
     expected: FAIL
 
   [CrashReportBody interface: attribute reason]
     expected: FAIL
 
   [DeprecationReportBody interface: attribute columnNumber]
     expected: FAIL
 
-  [Report interface: existence and properties of interface prototype object]
-    expected: FAIL
-
-  [ReportingObserver interface object length]
-    expected: FAIL
-
   [InterventionReportBody interface: attribute lineNumber]
     expected: FAIL
 
   [DeprecationReportBody interface: existence and properties of interface prototype object's @@unscopables property]
     expected: FAIL
 
-  [ReportBody interface object name]
-    expected: FAIL
-
-  [ReportingObserver interface: operation takeRecords()]
-    expected: FAIL
-
   [InterventionReportBody interface: attribute id]
     expected: FAIL
 
   [CrashReportBody interface object name]
     expected: FAIL
 
-  [Report interface object length]
-    expected: FAIL
-
-  [ReportingObserver interface: operation observe()]
-    expected: FAIL
-
   [InterventionReportBody interface: attribute columnNumber]
     expected: FAIL
 
-  [Report interface: existence and properties of interface object]
-    expected: FAIL
-
   [CrashReportBody interface: existence and properties of interface object]
     expected: FAIL
 
   [InterventionReportBody interface: existence and properties of interface prototype object's "constructor" property]
     expected: FAIL
 
   [InterventionReportBody interface: existence and properties of interface prototype object's @@unscopables property]
     expected: FAIL
 
   [InterventionReportBody interface object length]
     expected: FAIL
 
   [DeprecationReportBody interface: attribute sourceFile]
     expected: FAIL
 
-  [Report interface: attribute type]
-    expected: FAIL
-
   [CrashReportBody interface object length]
     expected: FAIL
 
   [DeprecationReportBody interface: attribute id]
     expected: FAIL
 
   [CrashReportBody interface: attribute crashId]
     expected: FAIL
 
   [InterventionReportBody interface: existence and properties of interface object]
     expected: FAIL
 
-  [Report interface: existence and properties of interface prototype object's "constructor" property]
-    expected: FAIL
-
   [InterventionReportBody interface: existence and properties of interface prototype object]
     expected: FAIL
 
   [CrashReportBody interface: existence and properties of interface prototype object's "constructor" property]
     expected: FAIL
 
-  [ReportBody interface: existence and properties of interface prototype object]
-    expected: FAIL
-
-  [ReportBody interface: existence and properties of interface prototype object's @@unscopables property]
-    expected: FAIL
-
   [InterventionReportBody interface object name]
     expected: FAIL
 
   [InterventionReportBody interface: attribute message]
     expected: FAIL
 
-  [ReportBody interface: existence and properties of interface object]
-    expected: FAIL
-
   [DeprecationReportBody interface: existence and properties of interface object]
     expected: FAIL
 
   [InterventionReportBody interface: attribute sourceFile]
     expected: FAIL
 
-  [ReportingObserver interface: existence and properties of interface prototype object's @@unscopables property]
-    expected: FAIL
-
-  [ReportingObserver interface: existence and properties of interface object]
-    expected: FAIL
-
-  [ReportingObserver interface object name]
-    expected: FAIL
-
-  [Report interface: attribute url]
-    expected: FAIL
-