diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/Cargo.toml | 1 | ||||
-rw-r--r-- | components/script/dom/bindings/trace.rs | 4 | ||||
-rw-r--r-- | components/script/dom/document.rs | 35 | ||||
-rw-r--r-- | components/script/dom/htmlanchorelement.rs | 11 | ||||
-rw-r--r-- | components/script/dom/htmliframeelement.rs | 267 | ||||
-rw-r--r-- | components/script/dom/htmllinkelement.rs | 10 | ||||
-rw-r--r-- | components/script/dom/webidls/BrowserElement.webidl | 227 | ||||
-rw-r--r-- | components/script/dom/webidls/HTMLIFrameElement.webidl | 10 | ||||
-rw-r--r-- | components/script/dom/webidls/Window.webidl | 2 | ||||
-rw-r--r-- | components/script/dom/window.rs | 55 | ||||
-rw-r--r-- | components/script/dom/xmlhttprequest.rs | 19 | ||||
-rw-r--r-- | components/script/lib.rs | 1 | ||||
-rw-r--r-- | components/script/script_thread.rs | 64 |
13 files changed, 39 insertions, 667 deletions
diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml index 4aae00f551b..cd33e982e7c 100644 --- a/components/script/Cargo.toml +++ b/components/script/Cargo.toml @@ -67,7 +67,6 @@ msg = {path = "../msg"} net_traits = {path = "../net_traits"} num-traits = "0.1.32" offscreen_gl_context = { version = "0.14", features = ["serde"] } -open = "1.1.1" parking_lot = "0.4" phf = "0.7.18" profile_traits = {path = "../profile_traits"} diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index a22765395b9..5153b70e72f 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -63,7 +63,7 @@ use js::jsapi::{GCTraceKindToAscii, Heap, JSObject, JSTracer, TraceKind}; use js::jsval::JSVal; use js::rust::Runtime; use metrics::{InteractiveMetrics, InteractiveWindow}; -use msg::constellation_msg::{BrowsingContextId, FrameType, PipelineId, TopLevelBrowsingContextId}; +use msg::constellation_msg::{BrowsingContextId, PipelineId, TopLevelBrowsingContextId}; use net_traits::{Metadata, NetworkError, ReferrerPolicy, ResourceThreads}; use net_traits::filemanager_thread::RelativePos; use net_traits::image::base::{Image, ImageMetadata}; @@ -351,7 +351,7 @@ unsafe_no_jsmanaged_fields!(PropertyDeclarationBlock); // These three are interdependent, if you plan to put jsmanaged data // in one of these make sure it is propagated properly to containing structs unsafe_no_jsmanaged_fields!(DocumentActivity, WindowSizeData, WindowSizeType); -unsafe_no_jsmanaged_fields!(BrowsingContextId, FrameType, PipelineId, TopLevelBrowsingContextId); +unsafe_no_jsmanaged_fields!(BrowsingContextId, PipelineId, TopLevelBrowsingContextId); unsafe_no_jsmanaged_fields!(TimerEventId, TimerSource); unsafe_no_jsmanaged_fields!(TimelineMarkerType); unsafe_no_jsmanaged_fields!(WorkerId); diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index e148b939afc..47ba21c8e4d 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -98,7 +98,7 @@ use js::jsapi::{JSContext, JSObject, JSRuntime}; use js::jsapi::JS_GetRuntime; use metrics::{InteractiveFlag, InteractiveMetrics, InteractiveWindow, ProfilerMetadataFactory, ProgressiveWebMetric}; use mime::{Mime, TopLevel, SubLevel}; -use msg::constellation_msg::{BrowsingContextId, Key, KeyModifiers, KeyState, TopLevelBrowsingContextId}; +use msg::constellation_msg::{BrowsingContextId, Key, KeyModifiers, KeyState}; use net_traits::{FetchResponseMsg, IpcSend, ReferrerPolicy}; use net_traits::CookieSource::NonHTTP; use net_traits::CoreResourceMsg::{GetCookiesForUrl, SetCookiesForUrl}; @@ -111,7 +111,7 @@ use script_layout_interface::message::{Msg, NodesFromPointQueryType, ReflowGoal} use script_runtime::{CommonScriptMsg, ScriptThreadEventCategory}; use script_thread::{MainThreadScriptMsg, ScriptThread}; use script_traits::{AnimationState, DocumentActivity, MouseButton, MouseEventType}; -use script_traits::{MozBrowserEvent, MsDuration, ScriptMsg, TouchEventType, TouchId, UntrustedNodeAddress}; +use script_traits::{MsDuration, ScriptMsg, TouchEventType, TouchId, UntrustedNodeAddress}; use servo_arc::Arc; use servo_atoms::Atom; use servo_config::prefs::PREFS; @@ -451,7 +451,6 @@ impl Document { pub fn set_https_state(&self, https_state: HttpsState) { self.https_state.set(https_state); - self.trigger_mozbrowser_event(MozBrowserEvent::SecurityChange(https_state)); } pub fn is_fully_active(&self) -> bool { @@ -754,13 +753,9 @@ impl Document { pub fn set_ready_state(&self, state: DocumentReadyState) { match state { DocumentReadyState::Loading => { - // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowserconnected - self.trigger_mozbrowser_event(MozBrowserEvent::Connected); update_with_current_time_ms(&self.dom_loading); }, DocumentReadyState::Complete => { - // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowserloadend - self.trigger_mozbrowser_event(MozBrowserEvent::LoadEnd); update_with_current_time_ms(&self.dom_complete); }, DocumentReadyState::Interactive => update_with_current_time_ms(&self.dom_interactive), @@ -826,9 +821,6 @@ impl Document { /// Handles any updates when the document's title has changed. pub fn title_changed(&self) { if self.browsing_context().is_some() { - // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowsertitlechange - self.trigger_mozbrowser_event(MozBrowserEvent::TitleChange(String::from(self.Title()))); - self.send_title_to_constellation(); } } @@ -1410,15 +1402,6 @@ impl Document { } } - pub fn trigger_mozbrowser_event(&self, event: MozBrowserEvent) { - if PREFS.is_mozbrowser_enabled() { - if let Some((parent_pipeline_id, _)) = self.window.parent_info() { - let event = ScriptMsg::MozBrowserEvent(parent_pipeline_id, event); - self.send_to_constellation(event); - } - } - } - /// <https://html.spec.whatwg.org/multipage/#dom-window-requestanimationframe> pub fn request_animation_frame(&self, callback: AnimationFrameCallback) -> u32 { let ident = self.animation_frame_ident.get() + 1; @@ -1857,20 +1840,6 @@ impl Document { .find(|node| node.browsing_context_id() == Some(browsing_context_id)) } - /// Find a mozbrowser iframe element in the document. - pub fn find_mozbrowser_iframe(&self, - top_level_browsing_context_id: TopLevelBrowsingContextId) - -> Option<DomRoot<HTMLIFrameElement>> - { - match self.find_iframe(BrowsingContextId::from(top_level_browsing_context_id)) { - None => None, - Some(iframe) => { - assert!(iframe.Mozbrowser()); - Some(iframe) - }, - } - } - pub fn get_dom_loading(&self) -> u64 { self.dom_loading.get() } diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs index 37949572ccc..e48385ed692 100644 --- a/components/script/dom/htmlanchorelement.rs +++ b/components/script/dom/htmlanchorelement.rs @@ -28,8 +28,6 @@ use dom_struct::dom_struct; use html5ever::{LocalName, Prefix}; use net_traits::ReferrerPolicy; use num_traits::ToPrimitive; -use script_traits::MozBrowserEvent; -use servo_config::prefs::PREFS; use servo_url::ServoUrl; use std::default::Default; use style::attr::AttrValue; @@ -608,13 +606,8 @@ pub fn follow_hyperlink(subject: &Element, hyperlink_suffix: Option<String>, ref // Step 8: navigate to the URL. if let Some(target) = target { - if PREFS.is_mozbrowser_enabled() && !is_current_browsing_context(target.Value()) { - // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowseropenwindow - // TODO: referrer and opener - // TODO: should we send the normalized url or the non-normalized href? - let event = MozBrowserEvent::OpenWindow(url.into_string(), Some(String::from(target.Value())), None); - document.trigger_mozbrowser_event(event); - return + if !is_current_browsing_context(target.Value()) { + // https://github.com/servo/servo/issues/13241 } } diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index c1ec4a7435b..b03cfdce07e 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -5,51 +5,34 @@ use document_loader::{LoadBlocker, LoadType}; use dom::attr::Attr; use dom::bindings::cell::DomRefCell; -use dom::bindings::codegen::Bindings::BrowserElementBinding::BrowserElementErrorEventDetail; -use dom::bindings::codegen::Bindings::BrowserElementBinding::BrowserElementIconChangeEventDetail; -use dom::bindings::codegen::Bindings::BrowserElementBinding::BrowserElementLocationChangeEventDetail; -use dom::bindings::codegen::Bindings::BrowserElementBinding::BrowserElementOpenTabEventDetail; -use dom::bindings::codegen::Bindings::BrowserElementBinding::BrowserElementOpenWindowEventDetail; -use dom::bindings::codegen::Bindings::BrowserElementBinding::BrowserElementSecurityChangeDetail; -use dom::bindings::codegen::Bindings::BrowserElementBinding::BrowserElementVisibilityChangeEventDetail; -use dom::bindings::codegen::Bindings::BrowserElementBinding::BrowserShowModalPromptEventDetail; use dom::bindings::codegen::Bindings::HTMLIFrameElementBinding; use dom::bindings::codegen::Bindings::HTMLIFrameElementBinding::HTMLIFrameElementMethods; use dom::bindings::codegen::Bindings::WindowBinding::WindowBinding::WindowMethods; -use dom::bindings::conversions::ToJSValConvertible; -use dom::bindings::error::{Error, ErrorResult, Fallible}; use dom::bindings::inheritance::Castable; use dom::bindings::refcounted::Trusted; use dom::bindings::reflector::DomObject; use dom::bindings::root::{LayoutDom, DomRoot, MutNullableDom}; use dom::bindings::str::DOMString; -use dom::customevent::CustomEvent; use dom::document::Document; use dom::domtokenlist::DOMTokenList; use dom::element::{AttributeMutation, Element, RawLayoutElementHelpers}; -use dom::event::Event; use dom::eventtarget::EventTarget; use dom::globalscope::GlobalScope; use dom::htmlelement::HTMLElement; use dom::node::{Node, NodeDamage, UnbindContext, document_from_node, window_from_node}; use dom::virtualmethods::VirtualMethods; -use dom::window::{ReflowReason, Window}; +use dom::window::ReflowReason; use dom::windowproxy::WindowProxy; use dom_struct::dom_struct; use html5ever::{LocalName, Prefix}; use ipc_channel::ipc; -use js::jsapi::{JSAutoCompartment, JSContext, MutableHandleValue}; -use js::jsval::{NullValue, UndefinedValue}; -use msg::constellation_msg::{FrameType, BrowsingContextId, PipelineId, TopLevelBrowsingContextId, TraversalDirection}; -use net_traits::response::HttpsState; +use msg::constellation_msg::{BrowsingContextId, PipelineId, TopLevelBrowsingContextId}; use script_layout_interface::message::ReflowGoal; use script_thread::ScriptThread; use script_traits::{IFrameLoadInfo, IFrameLoadInfoWithData, JsEvalResult, LoadData, UpdatePipelineIdReason}; -use script_traits::{MozBrowserEvent, NewLayoutInfo, ScriptMsg}; +use script_traits::{NewLayoutInfo, ScriptMsg}; use script_traits::IFrameSandboxState::{IFrameSandboxed, IFrameUnsandboxed}; -use servo_atoms::Atom; use servo_config::prefs::PREFS; -use servo_config::servo_version; use servo_url::ServoUrl; use std::cell::Cell; use style::attr::{AttrValue, LengthOrPercentageOrAuto}; @@ -165,8 +148,6 @@ impl HTMLIFrameElement { let old_pipeline_id = self.pipeline_id(); let new_pipeline_id = PipelineId::new(); self.pending_pipeline_id.set(Some(new_pipeline_id)); - let private_iframe = self.privatebrowsing(); - let frame_type = if self.Mozbrowser() { FrameType::MozBrowserIFrame } else { FrameType::IFrame }; let global_scope = window.upcast::<GlobalScope>(); let load_info = IFrameLoadInfo { @@ -174,8 +155,7 @@ impl HTMLIFrameElement { browsing_context_id: browsing_context_id, top_level_browsing_context_id: top_level_browsing_context_id, new_pipeline_id: new_pipeline_id, - is_private: private_iframe, - frame_type: frame_type, + is_private: false, // FIXME replace: replace, }; @@ -189,7 +169,7 @@ impl HTMLIFrameElement { .unwrap(); let new_layout_info = NewLayoutInfo { - parent_info: Some((global_scope.pipeline_id(), frame_type)), + parent_info: Some(global_scope.pipeline_id()), new_pipeline_id: new_pipeline_id, browsing_context_id: browsing_context_id, top_level_browsing_context_id: top_level_browsing_context_id, @@ -216,11 +196,6 @@ impl HTMLIFrameElement { .unwrap(); } } - - if PREFS.is_mozbrowser_enabled() { - // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowserloadstart - self.dispatch_mozbrowser_event(MozBrowserEvent::LoadStart); - } } /// <https://html.spec.whatwg.org/multipage/#process-the-iframe-attributes> @@ -258,17 +233,6 @@ impl HTMLIFrameElement { self.navigate_or_reload_child_browsing_context(Some(load_data), NavigationType::Regular, false); } - #[allow(unsafe_code)] - pub fn dispatch_mozbrowser_event(&self, event: MozBrowserEvent) { - assert!(PREFS.is_mozbrowser_enabled()); - - if self.Mozbrowser() { - let window = window_from_node(self); - let custom_event = build_mozbrowser_custom_event(&window, event); - custom_event.upcast::<Event>().fire(self.upcast()); - } - } - fn create_nested_browsing_context(&self) { // Synchronously create a new context and navigate it to about:blank. let url = ServoUrl::parse("about:blank").unwrap(); @@ -276,12 +240,8 @@ impl HTMLIFrameElement { let window = window_from_node(self); let pipeline_id = Some(window.upcast::<GlobalScope>().pipeline_id()); let load_data = LoadData::new(url, pipeline_id, document.get_referrer_policy(), Some(document.url().clone())); - let (browsing_context_id, top_level_browsing_context_id) = if self.Mozbrowser() { - let top_level_browsing_context_id = TopLevelBrowsingContextId::new(); - (BrowsingContextId::from(top_level_browsing_context_id), top_level_browsing_context_id) - } else { - (BrowsingContextId::new(), window.window_proxy().top_level_browsing_context_id()) - }; + let browsing_context_id = BrowsingContextId::new(); + let top_level_browsing_context_id = window.window_proxy().top_level_browsing_context_id(); self.pipeline_id.set(None); self.pending_pipeline_id.set(None); self.top_level_browsing_context_id.set(Some(top_level_browsing_context_id)); @@ -358,11 +318,6 @@ impl HTMLIFrameElement { pub fn change_visibility_status(&self, visibility: bool) { if self.visibility.get() != visibility { self.visibility.set(visibility); - - // Visibility changes are only exposed to Mozbrowser iframes - if self.Mozbrowser() { - self.dispatch_mozbrowser_event(MozBrowserEvent::VisibilityChange(visibility)); - } } } @@ -395,16 +350,6 @@ impl HTMLIFrameElement { let window = window_from_node(self); window.reflow(ReflowGoal::Full, ReflowReason::IFrameLoadEvent); } - - /// Check whether the iframe has the mozprivatebrowsing attribute set - pub fn privatebrowsing(&self) -> bool { - if self.Mozbrowser() { - let element = self.upcast::<Element>(); - element.has_attribute(&LocalName::from("mozprivatebrowsing")) - } else { - false - } - } } pub trait HTMLIFrameElementLayoutMethods { @@ -455,117 +400,6 @@ impl HTMLIFrameElementLayoutMethods for LayoutDom<HTMLIFrameElement> { } } -#[allow(unsafe_code)] -pub fn build_mozbrowser_custom_event(window: &Window, event: MozBrowserEvent) -> DomRoot<CustomEvent> { - // TODO(gw): Support mozbrowser event types that have detail which is not a string. - // See https://developer.mozilla.org/en-US/docs/Web/API/Using_the_Browser_API - // for a list of mozbrowser events. - let cx = window.get_cx(); - let _ac = JSAutoCompartment::new(cx, window.reflector().get_jsobject().get()); - rooted!(in(cx) let mut detail = UndefinedValue()); - let event_name = Atom::from(event.name()); - unsafe { build_mozbrowser_event_detail(event, cx, detail.handle_mut()); } - CustomEvent::new(window.upcast(), - event_name, - true, - true, - detail.handle()) -} - -#[allow(unsafe_code)] -unsafe fn build_mozbrowser_event_detail(event: MozBrowserEvent, - cx: *mut JSContext, - rval: MutableHandleValue) { - match event { - MozBrowserEvent::AsyncScroll | MozBrowserEvent::Close | MozBrowserEvent::ContextMenu | - MozBrowserEvent::LoadEnd | MozBrowserEvent::LoadStart | - MozBrowserEvent::Connected | MozBrowserEvent::OpenSearch | - MozBrowserEvent::UsernameAndPasswordRequired => { - rval.set(NullValue()); - } - MozBrowserEvent::Error(error_type, description, report) => { - BrowserElementErrorEventDetail { - type_: Some(DOMString::from(error_type.name())), - description: Some(DOMString::from(description)), - report: Some(DOMString::from(report)), - version: Some(DOMString::from_string(servo_version())), - }.to_jsval(cx, rval); - }, - MozBrowserEvent::SecurityChange(https_state) => { - BrowserElementSecurityChangeDetail { - // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowsersecuritychange - state: Some(DOMString::from(match https_state { - HttpsState::Modern => "secure", - HttpsState::Deprecated => "broken", - HttpsState::None => "insecure", - }.to_owned())), - // FIXME - Not supported yet: - trackingContent: None, - mixedContent: None, - trackingState: None, - extendedValidation: None, - mixedState: None, - }.to_jsval(cx, rval); - } - MozBrowserEvent::TitleChange(ref string) => { - string.to_jsval(cx, rval); - } - MozBrowserEvent::LocationChange(url, can_go_back, can_go_forward) => { - BrowserElementLocationChangeEventDetail { - url: Some(DOMString::from(url)), - canGoBack: Some(can_go_back), - canGoForward: Some(can_go_forward), - }.to_jsval(cx, rval); - } - MozBrowserEvent::OpenTab(url) => { - BrowserElementOpenTabEventDetail { - url: Some(DOMString::from(url)), - }.to_jsval(cx, rval); - } - MozBrowserEvent::OpenWindow(url, target, features) => { - BrowserElementOpenWindowEventDetail { - url: Some(DOMString::from(url)), - target: target.map(DOMString::from), - features: features.map(DOMString::from), - }.to_jsval(cx, rval); - } - MozBrowserEvent::IconChange(rel, href, sizes) => { - BrowserElementIconChangeEventDetail { - rel: Some(DOMString::from(rel)), - href: Some(DOMString::from(href)), - sizes: Some(DOMString::from(sizes)), - }.to_jsval(cx, rval); - } - MozBrowserEvent::ShowModalPrompt(prompt_type, title, message, return_value) => { - BrowserShowModalPromptEventDetail { - promptType: Some(DOMString::from(prompt_type)), - title: Some(DOMString::from(title)), - message: Some(DOMString::from(message)), - returnValue: Some(DOMString::from(return_value)), - }.to_jsval(cx, rval) - } - MozBrowserEvent::VisibilityChange(visibility) => { - BrowserElementVisibilityChangeEventDetail { - visible: Some(visibility), - }.to_jsval(cx, rval); - } - } -} - -pub fn Navigate(iframe: &HTMLIFrameElement, direction: TraversalDirection) -> ErrorResult { - if iframe.Mozbrowser() { - if let Some(_) = iframe.top_level_browsing_context_id() { - let window = window_from_node(iframe); - let msg = ScriptMsg::TraverseHistory(direction); - window.upcast::<GlobalScope>().script_to_constellation_chan().send(msg).unwrap(); - return Ok(()); - } - } - debug!(concat!("this frame is not mozbrowser: mozbrowser attribute missing, or not a top", - "level window, or mozbrowser preference not set (use --pref dom.mozbrowser.enabled)")); - Err(Error::NotSupported) -} - impl HTMLIFrameElementMethods for HTMLIFrameElement { // https://html.spec.whatwg.org/multipage/#dom-iframe-src make_url_getter!(Src, "src"); @@ -604,83 +438,11 @@ impl HTMLIFrameElementMethods for HTMLIFrameElement { Some(document) } - // Experimental mozbrowser implementation is based on the webidl - // present in the gecko source tree, and the documentation here: - // https://developer.mozilla.org/en-US/docs/Web/API/Using_the_Browser_API - // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-mozbrowser - fn Mozbrowser(&self) -> bool { - if window_from_node(self).is_mozbrowser() { - let element = self.upcast::<Element>(); - element.has_attribute(&local_name!("mozbrowser")) - } else { - false - } - } - - // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-mozbrowser - fn SetMozbrowser(&self, value: bool) { - let element = self.upcast::<Element>(); - element.set_bool_attribute(&local_name!("mozbrowser"), value); - } - // https://html.spec.whatwg.org/multipage/#attr-iframe-allowfullscreen make_bool_getter!(AllowFullscreen, "allowfullscreen"); // https://html.spec.whatwg.org/multipage/#attr-iframe-allowfullscreen make_bool_setter!(SetAllowFullscreen, "allowfullscreen"); - // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/goBack - fn GoBack(&self) -> ErrorResult { - Navigate(self, TraversalDirection::Back(1)) - } - - // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/goForward - fn GoForward(&self) -> ErrorResult { - Navigate(self, TraversalDirection::Forward(1)) - } - - // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/reload - fn Reload(&self, _hard_reload: bool) -> ErrorResult { - if self.Mozbrowser() { - if self.upcast::<Node>().is_in_doc_with_browsing_context() { - self.navigate_or_reload_child_browsing_context(None, NavigationType::Regular, true); - } - Ok(()) - } else { - debug!(concat!("this frame is not mozbrowser: mozbrowser attribute missing, or not a top", - "level window, or mozbrowser preference not set (use --pref dom.mozbrowser.enabled)")); - Err(Error::NotSupported) - } - } - - // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/setVisible - fn SetVisible(&self, visible: bool) -> ErrorResult { - if self.Mozbrowser() { - self.set_visible(visible); - Ok(()) - } else { - debug!(concat!("this frame is not mozbrowser: mozbrowser attribute missing, or not a top", - "level window, or mozbrowser preference not set (use --pref dom.mozbrowser.enabled)")); - Err(Error::NotSupported) - } - } - - // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/getVisible - fn GetVisible(&self) -> Fallible<bool> { - if self.Mozbrowser() { - Ok(self.visibility.get()) - } else { - debug!(concat!("this frame is not mozbrowser: mozbrowser attribute missing, or not a top", - "level window, or mozbrowser preference not set (use --pref dom.mozbrowser.enabled)")); - Err(Error::NotSupported) - } - } - - - // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/stop - fn Stop(&self) -> ErrorResult { - Err(Error::NotSupported) - } - // https://html.spec.whatwg.org/multipage/#dom-dim-width make_getter!(Width, "width"); // https://html.spec.whatwg.org/multipage/#dom-dim-width @@ -695,21 +457,6 @@ impl HTMLIFrameElementMethods for HTMLIFrameElement { make_getter!(FrameBorder, "frameborder"); // https://html.spec.whatwg.org/multipage/#other-elements,-attributes-and-apis:attr-iframe-frameborder make_setter!(SetFrameBorder, "frameborder"); - - // check-tidy: no specs after this line - fn SetMozprivatebrowsing(&self, value: bool) { - let element = self.upcast::<Element>(); - element.set_bool_attribute(&LocalName::from("mozprivatebrowsing"), value); - } - - fn Mozprivatebrowsing(&self) -> bool { - if window_from_node(self).is_mozbrowser() { - let element = self.upcast::<Element>(); - element.has_attribute(&LocalName::from("mozprivatebrowsing")) - } else { - false - } - } } impl VirtualMethods for HTMLIFrameElement { diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index 597a6e2e96f..be4c974bf67 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -24,7 +24,7 @@ use dom::virtualmethods::VirtualMethods; use dom_struct::dom_struct; use html5ever::{LocalName, Prefix}; use net_traits::ReferrerPolicy; -use script_traits::{MozBrowserEvent, ScriptMsg}; +use script_traits::ScriptMsg; use servo_arc::Arc; use std::borrow::ToOwned; use std::cell::Cell; @@ -309,18 +309,12 @@ impl HTMLLinkElement { }, link_url, cors_setting, integrity_metadata.to_owned()); } - fn handle_favicon_url(&self, rel: &str, href: &str, sizes: &Option<String>) { + fn handle_favicon_url(&self, _rel: &str, href: &str, _sizes: &Option<String>) { let document = document_from_node(self); match document.base_url().join(href) { Ok(url) => { let event = ScriptMsg::NewFavicon(url.clone()); document.window().upcast::<GlobalScope>().script_to_constellation_chan().send(event).unwrap(); - - let mozbrowser_event = match *sizes { - Some(ref sizes) => MozBrowserEvent::IconChange(rel.to_owned(), url.to_string(), sizes.to_owned()), - None => MozBrowserEvent::IconChange(rel.to_owned(), url.to_string(), "".to_owned()) - }; - document.trigger_mozbrowser_event(mozbrowser_event); } Err(e) => debug!("Parsing url {} failed: {}", href, e) } diff --git a/components/script/dom/webidls/BrowserElement.webidl b/components/script/dom/webidls/BrowserElement.webidl deleted file mode 100644 index 4c6273a1cef..00000000000 --- a/components/script/dom/webidls/BrowserElement.webidl +++ /dev/null @@ -1,227 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -// https://developer.mozilla.org/en-US/docs/Web/API/Using_the_Browser_API - -callback BrowserElementNextPaintEventCallback = void (); - -//enum BrowserFindCaseSensitivity { "case-sensitive", "case-insensitive" }; -//enum BrowserFindDirection { "forward", "backward" }; - -//dictionary BrowserElementDownloadOptions { -// DOMString? filename; -// DOMString? referrer; -//}; - -//dictionary BrowserElementExecuteScriptOptions { -// DOMString? url; -// DOMString? origin; -//}; - -[NoInterfaceObject, Exposed=(Window,Worker)] -interface BrowserElement { -}; - -dictionary BrowserElementSecurityChangeDetail { - - // state: - // "insecure" indicates that the data corresponding to - // the request was received over an insecure channel. - // - // "broken" indicates an unknown security state. This - // may mean that the request is being loaded as part - // of a page in which some content was received over - // an insecure channel. - // - // "secure" indicates that the data corresponding to the - // request was received over a secure channel. - DOMString state; - - // trackingState: - // "loaded_tracking_content": tracking content has been loaded. - // "blocked_tracking_content": tracking content has been blocked from loading. - DOMString trackingState; - - // mixedState: - // "blocked_mixed_active_content": Mixed active content has been blocked from loading. - // "loaded_mixed_active_content": Mixed active content has been loaded. - DOMString mixedState; - - boolean extendedValidation; - boolean trackingContent; - boolean mixedContent; -}; - -dictionary BrowserElementErrorEventDetail { - // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowsererror - // just requires a "type" field, but we also provide - // an optional human-readable description, and - // an optional machine-readable report (e.g. a backtrace for panics) - DOMString type; - DOMString description; - DOMString report; - DOMString version; -}; - -dictionary BrowserElementLocationChangeEventDetail { - DOMString url; - boolean canGoBack; - boolean canGoForward; -}; - -dictionary BrowserElementIconChangeEventDetail { - DOMString rel; - DOMString href; - DOMString sizes; -}; - -dictionary BrowserShowModalPromptEventDetail { - DOMString promptType; - DOMString title; - DOMString message; - DOMString returnValue; - // TODO(simartin) unblock() callback -}; - -dictionary BrowserElementOpenTabEventDetail { - // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowseropentab - DOMString url; -}; - -dictionary BrowserElementOpenWindowEventDetail { - // https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowseropenwindow - DOMString url; - DOMString target; - DOMString features; - // Element frameElement; -}; - -dictionary BrowserElementVisibilityChangeEventDetail { - boolean visible; -}; - -BrowserElement implements BrowserElementCommon; -BrowserElement implements BrowserElementPrivileged; - -[NoInterfaceObject, Exposed=(Window,Worker)] -interface BrowserElementCommon { - [Throws, - Pref="dom.mozbrowser.enabled"] - void setVisible(boolean visible); - - [Throws, - Pref="dom.mozbrowser.enabled"] - boolean getVisible(); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //void setActive(boolean active); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //boolean getActive(); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //void addNextPaintListener(BrowserElementNextPaintEventCallback listener); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //void removeNextPaintListener(BrowserElementNextPaintEventCallback listener); -}; - -[NoInterfaceObject, Exposed=(Window,Worker)] -interface BrowserElementPrivileged { - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //void sendMouseEvent(DOMString type, - // unsigned long x, - // unsigned long y, - // unsigned long button, - // unsigned long clickCount, - // unsigned long modifiers); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled", - // Func="TouchEvent::PrefEnabled"] - //void sendTouchEvent(DOMString type, - // sequence<unsigned long> identifiers, - // sequence<long> x, - // sequence<long> y, - // sequence<unsigned long> rx, - // sequence<unsigned long> ry, - // sequence<float> rotationAngles, - // sequence<float> forces, - // unsigned long count, - // unsigned long modifiers); - - [Func="::dom::window::Window::global_is_mozbrowser", Throws] - void goBack(); - - [Func="::dom::window::Window::global_is_mozbrowser", Throws] - void goForward(); - - [Func="::dom::window::Window::global_is_mozbrowser", Throws] - void reload(optional boolean hardReload = false); - - [Func="::dom::window::Window::global_is_mozbrowser", Throws] - void stop(); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //DOMRequest download(DOMString url, - // optional BrowserElementDownloadOptions options); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //DOMRequest purgeHistory(); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //DOMRequest getScreenshot([EnforceRange] unsigned long width, - // [EnforceRange] unsigned long height, - // optional DOMString mimeType=""); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //void zoom(float zoom); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //DOMRequest getCanGoBack(); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //DOMRequest getCanGoForward(); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //DOMRequest getContentDimensions(); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //DOMRequest setInputMethodActive(boolean isActive); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //void setNFCFocus(boolean isFocus); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //void findAll(DOMString searchString, BrowserFindCaseSensitivity caseSensitivity); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //void findNext(BrowserFindDirection direction); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //void clearMatch(); - - //[Throws, - // Pref="dom.mozBrowserFramesEnabled"] - //DOMRequest executeScript(DOMString script, - // optional BrowserElementExecuteScriptOptions options); - -}; diff --git a/components/script/dom/webidls/HTMLIFrameElement.webidl b/components/script/dom/webidls/HTMLIFrameElement.webidl index bcccb34cb0a..fec8768e8e8 100644 --- a/components/script/dom/webidls/HTMLIFrameElement.webidl +++ b/components/script/dom/webidls/HTMLIFrameElement.webidl @@ -46,13 +46,3 @@ partial interface HTMLIFrameElement { // [CEReactions, TreatNullAs=EmptyString] // attribute DOMString marginWidth; }; - -partial interface HTMLIFrameElement { - [CEReactions, Func="::dom::window::Window::global_is_mozbrowser"] - attribute boolean mozbrowser; - - [CEReactions, Func="::dom::window::Window::global_is_mozbrowser"] - attribute boolean mozprivatebrowsing; -}; - -HTMLIFrameElement implements BrowserElement; diff --git a/components/script/dom/webidls/Window.webidl b/components/script/dom/webidls/Window.webidl index 0ec0489937b..d6da05480cf 100644 --- a/components/script/dom/webidls/Window.webidl +++ b/components/script/dom/webidls/Window.webidl @@ -164,8 +164,6 @@ partial interface Window { void debug(DOMString arg); void gc(); void trap(); - [Func="Window::global_is_mozbrowser", Throws] - void openURLInDefaultBrowser(DOMString href); }; // WebDriver extensions diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index c92a04c7cd4..96b19784280 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -32,10 +32,8 @@ use dom::cssstyledeclaration::{CSSModificationAccess, CSSStyleDeclaration, CSSSt use dom::customelementregistry::CustomElementRegistry; use dom::document::{AnimationFrameCallback, Document}; use dom::element::Element; -use dom::event::Event; use dom::globalscope::GlobalScope; use dom::history::History; -use dom::htmliframeelement::build_mozbrowser_custom_event; use dom::location::Location; use dom::mediaquerylist::{MediaQueryList, WeakMediaQueryListVec}; use dom::messageevent::MessageEvent; @@ -54,18 +52,17 @@ use euclid::{Point2D, Vector2D, Rect, Size2D}; use fetch; use ipc_channel::ipc::{self, IpcSender}; use ipc_channel::router::ROUTER; -use js::jsapi::{HandleObject, HandleValue, JSAutoCompartment, JSContext}; +use js::jsapi::{HandleValue, JSAutoCompartment, JSContext}; use js::jsapi::{JS_GC, JS_GetRuntime}; use js::jsval::UndefinedValue; use layout_image::fetch_image_for_layout; use microtask::MicrotaskQueue; -use msg::constellation_msg::{FrameType, PipelineId}; +use msg::constellation_msg::PipelineId; use net_traits::{ResourceThreads, ReferrerPolicy}; use net_traits::image_cache::{ImageCache, ImageResponder, ImageResponse}; use net_traits::image_cache::{PendingImageId, PendingImageResponse}; use net_traits::storage_thread::StorageType; use num_traits::ToPrimitive; -use open; use profile_traits::mem::ProfilerChan as MemProfilerChan; use profile_traits::time::ProfilerChan as TimeProfilerChan; use script_layout_interface::{TrustedNodeAddress, PendingImageState}; @@ -76,14 +73,13 @@ use script_layout_interface::rpc::{NodeScrollIdResponse, ResolvedStyleResponse, use script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort, ScriptThreadEventCategory, Runtime}; use script_thread::{ImageCacheMsg, MainThreadScriptChan, MainThreadScriptMsg}; use script_thread::{ScriptThread, SendableMainThreadScriptChan}; -use script_traits::{ConstellationControlMsg, DocumentState, LoadData, MozBrowserEvent}; +use script_traits::{ConstellationControlMsg, DocumentState, LoadData}; use script_traits::{ScriptToConstellationChan, ScriptMsg, ScrollState, TimerEvent, TimerEventId}; use script_traits::{TimerSchedulerMsg, UntrustedNodeAddress, WindowSizeData, WindowSizeType}; use script_traits::webdriver_msg::{WebDriverJSError, WebDriverJSResult}; use selectors::attr::CaseSensitivity; use servo_arc; use servo_config::opts; -use servo_config::prefs::PREFS; use servo_geometry::{f32_rect_to_au_rect, MaxRect}; use servo_url::{Host, MutableOrigin, ImmutableOrigin, ServoUrl}; use std::borrow::ToOwned; @@ -200,7 +196,7 @@ pub struct Window { resize_event: Cell<Option<(WindowSizeData, WindowSizeType)>>, /// Parent id associated with this page, if any. - parent_info: Option<(PipelineId, FrameType)>, + parent_info: Option<PipelineId>, /// Global static data related to the DOM. dom_static: GlobalStaticData, @@ -343,7 +339,7 @@ impl Window { &self.script_chan.0 } - pub fn parent_info(&self) -> Option<(PipelineId, FrameType)> { + pub fn parent_info(&self) -> Option<PipelineId> { self.parent_info } @@ -520,7 +516,7 @@ impl WindowMethods for Window { // https://html.spec.whatwg.org/multipage/#dom-alert fn Alert(&self, s: DOMString) { - // Right now, just print to the console + // Print to the console. // Ensure that stderr doesn't trample through the alert() we use to // communicate test results (see executorservo.py in wptrunner). { @@ -992,17 +988,6 @@ impl WindowMethods for Window { *self.status.borrow_mut() = status } - // check-tidy: no specs after this line - fn OpenURLInDefaultBrowser(&self, href: DOMString) -> ErrorResult { - let url = ServoUrl::parse(&href).map_err(|e| { - Error::Type(format!("Couldn't parse URL: {}", e)) - })?; - match open::that(url.as_str()) { - Ok(_) => Ok(()), - Err(e) => Err(Error::Type(format!("Couldn't open URL: {}", e))), - } - } - // https://drafts.csswg.org/cssom-view/#dom-window-matchmedia fn MatchMedia(&self, query: DOMString) -> DomRoot<MediaQueryList> { let mut input = ParserInput::new(&query); @@ -1682,31 +1667,7 @@ impl Window { // https://html.spec.whatwg.org/multipage/#top-level-browsing-context pub fn is_top_level(&self) -> bool { - match self.parent_info { - Some((_, FrameType::IFrame)) => false, - _ => true, - } - } - - /// Returns whether this window is mozbrowser. - pub fn is_mozbrowser(&self) -> bool { - PREFS.is_mozbrowser_enabled() && self.parent_info().is_none() - } - - /// Returns whether mozbrowser is enabled and `obj` has been created - /// in a top-level `Window` global. - #[allow(unsafe_code)] - pub unsafe fn global_is_mozbrowser(_: *mut JSContext, obj: HandleObject) -> bool { - GlobalScope::from_object(obj.get()) - .downcast::<Window>() - .map_or(false, |window| window.is_mozbrowser()) - } - - #[allow(unsafe_code)] - pub fn dispatch_mozbrowser_event(&self, event: MozBrowserEvent) { - assert!(PREFS.is_mozbrowser_enabled()); - let custom_event = build_mozbrowser_custom_event(&self, event); - custom_event.upcast::<Event>().fire(self.upcast()); + self.parent_info.is_none() } pub fn evaluate_media_queries_and_report_changes(&self) { @@ -1769,7 +1730,7 @@ impl Window { timer_event_chan: IpcSender<TimerEvent>, layout_chan: Sender<Msg>, pipelineid: PipelineId, - parent_info: Option<(PipelineId, FrameType)>, + parent_info: Option<PipelineId>, window_size: Option<WindowSizeData>, origin: MutableOrigin, navigation_start: u64, diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 33c62a38cd5..b7b652a6f91 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -60,7 +60,6 @@ use net_traits::trim_http_whitespace; use network_listener::{NetworkListener, PreInvoke}; use script_traits::DocumentActivity; use servo_atoms::Atom; -use servo_config::prefs::PREFS; use servo_url::ServoUrl; use std::borrow::ToOwned; use std::cell::Cell; @@ -572,20 +571,6 @@ impl XMLHttpRequestMethods for XMLHttpRequest { unreachable!() }; - let bypass_cross_origin_check = { - // We want to be able to do cross-origin requests in browser.html. - // If the XHR happens in a top level window and the mozbrowser - // preference is enabled, we allow bypassing the CORS check. - // This is a temporary measure until we figure out Servo privilege - // story. See https://github.com/servo/servo/issues/9582 - if let Some(win) = DomRoot::downcast::<Window>(self.global()) { - let is_root_pipeline = win.parent_info().is_none(); - is_root_pipeline && PREFS.is_mozbrowser_enabled() - } else { - false - } - }; - let mut request = RequestInit { method: self.request_method.borrow().clone(), url: self.request_url.borrow().clone().unwrap(), @@ -608,10 +593,6 @@ impl XMLHttpRequestMethods for XMLHttpRequest { .. RequestInit::default() }; - if bypass_cross_origin_check { - request.mode = RequestMode::Navigate; - } - // step 4 (second half) match extracted_or_serialized { Some((_, ref content_type)) => { diff --git a/components/script/lib.rs b/components/script/lib.rs index a871b320758..e28bf016e55 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -70,7 +70,6 @@ extern crate msg; extern crate net_traits; extern crate num_traits; extern crate offscreen_gl_context; -extern crate open; extern crate parking_lot; extern crate phf; #[macro_use] diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 5cfa02d2974..3a51c812dce 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -77,7 +77,7 @@ use malloc_size_of::MallocSizeOfOps; use mem::malloc_size_of_including_self; use metrics::{MAX_TASK_NS, PaintTimeMetrics}; use microtask::{MicrotaskQueue, Microtask}; -use msg::constellation_msg::{BrowsingContextId, FrameType, PipelineId, PipelineNamespace, TopLevelBrowsingContextId}; +use msg::constellation_msg::{BrowsingContextId, PipelineId, PipelineNamespace, TopLevelBrowsingContextId}; use net_traits::{FetchMetadata, FetchResponseListener, FetchResponseMsg}; use net_traits::{Metadata, NetworkError, ReferrerPolicy, ResourceThreads}; use net_traits::image_cache::{ImageCache, PendingImageResponse}; @@ -91,7 +91,7 @@ use script_runtime::{ScriptPort, get_reports, new_rt_and_cx, Runtime}; use script_traits::{CompositorEvent, ConstellationControlMsg}; use script_traits::{DiscardBrowsingContext, DocumentActivity, EventResult}; use script_traits::{InitialScriptState, JsEvalResult, LayoutMsg, LoadData}; -use script_traits::{MouseButton, MouseEventType, MozBrowserEvent, NewLayoutInfo}; +use script_traits::{MouseButton, MouseEventType, NewLayoutInfo}; use script_traits::{ProgressiveWebMetricType, Painter, ScriptMsg, ScriptThreadFactory}; use script_traits::{ScriptToConstellationChan, TimerEvent, TimerSchedulerMsg}; use script_traits::{TimerSource, TouchEventType, TouchId, UntrustedNodeAddress}; @@ -153,7 +153,7 @@ struct InProgressLoad { /// The top level ancestor browsing context. top_level_browsing_context_id: TopLevelBrowsingContextId, /// The parent pipeline and frame type associated with this load, if any. - parent_info: Option<(PipelineId, FrameType)>, + parent_info: Option<PipelineId>, /// The current window size associated with this pipeline. window_size: Option<WindowSizeData>, /// Channel to the layout thread associated with this pipeline. @@ -179,7 +179,7 @@ impl InProgressLoad { fn new(id: PipelineId, browsing_context_id: BrowsingContextId, top_level_browsing_context_id: TopLevelBrowsingContextId, - parent_info: Option<(PipelineId, FrameType)>, + parent_info: Option<PipelineId>, layout_chan: Sender<message::Msg>, window_size: Option<WindowSizeData>, url: ServoUrl, @@ -980,7 +980,7 @@ impl ScriptThread { let origin = if new_layout_info.load_data.url.as_str() != "about:blank" { MutableOrigin::new(new_layout_info.load_data.url.origin()) } else if let Some(parent) = new_layout_info.parent_info - .and_then(|(pipeline_id, _)| self.documents.borrow() + .and_then(|pipeline_id| self.documents.borrow() .find_document(pipeline_id)) { parent.origin().clone() } else if let Some(creator) = new_layout_info.load_data.creator_pipeline_id @@ -1168,7 +1168,6 @@ impl ScriptThread { NotifyVisibilityChange(id, ..) => Some(id), Navigate(id, ..) => Some(id), PostMessage(id, ..) => Some(id), - MozBrowserEvent(id, ..) => Some(id), UpdatePipelineId(_, _, id, _) => Some(id), FocusIFrame(id, ..) => Some(id), WebDriverScriptCommand(id, ..) => Some(id), @@ -1288,12 +1287,6 @@ impl ScriptThread { self.handle_visibility_change_complete_msg(parent_pipeline_id, browsing_context_id, visible), ConstellationControlMsg::PostMessage(pipeline_id, origin, data) => self.handle_post_message_msg(pipeline_id, origin, data), - ConstellationControlMsg::MozBrowserEvent(parent_pipeline_id, - top_level_browsing_context_id, - event) => - self.handle_mozbrowser_event_msg(parent_pipeline_id, - top_level_browsing_context_id, - event), ConstellationControlMsg::UpdatePipelineId(parent_pipeline_id, browsing_context_id, new_pipeline_id, @@ -1692,27 +1685,6 @@ impl ScriptThread { } } - /// Handles a mozbrowser event, for example see: - /// <https://developer.mozilla.org/en-US/docs/Web/Events/mozbrowserloadstart> - fn handle_mozbrowser_event_msg(&self, - parent_pipeline_id: PipelineId, - top_level_browsing_context_id: Option<TopLevelBrowsingContextId>, - event: MozBrowserEvent) { - let doc = match { self.documents.borrow().find_document(parent_pipeline_id) } { - None => return warn!("Mozbrowser event after pipeline {} closed.", parent_pipeline_id), - Some(doc) => doc, - }; - - match top_level_browsing_context_id { - None => doc.window().dispatch_mozbrowser_event(event), - Some(top_level_browsing_context_id) => match doc.find_mozbrowser_iframe(top_level_browsing_context_id) { - None => warn!("Mozbrowser event after iframe {}/{} closed.", - parent_pipeline_id, top_level_browsing_context_id), - Some(frame_element) => frame_element.dispatch_mozbrowser_event(event), - }, - } - } - fn handle_update_pipeline_id(&self, parent_pipeline_id: PipelineId, browsing_context_id: BrowsingContextId, @@ -2026,7 +1998,7 @@ impl ScriptThread { result_receiver.recv().expect("Failed to get frame id from constellation.") } - fn ask_constellation_for_parent_info(&self, pipeline_id: PipelineId) -> Option<(PipelineId, FrameType)> { + fn ask_constellation_for_parent_info(&self, pipeline_id: PipelineId) -> Option<PipelineId> { let (result_sender, result_receiver) = ipc::channel().unwrap(); let msg = ScriptMsg::GetParentInfo(pipeline_id, result_sender); self.script_sender.send((pipeline_id, msg)).expect("Failed to send to constellation."); @@ -2049,12 +2021,9 @@ impl ScriptThread { if let Some(window_proxy) = self.window_proxies.borrow().get(&browsing_context_id) { return Some(DomRoot::from_ref(window_proxy)); } - let parent = match self.ask_constellation_for_parent_info(pipeline_id) { - Some((parent_id, FrameType::IFrame)) => self.remote_window_proxy(global_to_clone, - top_level_browsing_context_id, - parent_id), - _ => None, - }; + let parent = self.ask_constellation_for_parent_info(pipeline_id).and_then(|parent_id| { + self.remote_window_proxy(global_to_clone, top_level_browsing_context_id, parent_id) + }); let window_proxy = WindowProxy::new_dissimilar_origin(global_to_clone, browsing_context_id, top_level_browsing_context_id, @@ -2073,22 +2042,21 @@ impl ScriptThread { window: &Window, browsing_context_id: BrowsingContextId, top_level_browsing_context_id: TopLevelBrowsingContextId, - parent_info: Option<(PipelineId, FrameType)>) + parent_info: Option<PipelineId>) -> DomRoot<WindowProxy> { if let Some(window_proxy) = self.window_proxies.borrow().get(&browsing_context_id) { window_proxy.set_currently_active(&*window); return DomRoot::from_ref(window_proxy); } - let iframe = match parent_info { - Some((parent_id, FrameType::IFrame)) => self.documents.borrow().find_iframe(parent_id, browsing_context_id), - _ => None, - }; + let iframe = parent_info.and_then(|parent_id| { + self.documents.borrow().find_iframe(parent_id, browsing_context_id) + }); let parent = match (parent_info, iframe.as_ref()) { (_, Some(iframe)) => Some(window_from_node(&**iframe).window_proxy()), - (Some((parent_id, FrameType::IFrame)), _) => self.remote_window_proxy(window.upcast(), - top_level_browsing_context_id, - parent_id), + (Some(parent_id), _) => self.remote_window_proxy(window.upcast(), + top_level_browsing_context_id, + parent_id), _ => None, }; let window_proxy = WindowProxy::new(&window, |