diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2018-12-26 01:53:20 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-26 01:53:20 -0500 |
commit | 66223ee1054a36a093cf5ded065f6fc6d3fecd8b (patch) | |
tree | 71b445b09cad26eef9a815807d85975ed69efd7f /components/script/script_thread.rs | |
parent | 69e90a83bc480c13c4aa4165b9d2c432b54a4069 (diff) | |
parent | cca354b217f4f8c7d92229ec88adde83b8300daa (diff) | |
download | servo-66223ee1054a36a093cf5ded065f6fc6d3fecd8b.tar.gz servo-66223ee1054a36a093cf5ded065f6fc6d3fecd8b.zip |
Auto merge of #22121 - gterzian:remove_constellation_block_in_navigation, r=paulrouget
Remove sync constellation -> embedder communication
<!-- Please describe your changes on the following line: -->
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [ ] `./mach build -d` does not report any errors
- [ ] `./mach test-tidy` does not report any errors
- [ ] These changes fix #22042 (github issue number if applicable).
<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because _____
<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/22121)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/script_thread.rs')
-rw-r--r-- | components/script/script_thread.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 8383caa9800..178e121bda9 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -1314,6 +1314,10 @@ impl ScriptThread { // into this loop too, but for now it's only images. debug!("Issuing batched reflows."); for (_, document) in self.documents.borrow().iter() { + // Step 13 + if !document.is_fully_active() { + continue; + } let window = document.window(); let pending_reflows = window.get_pending_reflow_count(); if pending_reflows > 0 { @@ -1396,6 +1400,7 @@ impl ScriptThread { match *msg { MixedMessage::FromConstellation(ref inner_msg) => { match *inner_msg { + StopDelayingLoadEventsMode(id) => Some(id), NavigationResponse(id, _) => Some(id), AttachLayout(ref new_layout_info) => Some(new_layout_info.new_pipeline_id), Resize(id, ..) => Some(id), @@ -1533,6 +1538,9 @@ impl ScriptThread { fn handle_msg_from_constellation(&self, msg: ConstellationControlMsg) { match msg { + ConstellationControlMsg::StopDelayingLoadEventsMode(pipeline_id) => { + self.handle_stop_delaying_load_events_mode(pipeline_id) + }, ConstellationControlMsg::NavigationResponse(id, fetch_data) => { match fetch_data { FetchResponseMsg::ProcessResponse(metadata) => { @@ -2078,6 +2086,19 @@ impl ScriptThread { } } + fn handle_stop_delaying_load_events_mode(&self, pipeline_id: PipelineId) { + let window = self.documents.borrow().find_window(pipeline_id); + if let Some(window) = window { + match window.undiscarded_window_proxy() { + Some(window_proxy) => window_proxy.stop_delaying_load_events_mode(), + None => warn!( + "Attempted to take {} of 'delaying-load-events-mode' after having been discarded.", + pipeline_id + ), + }; + } + } + fn handle_unload_document(&self, pipeline_id: PipelineId) { let document = self.documents.borrow().find_document(pipeline_id); if let Some(document) = document { @@ -2164,6 +2185,20 @@ impl ScriptThread { status: Some((204...205, _)), .. }) => { + // If we have an existing window that is being navigated: + if let Some(window) = self.documents.borrow().find_window(id.clone()) { + let window_proxy = window.window_proxy(); + // https://html.spec.whatwg.org/multipage/ + // #navigating-across-documents:delaying-load-events-mode-2 + if window_proxy.parent().is_some() { + // The user agent must take this nested browsing context + // out of the delaying load events mode + // when this navigation algorithm later matures, + // or when it terminates (whether due to having run all the steps, + // or being canceled, or being aborted), whichever happens first. + window_proxy.stop_delaying_load_events_mode(); + } + } self.script_sender .send((id.clone(), ScriptMsg::AbortLoadUrl)) .unwrap(); @@ -2708,6 +2743,13 @@ impl ScriptThread { incomplete.parent_info, incomplete.opener, ); + if window_proxy.parent().is_some() { + // https://html.spec.whatwg.org/multipage/#navigating-across-documents:delaying-load-events-mode-2 + // The user agent must take this nested browsing context + // out of the delaying load events mode + // when this navigation algorithm later matures. + window_proxy.stop_delaying_load_events_mode(); + } window.init_window_proxy(&window_proxy); let last_modified = metadata.headers.as_ref().and_then(|headers| { |