aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/script_task.rs
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-08-19 01:40:28 -0600
committerbors-servo <metajack+bors@gmail.com>2015-08-19 01:40:28 -0600
commit70b9922eb021a41ebdd9f54a4db0e9ddfb17786a (patch)
treed3e8a28e54cc3941a3126fcfd13f3be108dbc578 /components/script/script_task.rs
parent19d466b06250f10169e88fc7f0b447c7f2f8209e (diff)
parentaf31e8ed0f3f74908fb2c970e8b2f254ba0d70bd (diff)
downloadservo-70b9922eb021a41ebdd9f54a4db0e9ddfb17786a.tar.gz
servo-70b9922eb021a41ebdd9f54a4db0e9ddfb17786a.zip
Auto merge of #7260 - notriddle:issue_7169, r=Ms2ger
Navigate to a new page even when there's a fragment. Closes #7169 <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7260) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/script_task.rs')
-rw-r--r--components/script/script_task.rs27
1 files changed, 18 insertions, 9 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index 8d342a9eaf5..438efaed0b1 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -82,6 +82,7 @@ use util::opts;
use euclid::Rect;
use euclid::point::Point2D;
use hyper::header::{LastModified, Headers};
+use hyper::method::Method;
use ipc_channel::ipc::{self, IpcSender};
use ipc_channel::router::ROUTER;
use js::glue::CollectServoSizes;
@@ -1727,16 +1728,24 @@ impl ScriptTask {
/// for the given pipeline (specifically the "navigate" algorithm).
fn handle_navigate(&self, pipeline_id: PipelineId, subpage_id: Option<SubpageId>, load_data: LoadData) {
// Step 8.
- if let Some(fragment) = load_data.url.fragment {
- let page = get_page(&self.root_page(), pipeline_id);
- let document = page.document();
- match document.r().find_fragment_node(fragment) {
- Some(ref node) => {
- self.scroll_fragment_point(pipeline_id, node.r());
+ {
+ let nurl = &load_data.url;
+ if let Some(ref fragment) = nurl.fragment {
+ let page = get_page(&self.root_page(), pipeline_id);
+ let document = page.document();
+ let document = document.r();
+ let url = document.url();
+ if url.scheme == nurl.scheme && url.scheme_data == nurl.scheme_data &&
+ url.query == nurl.query && load_data.method == Method::Get {
+ match document.find_fragment_node(&*fragment) {
+ Some(ref node) => {
+ self.scroll_fragment_point(pipeline_id, node.r());
+ }
+ None => {}
+ }
+ return;
}
- None => {}
}
- return;
}
match subpage_id {
@@ -1767,7 +1776,7 @@ impl ScriptTask {
let document = page.document();
let fragment_node = window.r().steal_fragment_name()
- .and_then(|name| document.r().find_fragment_node(name));
+ .and_then(|name| document.r().find_fragment_node(&*name));
match fragment_node {
Some(ref node) => self.scroll_fragment_point(pipeline_id, node.r()),
None => {}