Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement synchronous about:blank loading. #13996

Merged
merged 6 commits into from Dec 1, 2016
Merged

Implement synchronous about:blank loading. #13996

merged 6 commits into from Dec 1, 2016

Conversation

@Ms2ger
Copy link
Contributor

Ms2ger commented Oct 31, 2016

Based on initial work by jdm in #8600.


This change is Reviewable

@highfive
Copy link

highfive commented Oct 31, 2016

Heads up! This PR modifies the following files:

  • @asajeffrey: components/constellation/pipeline.rs, components/constellation/constellation.rs
  • @fitzgen: components/script_traits/lib.rs, components/script_traits/lib.rs, components/script_traits/script_msg.rs, components/script_traits/script_msg.rs, components/script/script_thread.rs, components/script_layout_interface/message.rs, components/script/dom/htmliframeelement.rs
  • @KiChjang: components/script_traits/lib.rs, components/script_traits/lib.rs, components/script_traits/script_msg.rs, components/script_traits/script_msg.rs, components/script/script_thread.rs, components/script_layout_interface/message.rs, components/script/dom/htmliframeelement.rs
@highfive
Copy link

highfive commented Oct 31, 2016

warning Warning warning

  • These commits modify unsafe code. Please review it carefully!
@Ms2ger
Copy link
Contributor Author

Ms2ger commented Oct 31, 2016

@bors-servo
Copy link
Contributor

bors-servo commented Oct 31, 2016

Trying commit 88926e2 with merge 639bb3f...

bors-servo added a commit that referenced this pull request Oct 31, 2016
Implement synchronous about:blank loading.

Based on initial work by jdm in <#8600>.
@bors-servo
Copy link
Contributor

bors-servo commented Oct 31, 2016

💔 Test failed - mac-rel-wpt1

@highfive
Copy link

