aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-05-02 05:32:25 -0700
committerbors-servo <lbergstrom+bors@mozilla.com>2016-05-02 05:32:25 -0700
commitd32648172c711b5d95819c58bcedcee5f50f3018 (patch)
treed21dca35ab759a657d081693dac4ce8e754ec80c /components/script
parent5358df5a16d514d2d93a5959787af47e2f5f8452 (diff)
parenteba74554f370c673b67085e55ce480652c52dfb6 (diff)
downloadservo-d32648172c711b5d95819c58bcedcee5f50f3018.tar.gz
servo-d32648172c711b5d95819c58bcedcee5f50f3018.zip
Auto merge of #10969 - servo:iframe, r=KiChjang
Iframe improvements. <!-- Reviewable:start --> This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10969) <!-- Reviewable:end -->
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/htmliframeelement.rs25
1 files changed, 12 insertions, 13 deletions
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs
index bf3ff02487c..42f5a8e17e7 100644
--- a/components/script/dom/htmliframeelement.rs
+++ b/components/script/dom/htmliframeelement.rs
@@ -76,7 +76,9 @@ impl HTMLIFrameElement {
self.sandbox.get().is_some()
}
- pub fn get_url(&self) -> Option<Url> {
+ /// <https://html.spec.whatwg.org/multipage/#otherwise-steps-for-iframe-or-frame-elements>,
+ /// step 1.
+ fn get_url(&self) -> Url {
let element = self.upcast::<Element>();
element.get_attribute(&ns!(), &atom!("src")).and_then(|src| {
let url = src.value();
@@ -85,7 +87,7 @@ impl HTMLIFrameElement {
} else {
document_from_node(self).base_url().join(&url).ok()
}
- })
+ }).unwrap_or_else(|| Url::parse("about:blank").unwrap())
}
pub fn generate_new_subpage_id(&self) -> (SubpageId, Option<SubpageId>) {
@@ -144,10 +146,7 @@ impl HTMLIFrameElement {
}
pub fn process_the_iframe_attributes(&self) {
- let url = match self.get_url() {
- Some(url) => url,
- None => Url::parse("about:blank").unwrap(),
- };
+ let url = self.get_url();
// TODO - loaddata here should have referrer info (not None, None)
self.navigate_or_reload_child_browsing_context(Some(LoadData::new(url, None, None)));
@@ -430,10 +429,9 @@ impl HTMLIFrameElementMethods for HTMLIFrameElement {
// https://html.spec.whatwg.org/multipage/#dom-iframe-contentdocument
fn GetContentDocument(&self) -> Option<Root<Document>> {
self.GetContentWindow().and_then(|window| {
- let self_url = match self.get_url() {
- Some(self_url) => self_url,
- None => return None,
- };
+ // FIXME(#10964): this should use the Document's origin and the
+ // origin of the incumbent settings object.
+ let self_url = self.get_url();
let win_url = window_from_node(self).get_url();
if UrlHelper::SameOrigin(&self_url, &win_url) {
@@ -585,11 +583,12 @@ impl VirtualMethods for HTMLIFrameElement {
// Since most of this cleanup doesn't happen on same-origin
// iframes, and since that would cause a deadlock, don't do it.
let ConstellationChan(ref chan) = *window.constellation_chan();
- let same_origin = if let Some(self_url) = self.get_url() {
+ let same_origin = {
+ // FIXME(#10968): this should probably match the origin check in
+ // HTMLIFrameElement::contentDocument.
+ let self_url = self.get_url();
let win_url = window_from_node(self).get_url();
UrlHelper::SameOrigin(&self_url, &win_url)
- } else {
- false
};
let (sender, receiver) = if same_origin {
(None, None)