mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Make CanGc derive Copy and Clone (#33407)
Signed-off-by: Taym <haddadi.taym@gmail.com>
This commit is contained in:
parent
637770600f
commit
747e562ff0
15 changed files with 61 additions and 72 deletions
|
@ -101,7 +101,7 @@ pub trait WorkerEventLoopMethods {
|
||||||
pub fn run_worker_event_loop<T, WorkerMsg, Event>(
|
pub fn run_worker_event_loop<T, WorkerMsg, Event>(
|
||||||
worker_scope: &T,
|
worker_scope: &T,
|
||||||
worker: Option<&TrustedWorkerAddress>,
|
worker: Option<&TrustedWorkerAddress>,
|
||||||
_can_gc: CanGc,
|
can_gc: CanGc,
|
||||||
) where
|
) where
|
||||||
WorkerMsg: QueuedTaskConversion + Send,
|
WorkerMsg: QueuedTaskConversion + Send,
|
||||||
T: WorkerEventLoopMethods<WorkerMsg = WorkerMsg, Event = Event>
|
T: WorkerEventLoopMethods<WorkerMsg = WorkerMsg, Event = Event>
|
||||||
|
@ -156,7 +156,7 @@ pub fn run_worker_event_loop<T, WorkerMsg, Event>(
|
||||||
};
|
};
|
||||||
worker_scope
|
worker_scope
|
||||||
.upcast::<GlobalScope>()
|
.upcast::<GlobalScope>()
|
||||||
.perform_a_microtask_checkpoint(CanGc::note());
|
.perform_a_microtask_checkpoint(can_gc);
|
||||||
}
|
}
|
||||||
worker_scope
|
worker_scope
|
||||||
.upcast::<GlobalScope>()
|
.upcast::<GlobalScope>()
|
||||||
|
|
|
@ -1239,10 +1239,10 @@ impl ElementQueue {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <https://html.spec.whatwg.org/multipage/#invoke-custom-element-reactions>
|
/// <https://html.spec.whatwg.org/multipage/#invoke-custom-element-reactions>
|
||||||
fn invoke_reactions(&self, _can_gc: CanGc) {
|
fn invoke_reactions(&self, can_gc: CanGc) {
|
||||||
// Steps 1-2
|
// Steps 1-2
|
||||||
while let Some(element) = self.next_element() {
|
while let Some(element) = self.next_element() {
|
||||||
element.invoke_reactions(CanGc::note())
|
element.invoke_reactions(can_gc)
|
||||||
}
|
}
|
||||||
self.queue.borrow_mut().clear();
|
self.queue.borrow_mut().clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -333,7 +333,7 @@ impl DedicatedWorkerGlobalScope {
|
||||||
gpu_id_hub: Arc<Identities>,
|
gpu_id_hub: Arc<Identities>,
|
||||||
control_receiver: Receiver<DedicatedWorkerControlMsg>,
|
control_receiver: Receiver<DedicatedWorkerControlMsg>,
|
||||||
context_sender: Sender<ContextForRequestInterrupt>,
|
context_sender: Sender<ContextForRequestInterrupt>,
|
||||||
_can_gc: CanGc,
|
can_gc: CanGc,
|
||||||
) -> JoinHandle<()> {
|
) -> JoinHandle<()> {
|
||||||
let serialized_worker_url = worker_url.to_string();
|
let serialized_worker_url = worker_url.to_string();
|
||||||
let top_level_browsing_context_id = TopLevelBrowsingContextId::installed();
|
let top_level_browsing_context_id = TopLevelBrowsingContextId::installed();
|
||||||
|
@ -479,7 +479,7 @@ impl DedicatedWorkerGlobalScope {
|
||||||
// until the event loop is destroyed,
|
// until the event loop is destroyed,
|
||||||
// which happens after the closing flag is set to true.
|
// which happens after the closing flag is set to true.
|
||||||
while !scope.is_closing() {
|
while !scope.is_closing() {
|
||||||
run_worker_event_loop(&*global, Some(&worker), CanGc::note());
|
run_worker_event_loop(&*global, Some(&worker), can_gc);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
reporter_name,
|
reporter_name,
|
||||||
|
|
|
@ -399,7 +399,7 @@ impl Element {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn invoke_reactions(&self, _can_gc: CanGc) {
|
pub fn invoke_reactions(&self, can_gc: CanGc) {
|
||||||
loop {
|
loop {
|
||||||
rooted_vec!(let mut reactions);
|
rooted_vec!(let mut reactions);
|
||||||
match *self.rare_data_mut() {
|
match *self.rare_data_mut() {
|
||||||
|
@ -414,7 +414,7 @@ impl Element {
|
||||||
}
|
}
|
||||||
|
|
||||||
for reaction in reactions.iter() {
|
for reaction in reactions.iter() {
|
||||||
reaction.invoke(self, CanGc::note());
|
reaction.invoke(self, can_gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
reactions.clear();
|
reactions.clear();
|
||||||
|
|
|
@ -450,13 +450,13 @@ impl HTMLImageElement {
|
||||||
(ImageResponse::Loaded(image, url), ImageRequestPhase::Pending) => {
|
(ImageResponse::Loaded(image, url), ImageRequestPhase::Pending) => {
|
||||||
self.abort_request(State::Unavailable, ImageRequestPhase::Pending, can_gc);
|
self.abort_request(State::Unavailable, ImageRequestPhase::Pending, can_gc);
|
||||||
self.image_request.set(ImageRequestPhase::Current);
|
self.image_request.set(ImageRequestPhase::Current);
|
||||||
self.handle_loaded_image(image, url, CanGc::note());
|
self.handle_loaded_image(image, url, can_gc);
|
||||||
(true, false)
|
(true, false)
|
||||||
},
|
},
|
||||||
(ImageResponse::PlaceholderLoaded(image, url), ImageRequestPhase::Pending) => {
|
(ImageResponse::PlaceholderLoaded(image, url), ImageRequestPhase::Pending) => {
|
||||||
self.abort_request(State::Unavailable, ImageRequestPhase::Pending, can_gc);
|
self.abort_request(State::Unavailable, ImageRequestPhase::Pending, can_gc);
|
||||||
self.image_request.set(ImageRequestPhase::Current);
|
self.image_request.set(ImageRequestPhase::Current);
|
||||||
self.handle_loaded_image(image, url, CanGc::note());
|
self.handle_loaded_image(image, url, can_gc);
|
||||||
(false, true)
|
(false, true)
|
||||||
},
|
},
|
||||||
(ImageResponse::MetadataLoaded(meta), ImageRequestPhase::Current) => {
|
(ImageResponse::MetadataLoaded(meta), ImageRequestPhase::Current) => {
|
||||||
|
@ -474,7 +474,7 @@ impl HTMLImageElement {
|
||||||
},
|
},
|
||||||
(ImageResponse::None, ImageRequestPhase::Pending) => {
|
(ImageResponse::None, ImageRequestPhase::Pending) => {
|
||||||
self.abort_request(State::Broken, ImageRequestPhase::Current, can_gc);
|
self.abort_request(State::Broken, ImageRequestPhase::Current, can_gc);
|
||||||
self.abort_request(State::Broken, ImageRequestPhase::Pending, CanGc::note());
|
self.abort_request(State::Broken, ImageRequestPhase::Pending, can_gc);
|
||||||
self.image_request.set(ImageRequestPhase::Current);
|
self.image_request.set(ImageRequestPhase::Current);
|
||||||
(false, true)
|
(false, true)
|
||||||
},
|
},
|
||||||
|
@ -874,7 +874,7 @@ impl HTMLImageElement {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
self.fetch_image(url, CanGc::note());
|
self.fetch_image(url, can_gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Step 8-12 of html.spec.whatwg.org/multipage/#update-the-image-data
|
/// Step 8-12 of html.spec.whatwg.org/multipage/#update-the-image-data
|
||||||
|
@ -888,7 +888,7 @@ impl HTMLImageElement {
|
||||||
Some(data) => data,
|
Some(data) => data,
|
||||||
None => {
|
None => {
|
||||||
self.abort_request(State::Broken, ImageRequestPhase::Current, can_gc);
|
self.abort_request(State::Broken, ImageRequestPhase::Current, can_gc);
|
||||||
self.abort_request(State::Broken, ImageRequestPhase::Pending, CanGc::note());
|
self.abort_request(State::Broken, ImageRequestPhase::Pending, can_gc);
|
||||||
// Step 9.
|
// Step 9.
|
||||||
// FIXME(nox): Why are errors silenced here?
|
// FIXME(nox): Why are errors silenced here?
|
||||||
let _ = task_source.queue(
|
let _ = task_source.queue(
|
||||||
|
@ -923,7 +923,7 @@ impl HTMLImageElement {
|
||||||
},
|
},
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
self.abort_request(State::Broken, ImageRequestPhase::Current, can_gc);
|
self.abort_request(State::Broken, ImageRequestPhase::Current, can_gc);
|
||||||
self.abort_request(State::Broken, ImageRequestPhase::Pending, CanGc::note());
|
self.abort_request(State::Broken, ImageRequestPhase::Pending, can_gc);
|
||||||
// Step 12.1-12.5.
|
// Step 12.1-12.5.
|
||||||
let src = src.0;
|
let src = src.0;
|
||||||
// FIXME(nox): Why are errors silenced here?
|
// FIXME(nox): Why are errors silenced here?
|
||||||
|
@ -1011,11 +1011,7 @@ impl HTMLImageElement {
|
||||||
ImageRequestPhase::Current,
|
ImageRequestPhase::Current,
|
||||||
can_gc,
|
can_gc,
|
||||||
);
|
);
|
||||||
self.abort_request(
|
self.abort_request(State::Unavailable, ImageRequestPhase::Pending, can_gc);
|
||||||
State::Unavailable,
|
|
||||||
ImageRequestPhase::Pending,
|
|
||||||
CanGc::note(),
|
|
||||||
);
|
|
||||||
let mut current_request = self.current_request.borrow_mut();
|
let mut current_request = self.current_request.borrow_mut();
|
||||||
current_request.final_url = Some(img_url.clone());
|
current_request.final_url = Some(img_url.clone());
|
||||||
current_request.image = Some(image.clone());
|
current_request.image = Some(image.clone());
|
||||||
|
@ -1069,7 +1065,7 @@ impl HTMLImageElement {
|
||||||
elem: &HTMLImageElement,
|
elem: &HTMLImageElement,
|
||||||
selected_source: String,
|
selected_source: String,
|
||||||
selected_pixel_density: f64,
|
selected_pixel_density: f64,
|
||||||
_can_gc: CanGc,
|
can_gc: CanGc,
|
||||||
) -> IpcSender<PendingImageResponse> {
|
) -> IpcSender<PendingImageResponse> {
|
||||||
let trusted_node = Trusted::new(elem);
|
let trusted_node = Trusted::new(elem);
|
||||||
let (responder_sender, responder_receiver) = ipc::channel().unwrap();
|
let (responder_sender, responder_receiver) = ipc::channel().unwrap();
|
||||||
|
@ -1095,7 +1091,7 @@ impl HTMLImageElement {
|
||||||
if generation == element.generation.get() {
|
if generation == element.generation.get() {
|
||||||
element.process_image_response_for_environment_change(image,
|
element.process_image_response_for_environment_change(image,
|
||||||
USVString::from(selected_source_clone), generation,
|
USVString::from(selected_source_clone), generation,
|
||||||
selected_pixel_density, CanGc::note());
|
selected_pixel_density, can_gc);
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
&canceller,
|
&canceller,
|
||||||
|
@ -1150,7 +1146,7 @@ impl HTMLImageElement {
|
||||||
&mut self.pending_request.borrow_mut(),
|
&mut self.pending_request.borrow_mut(),
|
||||||
&img_url,
|
&img_url,
|
||||||
&selected_source,
|
&selected_source,
|
||||||
CanGc::note(),
|
can_gc,
|
||||||
);
|
);
|
||||||
|
|
||||||
let window = window_from_node(self);
|
let window = window_from_node(self);
|
||||||
|
@ -1161,7 +1157,7 @@ impl HTMLImageElement {
|
||||||
self,
|
self,
|
||||||
selected_source.0.clone(),
|
selected_source.0.clone(),
|
||||||
selected_pixel_density,
|
selected_pixel_density,
|
||||||
CanGc::note(),
|
can_gc,
|
||||||
);
|
);
|
||||||
let cache_result = image_cache.track_image(
|
let cache_result = image_cache.track_image(
|
||||||
img_url.clone(),
|
img_url.clone(),
|
||||||
|
@ -1382,7 +1378,7 @@ impl HTMLImageElement {
|
||||||
|
|
||||||
// run update_the_image_data when the element is created.
|
// run update_the_image_data when the element is created.
|
||||||
// https://html.spec.whatwg.org/multipage/#when-to-obtain-images
|
// https://html.spec.whatwg.org/multipage/#when-to-obtain-images
|
||||||
image.update_the_image_data(CanGc::note());
|
image.update_the_image_data(can_gc);
|
||||||
|
|
||||||
Ok(image)
|
Ok(image)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1352,7 +1352,7 @@ impl HTMLMediaElement {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup_media_player(&self, resource: &Resource, _can_gc: CanGc) -> Result<(), ()> {
|
fn setup_media_player(&self, resource: &Resource, can_gc: CanGc) -> Result<(), ()> {
|
||||||
let stream_type = match *resource {
|
let stream_type = match *resource {
|
||||||
Resource::Object => {
|
Resource::Object => {
|
||||||
if let Some(ref src_object) = *self.src_object.borrow() {
|
if let Some(ref src_object) = *self.src_object.borrow() {
|
||||||
|
@ -1403,7 +1403,7 @@ impl HTMLMediaElement {
|
||||||
let this = trusted_node.clone();
|
let this = trusted_node.clone();
|
||||||
if let Err(err) = task_source.queue_with_canceller(
|
if let Err(err) = task_source.queue_with_canceller(
|
||||||
task!(handle_player_event: move || {
|
task!(handle_player_event: move || {
|
||||||
this.root().handle_player_event(&event, CanGc::note());
|
this.root().handle_player_event(&event, can_gc);
|
||||||
}),
|
}),
|
||||||
&canceller,
|
&canceller,
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -55,11 +55,11 @@ impl HTMLSourceElement {
|
||||||
|
|
||||||
fn iterate_next_html_image_element_siblings(
|
fn iterate_next_html_image_element_siblings(
|
||||||
next_siblings_iterator: impl Iterator<Item = Root<Dom<Node>>>,
|
next_siblings_iterator: impl Iterator<Item = Root<Dom<Node>>>,
|
||||||
_can_gc: CanGc,
|
can_gc: CanGc,
|
||||||
) {
|
) {
|
||||||
for next_sibling in next_siblings_iterator {
|
for next_sibling in next_siblings_iterator {
|
||||||
if let Some(html_image_element_sibling) = next_sibling.downcast::<HTMLImageElement>() {
|
if let Some(html_image_element_sibling) = next_sibling.downcast::<HTMLImageElement>() {
|
||||||
html_image_element_sibling.update_the_image_data(CanGc::note());
|
html_image_element_sibling.update_the_image_data(can_gc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,7 @@ impl MediaElementAudioSourceNode {
|
||||||
Box::new(node),
|
Box::new(node),
|
||||||
window,
|
window,
|
||||||
proto,
|
proto,
|
||||||
CanGc::note(),
|
can_gc,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -295,7 +295,7 @@ impl ServiceWorkerGlobalScope {
|
||||||
control_receiver: Receiver<ServiceWorkerControlMsg>,
|
control_receiver: Receiver<ServiceWorkerControlMsg>,
|
||||||
context_sender: Sender<ContextForRequestInterrupt>,
|
context_sender: Sender<ContextForRequestInterrupt>,
|
||||||
closing: Arc<AtomicBool>,
|
closing: Arc<AtomicBool>,
|
||||||
_can_gc: CanGc,
|
can_gc: CanGc,
|
||||||
) -> JoinHandle<()> {
|
) -> JoinHandle<()> {
|
||||||
let ScopeThings {
|
let ScopeThings {
|
||||||
script_url,
|
script_url,
|
||||||
|
@ -399,7 +399,7 @@ impl ServiceWorkerGlobalScope {
|
||||||
// which happens after the closing flag is set to true,
|
// which happens after the closing flag is set to true,
|
||||||
// or until the worker has run beyond its allocated time.
|
// or until the worker has run beyond its allocated time.
|
||||||
while !scope.is_closing() && !global.has_timed_out() {
|
while !scope.is_closing() && !global.has_timed_out() {
|
||||||
run_worker_event_loop(&*global, None, CanGc::note());
|
run_worker_event_loop(&*global, None, can_gc);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
reporter_name,
|
reporter_name,
|
||||||
|
|
|
@ -287,7 +287,7 @@ impl Tokenizer {
|
||||||
pub fn feed(
|
pub fn feed(
|
||||||
&self,
|
&self,
|
||||||
input: &BufferQueue,
|
input: &BufferQueue,
|
||||||
_can_gc: CanGc,
|
can_gc: CanGc,
|
||||||
) -> TokenizerResult<DomRoot<HTMLScriptElement>> {
|
) -> TokenizerResult<DomRoot<HTMLScriptElement>> {
|
||||||
let mut send_tendrils = VecDeque::new();
|
let mut send_tendrils = VecDeque::new();
|
||||||
while let Some(str) = input.pop_front() {
|
while let Some(str) = input.pop_front() {
|
||||||
|
@ -309,7 +309,7 @@ impl Tokenizer {
|
||||||
.expect("Unexpected channel panic in main thread.")
|
.expect("Unexpected channel panic in main thread.")
|
||||||
{
|
{
|
||||||
ToTokenizerMsg::ProcessOperation(parse_op) => {
|
ToTokenizerMsg::ProcessOperation(parse_op) => {
|
||||||
self.process_operation(parse_op, CanGc::note())
|
self.process_operation(parse_op, can_gc)
|
||||||
},
|
},
|
||||||
ToTokenizerMsg::TokenizerResultDone { updated_input } => {
|
ToTokenizerMsg::TokenizerResultDone { updated_input } => {
|
||||||
let buffer_queue = create_buffer_queue(updated_input);
|
let buffer_queue = create_buffer_queue(updated_input);
|
||||||
|
@ -330,7 +330,7 @@ impl Tokenizer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn end(&self, _can_gc: CanGc) {
|
pub fn end(&self, can_gc: CanGc) {
|
||||||
self.html_tokenizer_sender
|
self.html_tokenizer_sender
|
||||||
.send(ToHtmlTokenizerMsg::End)
|
.send(ToHtmlTokenizerMsg::End)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -341,7 +341,7 @@ impl Tokenizer {
|
||||||
.expect("Unexpected channel panic in main thread.")
|
.expect("Unexpected channel panic in main thread.")
|
||||||
{
|
{
|
||||||
ToTokenizerMsg::ProcessOperation(parse_op) => {
|
ToTokenizerMsg::ProcessOperation(parse_op) => {
|
||||||
self.process_operation(parse_op, CanGc::note())
|
self.process_operation(parse_op, can_gc)
|
||||||
},
|
},
|
||||||
ToTokenizerMsg::TokenizerResultDone { updated_input: _ } |
|
ToTokenizerMsg::TokenizerResultDone { updated_input: _ } |
|
||||||
ToTokenizerMsg::TokenizerResultScript {
|
ToTokenizerMsg::TokenizerResultScript {
|
||||||
|
|
|
@ -338,7 +338,7 @@ impl ServoParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Steps 6-8 of <https://html.spec.whatwg.org/multipage/#document.write()>
|
/// Steps 6-8 of <https://html.spec.whatwg.org/multipage/#document.write()>
|
||||||
pub fn write(&self, text: Vec<DOMString>, _can_gc: CanGc) {
|
pub fn write(&self, text: Vec<DOMString>, can_gc: CanGc) {
|
||||||
assert!(self.can_write());
|
assert!(self.can_write());
|
||||||
|
|
||||||
if self.document.has_pending_parsing_blocking_script() {
|
if self.document.has_pending_parsing_blocking_script() {
|
||||||
|
@ -361,7 +361,7 @@ impl ServoParser {
|
||||||
input.push_back(String::from(chunk).into());
|
input.push_back(String::from(chunk).into());
|
||||||
}
|
}
|
||||||
|
|
||||||
self.tokenize(|tokenizer| tokenizer.feed(&input, CanGc::note()));
|
self.tokenize(|tokenizer| tokenizer.feed(&input, can_gc));
|
||||||
|
|
||||||
if self.suspended.get() {
|
if self.suspended.get() {
|
||||||
// Parser got suspended, insert remaining input at end of
|
// Parser got suspended, insert remaining input at end of
|
||||||
|
@ -532,7 +532,7 @@ impl ServoParser {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn do_parse_sync(&self, _can_gc: CanGc) {
|
fn do_parse_sync(&self, can_gc: CanGc) {
|
||||||
assert!(self.script_input.is_empty());
|
assert!(self.script_input.is_empty());
|
||||||
|
|
||||||
// This parser will continue to parse while there is either pending input or
|
// This parser will continue to parse while there is either pending input or
|
||||||
|
@ -546,7 +546,7 @@ impl ServoParser {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.tokenize(|tokenizer| tokenizer.feed(&self.network_input, CanGc::note()));
|
self.tokenize(|tokenizer| tokenizer.feed(&self.network_input, can_gc));
|
||||||
|
|
||||||
if self.suspended.get() {
|
if self.suspended.get() {
|
||||||
return;
|
return;
|
||||||
|
@ -555,7 +555,7 @@ impl ServoParser {
|
||||||
assert!(self.network_input.is_empty());
|
assert!(self.network_input.is_empty());
|
||||||
|
|
||||||
if self.last_chunk_received.get() {
|
if self.last_chunk_received.get() {
|
||||||
self.finish(CanGc::note());
|
self.finish(can_gc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1353,15 +1353,7 @@ fn create_element_for_token(
|
||||||
CustomElementCreationMode::Asynchronous
|
CustomElementCreationMode::Asynchronous
|
||||||
};
|
};
|
||||||
|
|
||||||
let element = Element::create(
|
let element = Element::create(name, is, document, creator, creation_mode, None, can_gc);
|
||||||
name,
|
|
||||||
is,
|
|
||||||
document,
|
|
||||||
creator,
|
|
||||||
creation_mode,
|
|
||||||
None,
|
|
||||||
CanGc::note(),
|
|
||||||
);
|
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage#the-input-element:value-sanitization-algorithm-3
|
// https://html.spec.whatwg.org/multipage#the-input-element:value-sanitization-algorithm-3
|
||||||
// says to invoke sanitization "when an input element is first created";
|
// says to invoke sanitization "when an input element is first created";
|
||||||
|
@ -1389,7 +1381,7 @@ fn create_element_for_token(
|
||||||
// Step 9.
|
// Step 9.
|
||||||
if will_execute_script {
|
if will_execute_script {
|
||||||
// Steps 9.1 - 9.2.
|
// Steps 9.1 - 9.2.
|
||||||
ScriptThread::pop_current_element_queue(CanGc::note());
|
ScriptThread::pop_current_element_queue(can_gc);
|
||||||
// Step 9.3.
|
// Step 9.3.
|
||||||
document.decrement_throw_on_dynamic_markup_insertion_counter();
|
document.decrement_throw_on_dynamic_markup_insertion_counter();
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,7 +87,7 @@ impl MicrotaskQueue {
|
||||||
cx: JSContext,
|
cx: JSContext,
|
||||||
target_provider: F,
|
target_provider: F,
|
||||||
globalscopes: Vec<DomRoot<GlobalScope>>,
|
globalscopes: Vec<DomRoot<GlobalScope>>,
|
||||||
_can_gc: CanGc,
|
can_gc: CanGc,
|
||||||
) where
|
) where
|
||||||
F: Fn(PipelineId) -> Option<DomRoot<GlobalScope>>,
|
F: Fn(PipelineId) -> Option<DomRoot<GlobalScope>>,
|
||||||
{
|
{
|
||||||
|
@ -128,14 +128,14 @@ impl MicrotaskQueue {
|
||||||
},
|
},
|
||||||
Microtask::MediaElement(ref task) => {
|
Microtask::MediaElement(ref task) => {
|
||||||
let _realm = task.enter_realm();
|
let _realm = task.enter_realm();
|
||||||
task.handler(CanGc::note());
|
task.handler(can_gc);
|
||||||
},
|
},
|
||||||
Microtask::ImageElement(ref task) => {
|
Microtask::ImageElement(ref task) => {
|
||||||
let _realm = task.enter_realm();
|
let _realm = task.enter_realm();
|
||||||
task.handler(CanGc::note());
|
task.handler(can_gc);
|
||||||
},
|
},
|
||||||
Microtask::CustomElementReaction => {
|
Microtask::CustomElementReaction => {
|
||||||
ScriptThread::invoke_backup_element_queue(CanGc::note());
|
ScriptThread::invoke_backup_element_queue(can_gc);
|
||||||
},
|
},
|
||||||
Microtask::NotifyMutationObservers => {
|
Microtask::NotifyMutationObservers => {
|
||||||
MutationObserver::notify_mutation_observers();
|
MutationObserver::notify_mutation_observers();
|
||||||
|
|
|
@ -1124,6 +1124,7 @@ impl Runnable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, Debug)]
|
||||||
pub struct CanGc(());
|
pub struct CanGc(());
|
||||||
|
|
||||||
impl CanGc {
|
impl CanGc {
|
||||||
|
|
|
@ -1448,9 +1448,9 @@ impl ScriptThread {
|
||||||
|
|
||||||
/// Starts the script thread. After calling this method, the script thread will loop receiving
|
/// Starts the script thread. After calling this method, the script thread will loop receiving
|
||||||
/// messages on its port.
|
/// messages on its port.
|
||||||
pub fn start(&self, _can_gc: CanGc) {
|
pub fn start(&self, can_gc: CanGc) {
|
||||||
debug!("Starting script thread.");
|
debug!("Starting script thread.");
|
||||||
while self.handle_msgs(CanGc::note()) {
|
while self.handle_msgs(can_gc) {
|
||||||
// Go on...
|
// Go on...
|
||||||
debug!("Running script thread.");
|
debug!("Running script thread.");
|
||||||
}
|
}
|
||||||
|
@ -1790,7 +1790,7 @@ impl ScriptThread {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handle incoming messages from other tasks and the task queue.
|
/// Handle incoming messages from other tasks and the task queue.
|
||||||
fn handle_msgs(&self, _can_gc: CanGc) -> bool {
|
fn handle_msgs(&self, can_gc: CanGc) -> bool {
|
||||||
use self::MixedMessage::{
|
use self::MixedMessage::{
|
||||||
FromConstellation, FromDevtools, FromImageCache, FromScript, FromWebGPUServer,
|
FromConstellation, FromDevtools, FromImageCache, FromScript, FromWebGPUServer,
|
||||||
};
|
};
|
||||||
|
@ -1918,7 +1918,7 @@ impl ScriptThread {
|
||||||
// Run the "update the rendering" task.
|
// Run the "update the rendering" task.
|
||||||
task.run_box();
|
task.run_box();
|
||||||
// Always perform a microtrask checkpoint after running a task.
|
// Always perform a microtrask checkpoint after running a task.
|
||||||
self.perform_a_microtask_checkpoint(CanGc::note());
|
self.perform_a_microtask_checkpoint(can_gc);
|
||||||
rendering_update_already_prioritized = true;
|
rendering_update_already_prioritized = true;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1975,7 +1975,7 @@ impl ScriptThread {
|
||||||
// If we've received the closed signal from the BHM, only handle exit messages.
|
// If we've received the closed signal from the BHM, only handle exit messages.
|
||||||
match msg {
|
match msg {
|
||||||
FromConstellation(ConstellationControlMsg::ExitScriptThread) => {
|
FromConstellation(ConstellationControlMsg::ExitScriptThread) => {
|
||||||
self.handle_exit_script_thread_msg(CanGc::note());
|
self.handle_exit_script_thread_msg(can_gc);
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
FromConstellation(ConstellationControlMsg::ExitPipeline(
|
FromConstellation(ConstellationControlMsg::ExitPipeline(
|
||||||
|
@ -1985,7 +1985,7 @@ impl ScriptThread {
|
||||||
self.handle_exit_pipeline_msg(
|
self.handle_exit_pipeline_msg(
|
||||||
pipeline_id,
|
pipeline_id,
|
||||||
discard_browsing_context,
|
discard_browsing_context,
|
||||||
CanGc::note(),
|
can_gc,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
_ => {},
|
_ => {},
|
||||||
|
@ -1996,11 +1996,11 @@ impl ScriptThread {
|
||||||
let result = self.profile_event(category, pipeline_id, move || {
|
let result = self.profile_event(category, pipeline_id, move || {
|
||||||
match msg {
|
match msg {
|
||||||
FromConstellation(ConstellationControlMsg::ExitScriptThread) => {
|
FromConstellation(ConstellationControlMsg::ExitScriptThread) => {
|
||||||
self.handle_exit_script_thread_msg(CanGc::note());
|
self.handle_exit_script_thread_msg(can_gc);
|
||||||
return Some(false);
|
return Some(false);
|
||||||
},
|
},
|
||||||
FromConstellation(inner_msg) => {
|
FromConstellation(inner_msg) => {
|
||||||
self.handle_msg_from_constellation(inner_msg, CanGc::note())
|
self.handle_msg_from_constellation(inner_msg, can_gc)
|
||||||
},
|
},
|
||||||
FromScript(inner_msg) => self.handle_msg_from_script(inner_msg),
|
FromScript(inner_msg) => self.handle_msg_from_script(inner_msg),
|
||||||
FromDevtools(inner_msg) => self.handle_msg_from_devtools(inner_msg),
|
FromDevtools(inner_msg) => self.handle_msg_from_devtools(inner_msg),
|
||||||
|
@ -2017,7 +2017,7 @@ impl ScriptThread {
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#event-loop-processing-model step 6
|
// https://html.spec.whatwg.org/multipage/#event-loop-processing-model step 6
|
||||||
// TODO(#32003): A microtask checkpoint is only supposed to be performed after running a task.
|
// TODO(#32003): A microtask checkpoint is only supposed to be performed after running a task.
|
||||||
self.perform_a_microtask_checkpoint(CanGc::note());
|
self.perform_a_microtask_checkpoint(can_gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -3159,7 +3159,7 @@ impl ScriptThread {
|
||||||
&self,
|
&self,
|
||||||
id: &PipelineId,
|
id: &PipelineId,
|
||||||
metadata: Option<Metadata>,
|
metadata: Option<Metadata>,
|
||||||
_can_gc: CanGc,
|
can_gc: CanGc,
|
||||||
) -> Option<DomRoot<ServoParser>> {
|
) -> Option<DomRoot<ServoParser>> {
|
||||||
let idx = self
|
let idx = self
|
||||||
.incomplete_loads
|
.incomplete_loads
|
||||||
|
@ -3198,7 +3198,7 @@ impl ScriptThread {
|
||||||
};
|
};
|
||||||
|
|
||||||
let load = self.incomplete_loads.borrow_mut().remove(idx);
|
let load = self.incomplete_loads.borrow_mut().remove(idx);
|
||||||
metadata.map(|meta| self.load(meta, load, CanGc::note()))
|
metadata.map(|meta| self.load(meta, load, can_gc))
|
||||||
},
|
},
|
||||||
None => {
|
None => {
|
||||||
assert!(self.closed_pipelines.borrow().contains(id));
|
assert!(self.closed_pipelines.borrow().contains(id));
|
||||||
|
@ -3340,7 +3340,7 @@ impl ScriptThread {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handles a request to exit the script thread and shut down layout.
|
/// Handles a request to exit the script thread and shut down layout.
|
||||||
fn handle_exit_script_thread_msg(&self, _can_gc: CanGc) {
|
fn handle_exit_script_thread_msg(&self, can_gc: CanGc) {
|
||||||
debug!("Exiting script thread.");
|
debug!("Exiting script thread.");
|
||||||
|
|
||||||
let mut pipeline_ids = Vec::new();
|
let mut pipeline_ids = Vec::new();
|
||||||
|
@ -3360,7 +3360,7 @@ impl ScriptThread {
|
||||||
);
|
);
|
||||||
|
|
||||||
for pipeline_id in pipeline_ids {
|
for pipeline_id in pipeline_ids {
|
||||||
self.handle_exit_pipeline_msg(pipeline_id, DiscardBrowsingContext::Yes, CanGc::note());
|
self.handle_exit_pipeline_msg(pipeline_id, DiscardBrowsingContext::Yes, can_gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.background_hang_monitor.unregister();
|
self.background_hang_monitor.unregister();
|
||||||
|
@ -3784,7 +3784,7 @@ impl ScriptThread {
|
||||||
referrer_policy,
|
referrer_policy,
|
||||||
Some(status_code),
|
Some(status_code),
|
||||||
incomplete.canceller,
|
incomplete.canceller,
|
||||||
CanGc::note(),
|
can_gc,
|
||||||
);
|
);
|
||||||
document.set_ready_state(DocumentReadyState::Loading);
|
document.set_ready_state(DocumentReadyState::Loading);
|
||||||
|
|
||||||
|
@ -3826,9 +3826,9 @@ impl ScriptThread {
|
||||||
document.set_navigation_start(incomplete.navigation_start);
|
document.set_navigation_start(incomplete.navigation_start);
|
||||||
|
|
||||||
if is_html_document == IsHTMLDocument::NonHTMLDocument {
|
if is_html_document == IsHTMLDocument::NonHTMLDocument {
|
||||||
ServoParser::parse_xml_document(&document, None, final_url, CanGc::note());
|
ServoParser::parse_xml_document(&document, None, final_url, can_gc);
|
||||||
} else {
|
} else {
|
||||||
ServoParser::parse_html_document(&document, None, final_url, CanGc::note());
|
ServoParser::parse_html_document(&document, None, final_url, can_gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
if incomplete.activity == DocumentActivity::FullyActive {
|
if incomplete.activity == DocumentActivity::FullyActive {
|
||||||
|
|
|
@ -250,11 +250,11 @@ impl ServiceWorkerManager {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_message(&mut self, _can_gc: CanGc) {
|
fn handle_message(&mut self, can_gc: CanGc) {
|
||||||
while let Ok(message) = self.receive_message() {
|
while let Ok(message) = self.receive_message() {
|
||||||
let should_continue = match message {
|
let should_continue = match message {
|
||||||
Message::FromConstellation(msg) => {
|
Message::FromConstellation(msg) => {
|
||||||
self.handle_message_from_constellation(msg, CanGc::note())
|
self.handle_message_from_constellation(msg, can_gc)
|
||||||
},
|
},
|
||||||
Message::FromResource(msg) => self.handle_message_from_resource(msg),
|
Message::FromResource(msg) => self.handle_message_from_resource(msg),
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue