mirror of
https://github.com/servo/servo.git
synced 2025-07-16 03:43:38 +01:00
Add support for Reporting-Endpoints (#37965)
Does not yet handle failures of endpoints, which requires us to update metadata. I don't see that metadata being used anywhere, so I am not sure if there is WPT coverage for it. Part of #37238 Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
This commit is contained in:
parent
16aca5516d
commit
70c57c6136
13 changed files with 439 additions and 22 deletions
|
@ -46,6 +46,7 @@ use crate::dom::bindings::codegen::UnionTypes::{
|
|||
};
|
||||
use crate::dom::bindings::error::{Error, ErrorResult, Fallible, report_pending_exception};
|
||||
use crate::dom::bindings::inheritance::Castable;
|
||||
use crate::dom::bindings::refcounted::Trusted;
|
||||
use crate::dom::bindings::reflector::DomObject;
|
||||
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
|
||||
use crate::dom::bindings::settings_stack::AutoEntryScript;
|
||||
|
@ -57,6 +58,7 @@ use crate::dom::globalscope::GlobalScope;
|
|||
use crate::dom::idbfactory::IDBFactory;
|
||||
use crate::dom::performance::Performance;
|
||||
use crate::dom::promise::Promise;
|
||||
use crate::dom::reportingendpoint::{ReportingEndpoint, SendReportsToEndpoints};
|
||||
use crate::dom::reportingobserver::ReportingObserver;
|
||||
use crate::dom::trustedscripturl::TrustedScriptURL;
|
||||
use crate::dom::trustedtypepolicyfactory::TrustedTypePolicyFactory;
|
||||
|
@ -147,6 +149,10 @@ pub(crate) struct WorkerGlobalScope {
|
|||
|
||||
/// <https://w3c.github.io/reporting/#windoworworkerglobalscope-reports>
|
||||
report_list: DomRefCell<Vec<Report>>,
|
||||
|
||||
/// <https://w3c.github.io/reporting/#windoworworkerglobalscope-endpoints>
|
||||
#[no_trace]
|
||||
endpoints_list: DomRefCell<Vec<ReportingEndpoint>>,
|
||||
}
|
||||
|
||||
impl WorkerGlobalScope {
|
||||
|
@ -206,6 +212,7 @@ impl WorkerGlobalScope {
|
|||
trusted_types: Default::default(),
|
||||
reporting_observer_list: Default::default(),
|
||||
report_list: Default::default(),
|
||||
endpoints_list: Default::default(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -292,12 +299,30 @@ impl WorkerGlobalScope {
|
|||
|
||||
pub(crate) fn append_report(&self, report: Report) {
|
||||
self.report_list.borrow_mut().push(report);
|
||||
let trusted_worker = Trusted::new(self);
|
||||
self.upcast::<GlobalScope>()
|
||||
.task_manager()
|
||||
.dom_manipulation_task_source()
|
||||
.queue(task!(send_to_reporting_endpoints: move || {
|
||||
let worker = trusted_worker.root();
|
||||
let reports = std::mem::take(&mut *worker.report_list.borrow_mut());
|
||||
worker.upcast::<GlobalScope>().send_reports_to_endpoints(
|
||||
reports,
|
||||
worker.endpoints_list.borrow().clone(),
|
||||
);
|
||||
}));
|
||||
}
|
||||
|
||||
pub(crate) fn buffered_reports(&self) -> Vec<Report> {
|
||||
self.report_list.borrow().clone()
|
||||
}
|
||||
|
||||
pub(crate) fn set_endpoints_list(&self, endpoints: Option<Vec<ReportingEndpoint>>) {
|
||||
if let Some(endpoints) = endpoints {
|
||||
*self.endpoints_list.borrow_mut() = endpoints;
|
||||
}
|
||||
}
|
||||
|
||||
/// Get a mutable reference to the [`TimerScheduler`] for this [`ServiceWorkerGlobalScope`].
|
||||
pub(crate) fn timer_scheduler(&self) -> RefMut<TimerScheduler> {
|
||||
self.timer_scheduler.borrow_mut()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue