aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/audiocontext.rs15
-rw-r--r--components/script/dom/baseaudiocontext.rs10
-rw-r--r--components/script/dom/document.rs7
-rw-r--r--components/script/dom/htmlmediaelement.rs10
-rw-r--r--components/script/dom/offlineaudiocontext.rs18
5 files changed, 31 insertions, 29 deletions
diff --git a/components/script/dom/audiocontext.rs b/components/script/dom/audiocontext.rs
index 9321bee1089..8f98586b3ea 100644
--- a/components/script/dom/audiocontext.rs
+++ b/components/script/dom/audiocontext.rs
@@ -23,7 +23,7 @@ use crate::dom::promise::Promise;
use crate::dom::window::Window;
use crate::task_source::TaskSource;
use dom_struct::dom_struct;
-use msg::constellation_msg::BrowsingContextId;
+use msg::constellation_msg::PipelineId;
use servo_media::audio::context::{LatencyCategory, ProcessingState, RealTimeAudioContextOptions};
use std::rc::Rc;
@@ -40,14 +40,11 @@ pub struct AudioContext {
impl AudioContext {
#[allow(unrooted_must_root)]
// https://webaudio.github.io/web-audio-api/#AudioContext-constructors
- fn new_inherited(
- options: &AudioContextOptions,
- browsing_context_id: BrowsingContextId,
- ) -> AudioContext {
+ fn new_inherited(options: &AudioContextOptions, pipeline_id: PipelineId) -> AudioContext {
// Steps 1-3.
let context = BaseAudioContext::new_inherited(
BaseAudioContextOptions::AudioContext(options.into()),
- browsing_context_id,
+ pipeline_id,
);
// Step 4.1.
@@ -70,8 +67,10 @@ impl AudioContext {
#[allow(unrooted_must_root)]
pub fn new(window: &Window, options: &AudioContextOptions) -> DomRoot<AudioContext> {
- let browsing_context_id = window.window_proxy().top_level_browsing_context_id().0;
- let context = AudioContext::new_inherited(options, browsing_context_id);
+ let pipeline_id = window
+ .pipeline_id()
+ .expect("Cannot create AudioContext outside of a pipeline");
+ let context = AudioContext::new_inherited(options, pipeline_id);
let context = reflect_dom_object(Box::new(context), window, AudioContextBinding::Wrap);
context.resume();
context
diff --git a/components/script/dom/baseaudiocontext.rs b/components/script/dom/baseaudiocontext.rs
index 74dd1863a75..925f5a9d27c 100644
--- a/components/script/dom/baseaudiocontext.rs
+++ b/components/script/dom/baseaudiocontext.rs
@@ -51,7 +51,7 @@ use crate::task_source::TaskSource;
use dom_struct::dom_struct;
use js::rust::CustomAutoRooterGuard;
use js::typedarray::ArrayBuffer;
-use msg::constellation_msg::BrowsingContextId;
+use msg::constellation_msg::PipelineId;
use servo_media::audio::context::{AudioContext, AudioContextOptions, ProcessingState};
use servo_media::audio::context::{OfflineAudioContextOptions, RealTimeAudioContextOptions};
use servo_media::audio::decoder::AudioDecoderCallbacks;
@@ -109,7 +109,7 @@ impl BaseAudioContext {
#[allow(unrooted_must_root)]
pub fn new_inherited(
options: BaseAudioContextOptions,
- browsing_context_id: BrowsingContextId,
+ pipeline_id: PipelineId,
) -> BaseAudioContext {
let (sample_rate, channel_count) = match options {
BaseAudioContextOptions::AudioContext(ref opt) => (opt.sample_rate, 2),
@@ -118,10 +118,8 @@ impl BaseAudioContext {
},
};
- let client_context_id = ClientContextId::build(
- browsing_context_id.namespace_id.0,
- browsing_context_id.index.0.get(),
- );
+ let client_context_id =
+ ClientContextId::build(pipeline_id.namespace_id.0, pipeline_id.index.0.get());
let context = BaseAudioContext {
eventtarget: EventTarget::new_inherited(),
audio_context_impl: ServoMedia::get()
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index fcacb4cedad..91f5e19dc7c 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -145,6 +145,7 @@ use script_traits::{
use servo_arc::Arc;
use servo_atoms::Atom;
use servo_config::pref;
+use servo_media::{ClientContextId, ServoMedia};
use servo_url::{ImmutableOrigin, MutableOrigin, ServoUrl};
use std::borrow::ToOwned;
use std::cell::{Cell, Ref, RefMut};
@@ -499,12 +500,17 @@ impl Document {
// Set the document's activity level, reflow if necessary, and suspend or resume timers.
if activity != self.activity.get() {
self.activity.set(activity);
+ let media = ServoMedia::get().unwrap();
+ let pipeline_id = self.window().pipeline_id().expect("doc with no pipeline");
+ let client_context_id =
+ ClientContextId::build(pipeline_id.namespace_id.0, pipeline_id.index.0.get());
if activity == DocumentActivity::FullyActive {
self.title_changed();
self.dirty_all_nodes();
self.window()
.reflow(ReflowGoal::Full, ReflowReason::CachedPageNeededReflow);
self.window().resume();
+ media.resume(&client_context_id);
// html.spec.whatwg.org/multipage/#history-traversal
// Step 4.6
if self.ready_state.get() == DocumentReadyState::Complete {
@@ -544,6 +550,7 @@ impl Document {
}
} else {
self.window().suspend();
+ media.suspend(&client_context_id);
}
}
}
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index ac44f43f3fa..a607c915802 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -1329,11 +1329,11 @@ impl HTMLMediaElement {
HTMLMediaElementTypeId::HTMLVideoElement => Some(self.frame_renderer.clone()),
};
- let browsing_context_id = window.window_proxy().top_level_browsing_context_id().0;
- let client_context_id = ClientContextId::build(
- browsing_context_id.namespace_id.0,
- browsing_context_id.index.0.get(),
- );
+ let pipeline_id = window
+ .pipeline_id()
+ .expect("Cannot create player outside of a pipeline");
+ let client_context_id =
+ ClientContextId::build(pipeline_id.namespace_id.0, pipeline_id.index.0.get());
let player = ServoMedia::get().unwrap().create_player(
&client_context_id,
stream_type,
diff --git a/components/script/dom/offlineaudiocontext.rs b/components/script/dom/offlineaudiocontext.rs
index 8e3776817ab..d499e79c159 100644
--- a/components/script/dom/offlineaudiocontext.rs
+++ b/components/script/dom/offlineaudiocontext.rs
@@ -23,7 +23,7 @@ use crate::dom::promise::Promise;
use crate::dom::window::Window;
use crate::task_source::TaskSource;
use dom_struct::dom_struct;
-use msg::constellation_msg::BrowsingContextId;
+use msg::constellation_msg::PipelineId;
use servo_media::audio::context::OfflineAudioContextOptions as ServoMediaOfflineAudioContextOptions;
use std::cell::Cell;
use std::rc::Rc;
@@ -47,7 +47,7 @@ impl OfflineAudioContext {
channel_count: u32,
length: u32,
sample_rate: f32,
- browsing_context_id: BrowsingContextId,
+ pipeline_id: PipelineId,
) -> OfflineAudioContext {
let options = ServoMediaOfflineAudioContextOptions {
channels: channel_count as u8,
@@ -56,7 +56,7 @@ impl OfflineAudioContext {
};
let context = BaseAudioContext::new_inherited(
BaseAudioContextOptions::OfflineAudioContext(options),
- browsing_context_id,
+ pipeline_id,
);
OfflineAudioContext {
context,
@@ -82,13 +82,11 @@ impl OfflineAudioContext {
{
return Err(Error::NotSupported);
}
- let browsing_context_id = window.window_proxy().top_level_browsing_context_id().0;
- let context = OfflineAudioContext::new_inherited(
- channel_count,
- length,
- sample_rate,
- browsing_context_id,
- );
+ let pipeline_id = window
+ .pipeline_id()
+ .expect("Cannot create audio context outside of a pipeline");
+ let context =
+ OfflineAudioContext::new_inherited(channel_count, length, sample_rate, pipeline_id);
Ok(reflect_dom_object(
Box::new(context),
window,