highfive commented Oct 31, 2016

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 10 [document.documentElement, 0, document.documentElement, 1]

  ▶ Unexpect</span><span class="stdout">ed subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 10 [document.documentElement, 0, document.documentElement, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 10 [document.documentElement, 0, document.documentElement, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 11 [document.documentElement, 0, document.documentElement, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 11 [document.documentElement, 0, document.documentElement, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 11 [document.documentElement, 0, document.documentElement, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 12 [document.documentElement, 1, document.documentElement, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 12 [document.documentElement, 1, document.documentElement, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 12 [document.documentElement, 1, document.documentElement, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 13 [document.head, 1, document.head, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 13 [document.head, 1, document.head, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 13 [document.head, 1, document.head, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 14 [document.body, 4, document.body, 5]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 14 [document.body, 4, document.body, 5]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 14 [document.body, 4, document.body, 5]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 16 [paras[0], 0, paras[0], 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 16 [paras[0], 0, paras[0], 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 16 [paras[0], 0, paras[0], 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 17 [detachedPara1, 0, detachedPara1, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 17 [detachedPara1, 0, detachedPara1, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 17 [detachedPara1, 0, detachedPara1, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 20 [paras[0].firstChild, 3, paras[3], 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 20 [paras[0].firstChild, 3, paras[3], 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 20 [paras[0].firstChild, 3, paras[3], 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 21 [paras[0], 0, paras[0].firstChild, 7]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 21 [paras[0], 0, paras[0].firstChild, 7]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 21 [paras[0], 0, paras[0].firstChild, 7]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 22 [testDiv, 2, paras[4], 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 22 [testDiv, 2, paras[4], 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 22 [testDiv, 2, paras[4], 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 23 [document, 0, document, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 23 [document, 0, document, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 23 [document, 0, document, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 24 [document, 0, document, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 24 [document, 0, document, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 24 [document, 0, document, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 25 [comment, 2, comment, 3]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 25 [comment, 2, comment, 3]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 25 [comment, 2, comment, 3]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 26 [testDiv, 0, comment, 5]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 26 [testDiv, 0, comment, 5]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 26 [testDiv, 0, comment, 5]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 27 [foreignDoc, 1, foreignComment, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 27 [foreignDoc, 1, foreignComment, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 27 [foreignDoc, 1, foreignComment, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 28 [foreignDoc.body, 0, foreignTextNode, 36]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 28 [foreignDoc.body, 0, foreignTextNode, 36]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 28 [foreignDoc.body, 0, foreignTextNode, 36]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 29 [xmlDoc, 1, xmlComment, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cl</span><span class="stdout">oneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 29 [xmlDoc, 1, xmlComment, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 29 [xmlDoc, 1, xmlComment, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 30 [detachedTextNode, 0, detachedTextNode, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 30 [detachedTextNode, 0, detachedTextNode, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 30 [detachedTextNode, 0, detachedTextNode, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 33 [detachedComment, 3, detachedComment, 4]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 33 [detachedComment, 3, detachedComment, 4]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 33 [detachedComment, 3, detachedComment, 4]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 34 [detachedForeignComment, 0, detachedForeignComment, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 34 [detachedForeignComment, 0, detachedForeignComment, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 34 [detachedForeignComment, 0, detachedForeignComment, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 35 [detachedXmlComment, 2, detachedXmlComment, 6]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 35 [detachedXmlComment, 2, detachedXmlComment, 6]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 35 [detachedXmlComment, 2, detachedXmlComment, 6]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 36 [docfrag, 0, docfrag, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 36 [docfrag, 0, docfrag, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 36 [docfrag, 0, docfrag, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 37 [processingInstruction, 0, processingInstruction, 4]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 37 [processingInstruction, 0, processingInstruction, 4]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 37 [processingInstruction, 0, processingInstruction, 4]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 42 [foreignDoc.head, 1, foreignDoc.head, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 42 [foreignDoc.head, 1, foreignDoc.head, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 42 [foreignDoc.head, 1, foreignDoc.head, 1]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 43 [foreignDoc.body, 0, foreignDoc.body, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 43 [foreignDoc.body, 0, foreignDoc.body, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 43 [foreignDoc.body, 0, foreignDoc.body, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 44 [paras[0], 0, paras[0], 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 44 [paras[0], 0, paras[0], 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 44 [paras[0], 0, paras[0], 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 45 [detachedPara1, 0, detachedPara1, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 45 [detachedPara1, 0, detachedPara1, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 45 [detachedPara1, 0, detachedPara1, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 46 [testDiv, 1, paras[2].firstChild, 5]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 46 [testDiv, 1, paras[2].firstChild, 5]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 46 [testDiv, 1, paras[2].firstChild, 5]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 47 [document.documentElement, 1, document.body, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 47 [document.documentElement, 1, document.body, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 47 [document.documentEle</span><span class="stdout">ment, 1, document.body, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 49 [document, 1, document, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 49 [document, 1, document, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 49 [document, 1, document, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 50 [paras[2].firstChild, 4, comment, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 50 [paras[2].firstChild, 4, comment, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 50 [paras[2].firstChild, 4, comment, 2]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 51 [paras[3], 1, comment, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 51 [paras[3], 1, comment, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 51 [paras[3], 1, comment, 8]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 52 [foreignDoc, 0, foreignDoc, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 52 [foreignDoc, 0, foreignDoc, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 52 [foreignDoc, 0, foreignDoc, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 53 [xmlDoc, 0, xmlDoc, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 53 [xmlDoc, 0, xmlDoc, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 53 [xmlDoc, 0, xmlDoc, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 56 [detachedComment, 5, detachedComment, 5]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 56 [detachedComment, 5, detachedComment, 5]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 56 [detachedComment, 5, detachedComment, 5]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 57 [detachedForeignComment, 4, detachedForeignComment, 4]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 57 [detachedForeignComment, 4, detachedForeignComment, 4]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 57 [detachedForeignComment, 4, detachedForeignComment, 4]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 58 [foreignDocfrag, 0, foreignDocfrag, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 58 [foreignDocfrag, 0, foreignDocfrag, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 58 [foreignDocfrag, 0, foreignDocfrag, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting DOM for range 59 [xmlDocfrag, 0, xmlDocfrag, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Resulting cursor position for range 59 [xmlDocfrag, 0, xmlDocfrag, 0]

  ▶ Unexpected subtest result in /dom/ranges/Range-cloneContents.html:
  └ NOTRUN [expected PASS] Returned fragment for range 59 [xmlDocfrag, 0, xmlDocfrag, 0]

  ▶ Unexpected subtest result in /html/browsers/origin/cross-origin-objects/cross-origin-objects.html:
  │ FAIL [expected PASS] Same-origin observers get different accessors for cross-origin Window
  │   → assert_true: different Window accessors per-incumbent script settings object expected true got false
  │ 
  │ @http://web-platform.test:8000/html/browsers/origin/cross-origin-objects/cross-origin-objects.html:285:3
  │ Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1401:20
  │ test@http://web-platform.test:8000/resources/testharness.js:501:9
  │ runNextTest@http://web-platform.test:8000/html/browsers/origin/cross-origin-objects/cross-origin-objects.html:307:3
  └ frameLoaded@http://web-platform.test:8000/html/browsers/origin/cross-origin-objects/cross-origin-objects.html:23:7
@Ms2ger
Copy link
Contributor Author

Ms2ger commented Oct 31, 2016

r? @jdm

@highfive highfive assigned jdm and unassigned nox Oct 31, 2016
Copy link
Member

jdm left a comment

This design is much better than the one in #8600. Great work!

assert!(self.nested_browsing_context.get().is_none());
// Synchronously create a new context and navigate it to about:blank.
let url = Url::parse("about:blank").unwrap();
// TODO - loaddata here should have referrer info (not None, None)

This comment has been minimized.

@jdm

jdm Oct 31, 2016

Member

Let's do this? Get it from the iframe's document.

pub fn window_for_pipeline(pipeline: PipelineId) -> Root<Window> {
SCRIPT_THREAD_ROOT.with(|root| {
let script_thread = unsafe { &*root.get().unwrap() };
let page = script_thread.find_child_context(pipeline).unwrap();

This comment has been minimized.

@jdm

jdm Oct 31, 2016

Member

Let's make this function return Option<Root<Window>> instead.

impl Runnable for IframeLoadEventSteps {
fn handler(self: Box<IframeLoadEventSteps>) {
let this = self.frame_element.root();
this.iframe_load_event_steps(this.pipeline_id().unwrap());

This comment has been minimized.

@jdm

jdm Oct 31, 2016

Member

Perhaps the pipeline id should be stored in the runnable, to avoid problems with initiating multiple loads for an iframe?

This comment has been minimized.

@Ms2ger

Ms2ger Nov 2, 2016

Author Contributor

I have no idea why that method even takes a pipeline id; all it does is compare it to self.pipeline_id().unwrap().

This comment has been minimized.

@jdm

jdm Nov 24, 2016

Member

It's to determine if the load event is relevant to the current iframe contents. As written, this is redundant; we should store the pipeline that was in use when the runnable was created instead.

fn process_the_iframe_attributes(&self, mode: ProcessingMode) {
// TODO: srcdoc

if mode == ProcessingMode::FirstTime && !self.upcast::<Element>().has_attribute(&atom!("src")) {

This comment has been minimized.

@jdm

jdm Oct 31, 2016

Member

Let's add a comment pointing at whatwg/html#490.

@@ -73,6 +83,7 @@ pub struct HTMLIFrameElement {
sandbox_allowance: Cell<Option<SandboxAllowance>>,
load_blocker: DOMRefCell<Option<LoadBlocker>>,
visibility: Cell<bool>,
nested_browsing_context: MutNullableHeap<JS<BrowsingContext>>,

This comment has been minimized.

@jdm

jdm Oct 31, 2016

Member

It's not clear to me what the purpose of this is, except for asserting that it doesn't exist in create_nested_browsing_context.

@@ -277,7 +277,9 @@ impl LayoutThreadFactory for LayoutThread {
layout.start();
}, reporter_name, sender, Msg::CollectReports);
}
let _ = content_process_shutdown_chan.send(());
if let Some(content_process_shutdown_chan) = content_process_shutdown_chan {

This comment has been minimized.

@jdm

jdm Oct 31, 2016

Member

It's not clear to me what the effect of this change is. Why is it ok to not have one for about:blank layout threads?

This comment has been minimized.

@Ms2ger

Ms2ger Nov 2, 2016

Author Contributor

We only listen on the receiver if we spawned a new script thread (or process) for the new pipeline; about:blank always lives in its parent's script thread. I could create a channel and immediately drop the receiver, but that seemed pointless.

@bors-servo
Copy link
Contributor

bors-servo commented Nov 2, 2016

The latest upstream changes (presumably #13742) made this pull request unmergeable. Please resolve the merge conflicts.

@emilio
Copy link
Member

emilio commented Nov 2, 2016

@bors-servo
Copy link
Contributor

bors-servo commented Nov 2, 2016

Trying commit 5a38298 with merge dccb4cd...

bors-servo added a commit that referenced this pull request Nov 2, 2016
Implement synchronous about:blank loading.

Based on initial work by jdm in <#8600>.

<!-- 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/13996)
<!-- Reviewable:end -->
@bors-servo
Copy link
Contributor

bors-servo commented Nov 2, 2016

💔 Test failed - linux-rel-wpt

@jdm jdm removed the S-needs-rebase label Nov 2, 2016
@jdm
Copy link
Member

jdm commented Nov 2, 2016

I'm going to delay reviewing the newest changes until the tests pass.

@bors-servo
Copy link
Contributor

bors-servo commented Nov 30, 2016

💔 Test failed - linux-rel-wpt

@KiChjang
Copy link
Member

KiChjang commented Nov 30, 2016

@bors-servo
Copy link
Contributor

bors-servo commented Nov 30, 2016

Previous build results for arm32, arm64, linux-dev, linux-rel-css, mac-dev-unit, mac-rel-css, mac-rel-wpt1, mac-rel-wpt2, windows-dev are reusable. Rebuilding only linux-rel-wpt...

@bors-servo
Copy link
Contributor

bors-servo commented Nov 30, 2016

💔 Test failed - linux-rel-wpt

@asajeffrey
Copy link
Member

asajeffrey commented Nov 30, 2016

@bors-servo
Copy link
Contributor

bors-servo commented Nov 30, 2016

Previous build results for arm32, arm64, linux-dev, linux-rel-css, mac-dev-unit, mac-rel-css, mac-rel-wpt1, mac-rel-wpt2, windows-dev are reusable. Rebuilding only linux-rel-wpt...

@bors-servo
Copy link
Contributor

bors-servo commented Nov 30, 2016

💔 Test failed - linux-rel-wpt

@asajeffrey
Copy link
Member

asajeffrey commented Nov 30, 2016

@bors-servo
Copy link
Contributor

bors-servo commented Nov 30, 2016

Previous build results for arm32, arm64, linux-dev, linux-rel-css, mac-dev-unit, mac-rel-css, mac-rel-wpt1, mac-rel-wpt2, windows-dev are reusable. Rebuilding only linux-rel-wpt...

@bors-servo
Copy link
Contributor

bors-servo commented Nov 30, 2016

💔 Test failed - linux-rel-wpt

@asajeffrey
Copy link
Member

asajeffrey commented Nov 30, 2016

Another collection of intermittents, sigh:

  ▶ FAIL [expected PASS] /_mozilla/css/iframe/overflow.html
  └   → /_mozilla/css/iframe/overflow.html d9d9e489bc5b4508c01b06c7ff92f19dcc2ece3c
/_mozilla/css/iframe/overflow_ref.html 10bfffa0585cecabc78f349636827d6267b2f816
Testing d9d9e489bc5b4508c01b06c7ff92f19dcc2ece3c == 10bfffa0585cecabc78f349636827d6267b2f816

  ▶ FAIL [expected PASS] /_mozilla/css/iframe/navigation.html
  └   → /_mozilla/css/iframe/navigation.html 8250706e506ad24231cc23be315b9b868387c598
/_mozilla/css/iframe/navigation_ref.html e60785ff75153e5d215bd0f65141fbb13cfbc61b
Testing 8250706e506ad24231cc23be315b9b868387c598 == e60785ff75153e5d215bd0f65141fbb13cfbc61b

  ▶ Unexpected subtest result in /html/browsers/browsing-the-web/navigating-across-documents/002.html:
  │ FAIL [expected PASS] Multiple simultaneous navigations
  │   → assert_equals: expected "002-2" but got "002-1"
  │ 
  │ onmessage<@http://web-platform.test:8000/html/browsers/browsing-the-web/navigating-across-documents/002.html:13:3
  │ Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1406:20
  └ Test.prototype.step_func/<@http://web-platform.test:8000/resources/testharness.js:1430:20
@Ms2ger
Copy link
Contributor Author

Ms2ger commented Dec 1, 2016

Let's see how intermittent

@bors-servo retry

@bors-servo
Copy link
Contributor

bors-servo commented Dec 1, 2016

Testing commit 6075d0e with merge 0d896a8...

bors-servo added a commit that referenced this pull request Dec 1, 2016
Implement synchronous about:blank loading.

Based on initial work by jdm in <#8600>.

<!-- 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/13996)
<!-- Reviewable:end -->
@bors-servo
Copy link
Contributor

bors-servo commented Dec 1, 2016

@bors-servo bors-servo merged commit 6075d0e into master Dec 1, 2016
4 checks passed
4 checks passed
continuous-integration/appveyor/pr AppVeyor build succeeded
Details
continuous-integration/travis-ci/pr The Travis CI build passed
Details
dependency-ci Dependencies checked
Details
homu Test successful
Details
@asajeffrey
Copy link
Member

asajeffrey commented Dec 1, 2016

@Ms2ger must have the magic touch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

9 participants
You can’t perform that action at this time.