TEST_F(PrintContextFrameTest, WithScrolledSubframe) { MockCanvas canvas; document().setBaseURLOverride(KURL(ParsedURLString, "http://a.com/")); setBodyInnerHTML("<style>::-webkit-scrollbar { display: none }</style>" "<iframe id='frame' src='http://b.com/' width='500' height='500'" " style='border-width: 5px; margin: 5px; position: absolute; top: 90px; left: 90px'></iframe>"); Document& frameDocument = setupChildIframe("frame", absoluteBlockHtmlForLink(10, 10, 20, 20, "http://invisible.com") + absoluteBlockHtmlForLink(50, 60, 70, 80, "http://partly.visible.com") + absoluteBlockHtmlForLink(150, 160, 170, 180, "http://www.google.com") + absoluteBlockHtmlForLink(250, 260, 270, 280, "http://www.google.com#fragment") + absoluteBlockHtmlForLink(850, 860, 70, 80, "http://another.invisible.com")); frameDocument.domWindow()->scrollTo(100, 100); printSinglePage(canvas); const Vector<MockCanvas::Operation>& operations = canvas.recordedOperations(); ASSERT_EQ(3u, operations.size()); EXPECT_EQ(MockCanvas::DrawRect, operations[0].type); EXPECT_SKRECT_EQ(50, 60, 70, 80, operations[0].rect); // FIXME: the rect should be clipped. EXPECT_EQ(MockCanvas::DrawRect, operations[1].type); EXPECT_SKRECT_EQ(150, 160, 170, 180, operations[1].rect); EXPECT_EQ(MockCanvas::DrawRect, operations[2].type); EXPECT_SKRECT_EQ(250, 260, 270, 280, operations[2].rect); }
TEST_F(PrintContextTest, LinkTarget) { MockCanvas canvas; setBodyInnerHTML(absoluteBlockHtmlForLink(50, 60, 70, 80, "http://www.google.com") + absoluteBlockHtmlForLink(150, 160, 170, 180, "http://www.google.com#fragment")); printSinglePage(canvas); const Vector<MockCanvas::Operation>& operations = canvas.recordedOperations(); ASSERT_EQ(2u, operations.size()); EXPECT_EQ(MockCanvas::DrawRect, operations[0].type); EXPECT_SKRECT_EQ(50, 60, 70, 80, operations[0].rect); EXPECT_EQ(MockCanvas::DrawRect, operations[1].type); EXPECT_SKRECT_EQ(150, 160, 170, 180, operations[1].rect); }
void PrintContextTest::testBasicLinkTarget() { MockCanvas canvas; setBodyInnerHTML(absoluteBlockHtmlForLink(50, 60, 70, 80, "http://www.google.com") + absoluteBlockHtmlForLink(150, 160, 170, 180, "http://www.google.com#fragment")); printSinglePage(canvas); const Vector<MockCanvas::Operation>& operations = canvas.recordedOperations(); ASSERT_EQ(2u, operations.size()); EXPECT_EQ(MockCanvas::DrawRect, operations[0].type); EXPECT_SKRECT_EQ(50, 60, 70, 80, operations[0].rect); EXPECT_EQ(MockCanvas::DrawRect, operations[1].type); EXPECT_SKRECT_EQ(150, 160, 170, 180, operations[1].rect); // We should also check if the annotation is correct but Skia doesn't export // SkAnnotation API. }
TEST_F(PrintContextTest, LinkedTarget) { MockCanvas canvas; document().setBaseURLOverride(KURL(ParsedURLString, "http://a.com/")); setBodyInnerHTML(absoluteBlockHtmlForLink(50, 60, 70, 80, "#fragment") // Generates a Link_Named_Dest_Key annotation + absoluteBlockHtmlForLink(150, 160, 170, 180, "#not-found") // Generates no annotation + htmlForAnchor(250, 260, "fragment") // Generates a Define_Named_Dest_Key annotation + htmlForAnchor(350, 360, "fragment-not-used")); // Generates no annotation printSinglePage(canvas); const Vector<MockCanvas::Operation>& operations = canvas.recordedOperations(); ASSERT_EQ(2u, operations.size()); EXPECT_EQ(MockCanvas::DrawRect, operations[0].type); EXPECT_SKRECT_EQ(50, 60, 70, 80, operations[0].rect); EXPECT_EQ(MockCanvas::DrawPoint, operations[1].type); EXPECT_SKRECT_EQ(250, 260, 0, 0, operations[1].rect); }
TEST_F(PrintContextFrameTest, WithScrolledSubframe) { MockCanvas canvas; document().setBaseURLOverride(KURL(ParsedURLString, "http://a.com/")); setBodyInnerHTML("<style>::-webkit-scrollbar { display: none }</style>" "<iframe id='frame' src='http://b.com/' width='500' height='500'" " style='border-width: 5px; margin: 5px; position: absolute; top: 90px; left: 90px'></iframe>"); HTMLIFrameElement& iframe = *toHTMLIFrameElement(document().getElementById("frame")); OwnPtrWillBeRawPtr<FrameLoaderClient> frameLoaderClient = FrameLoaderClientWithParent::create(document().frame()); RefPtrWillBePersistent<LocalFrame> subframe = LocalFrame::create(frameLoaderClient.get(), document().frame()->host(), &iframe); subframe->setView(FrameView::create(subframe.get(), IntSize(500, 500))); subframe->init(); static_cast<SingleChildFrameLoaderClient*>(document().frame()->client())->setChild(subframe.get()); document().frame()->host()->incrementSubframeCount(); Document& frameDocument = *iframe.contentDocument(); frameDocument.setBaseURLOverride(KURL(ParsedURLString, "http://b.com/")); frameDocument.body()->setInnerHTML( absoluteBlockHtmlForLink(10, 10, 20, 20, "http://invisible.com") + absoluteBlockHtmlForLink(50, 60, 70, 80, "http://partly.visible.com") + absoluteBlockHtmlForLink(150, 160, 170, 180, "http://www.google.com") + absoluteBlockHtmlForLink(250, 260, 270, 280, "http://www.google.com#fragment") + absoluteBlockHtmlForLink(850, 860, 70, 80, "http://another.invisible.com"), ASSERT_NO_EXCEPTION); iframe.contentWindow()->scrollTo(100, 100); printSinglePage(canvas); const Vector<MockCanvas::Operation>& operations = canvas.recordedOperations(); ASSERT_EQ(3u, operations.size()); EXPECT_EQ(MockCanvas::DrawRect, operations[0].type); EXPECT_SKRECT_EQ(50, 60, 70, 80, operations[0].rect); // FIXME: the rect should be clipped. EXPECT_EQ(MockCanvas::DrawRect, operations[1].type); EXPECT_SKRECT_EQ(150, 160, 170, 180, operations[1].rect); EXPECT_EQ(MockCanvas::DrawRect, operations[2].type); EXPECT_SKRECT_EQ(250, 260, 270, 280, operations[2].rect); subframe->detach(FrameDetachType::Remove); static_cast<SingleChildFrameLoaderClient*>(document().frame()->client())->setChild(nullptr); document().frame()->host()->decrementSubframeCount(); }
TEST_F(PrintContextTest, LinkTargetBoundingBox) { MockCanvas canvas; setBodyInnerHTML(absoluteBlockHtmlForLink(50, 60, 70, 20, "http://www.google.com", "<img style='width: 200px; height: 100px'>")); printSinglePage(canvas); const Vector<MockCanvas::Operation>& operations = canvas.recordedOperations(); ASSERT_EQ(1u, operations.size()); EXPECT_EQ(MockCanvas::DrawRect, operations[0].type); EXPECT_SKRECT_EQ(50, 60, 200, 100, operations[0].rect); }
TEST_F(PrintContextTest, EmptyLinkedTarget) { MockCanvas canvas; document().setBaseURLOverride(KURL(ParsedURLString, "http://a.com/")); setBodyInnerHTML(absoluteBlockHtmlForLink(50, 60, 70, 80, "#fragment") + htmlForAnchor(250, 260, "fragment", "")); printSinglePage(canvas); const Vector<MockCanvas::Operation>& operations = canvas.recordedOperations(); ASSERT_EQ(2u, operations.size()); EXPECT_EQ(MockCanvas::DrawRect, operations[0].type); EXPECT_SKRECT_EQ(50, 60, 70, 80, operations[0].rect); EXPECT_EQ(MockCanvas::DrawPoint, operations[1].type); EXPECT_SKRECT_EQ(250, 260, 0, 0, operations[1].rect); }