mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Added a TopLevelBrowsingContextId type.
This commit is contained in:
parent
b428a94326
commit
42577365b7
15 changed files with 407 additions and 234 deletions
|
@ -30,6 +30,7 @@ use js::jsval::{UndefinedValue, PrivateValue};
|
|||
use js::rust::get_object_class;
|
||||
use msg::constellation_msg::BrowsingContextId;
|
||||
use msg::constellation_msg::PipelineId;
|
||||
use msg::constellation_msg::TopLevelBrowsingContextId;
|
||||
use std::cell::Cell;
|
||||
use std::ptr;
|
||||
|
||||
|
@ -50,6 +51,10 @@ pub struct WindowProxy {
|
|||
/// of the container.
|
||||
browsing_context_id: BrowsingContextId,
|
||||
|
||||
/// The frame id of the top-level ancestor browsing context.
|
||||
/// In the case that this is a top-level window, this is our id.
|
||||
top_level_browsing_context_id: TopLevelBrowsingContextId,
|
||||
|
||||
/// The pipeline id of the currently active document.
|
||||
/// May be None, when the currently active document is in another script thread.
|
||||
/// We do not try to keep the pipeline id for documents in other threads,
|
||||
|
@ -69,6 +74,7 @@ pub struct WindowProxy {
|
|||
|
||||
impl WindowProxy {
|
||||
pub fn new_inherited(browsing_context_id: BrowsingContextId,
|
||||
top_level_browsing_context_id: TopLevelBrowsingContextId,
|
||||
currently_active: Option<PipelineId>,
|
||||
frame_element: Option<&Element>,
|
||||
parent: Option<&WindowProxy>)
|
||||
|
@ -77,6 +83,7 @@ impl WindowProxy {
|
|||
WindowProxy {
|
||||
reflector: Reflector::new(),
|
||||
browsing_context_id: browsing_context_id,
|
||||
top_level_browsing_context_id: top_level_browsing_context_id,
|
||||
currently_active: Cell::new(currently_active),
|
||||
discarded: Cell::new(false),
|
||||
frame_element: frame_element.map(JS::from_ref),
|
||||
|
@ -87,6 +94,7 @@ impl WindowProxy {
|
|||
#[allow(unsafe_code)]
|
||||
pub fn new(window: &Window,
|
||||
browsing_context_id: BrowsingContextId,
|
||||
top_level_browsing_context_id: TopLevelBrowsingContextId,
|
||||
frame_element: Option<&Element>,
|
||||
parent: Option<&WindowProxy>)
|
||||
-> Root<WindowProxy>
|
||||
|
@ -107,7 +115,11 @@ impl WindowProxy {
|
|||
|
||||
// Create a new browsing context.
|
||||
let current = Some(window.global().pipeline_id());
|
||||
let mut window_proxy = box WindowProxy::new_inherited(browsing_context_id, current, frame_element, parent);
|
||||
let mut window_proxy = box WindowProxy::new_inherited(browsing_context_id,
|
||||
top_level_browsing_context_id,
|
||||
current,
|
||||
frame_element,
|
||||
parent);
|
||||
|
||||
// The window proxy owns the browsing context.
|
||||
// When we finalize the window proxy, it drops the browsing context it owns.
|
||||
|
@ -126,6 +138,7 @@ impl WindowProxy {
|
|||
#[allow(unsafe_code)]
|
||||
pub fn new_dissimilar_origin(global_to_clone_from: &GlobalScope,
|
||||
browsing_context_id: BrowsingContextId,
|
||||
top_level_browsing_context_id: TopLevelBrowsingContextId,
|
||||
parent: Option<&WindowProxy>)
|
||||
-> Root<WindowProxy>
|
||||
{
|
||||
|
@ -136,7 +149,11 @@ impl WindowProxy {
|
|||
let cx = global_to_clone_from.get_cx();
|
||||
|
||||
// Create a new browsing context.
|
||||
let mut window_proxy = box WindowProxy::new_inherited(browsing_context_id, None, None, parent);
|
||||
let mut window_proxy = box WindowProxy::new_inherited(browsing_context_id,
|
||||
top_level_browsing_context_id,
|
||||
None,
|
||||
None,
|
||||
parent);
|
||||
|
||||
// Create a new dissimilar-origin window.
|
||||
let window = DissimilarOriginWindow::new(global_to_clone_from, &*window_proxy);
|
||||
|
@ -175,6 +192,10 @@ impl WindowProxy {
|
|||
self.browsing_context_id
|
||||
}
|
||||
|
||||
pub fn top_level_browsing_context_id(&self) -> TopLevelBrowsingContextId {
|
||||
self.top_level_browsing_context_id
|
||||
}
|
||||
|
||||
pub fn frame_element(&self) -> Option<&Element> {
|
||||
self.frame_element.r()
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue