OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 #include "core/frame/LocalFrame.h" | 58 #include "core/frame/LocalFrame.h" |
59 #include "core/frame/RemoteFrame.h" | 59 #include "core/frame/RemoteFrame.h" |
60 #include "core/frame/Settings.h" | 60 #include "core/frame/Settings.h" |
61 #include "core/frame/VisualViewport.h" | 61 #include "core/frame/VisualViewport.h" |
62 #include "core/html/HTMLBodyElement.h" | 62 #include "core/html/HTMLBodyElement.h" |
63 #include "core/html/HTMLFormElement.h" | 63 #include "core/html/HTMLFormElement.h" |
64 #include "core/html/HTMLMediaElement.h" | 64 #include "core/html/HTMLMediaElement.h" |
65 #include "core/html/ImageDocument.h" | 65 #include "core/html/ImageDocument.h" |
66 #include "core/input/EventHandler.h" | 66 #include "core/input/EventHandler.h" |
67 #include "core/layout/HitTestResult.h" | 67 #include "core/layout/HitTestResult.h" |
68 #include "core/layout/LayoutFullScreen.h" | |
69 #include "core/layout/api/LayoutViewItem.h" | 68 #include "core/layout/api/LayoutViewItem.h" |
70 #include "core/layout/compositing/PaintLayerCompositor.h" | 69 #include "core/layout/compositing/PaintLayerCompositor.h" |
71 #include "core/loader/DocumentLoader.h" | 70 #include "core/loader/DocumentLoader.h" |
72 #include "core/loader/DocumentThreadableLoader.h" | 71 #include "core/loader/DocumentThreadableLoader.h" |
73 #include "core/loader/DocumentThreadableLoaderClient.h" | 72 #include "core/loader/DocumentThreadableLoaderClient.h" |
74 #include "core/loader/FrameLoadRequest.h" | 73 #include "core/loader/FrameLoadRequest.h" |
75 #include "core/loader/ThreadableLoader.h" | 74 #include "core/loader/ThreadableLoader.h" |
76 #include "core/page/Page.h" | 75 #include "core/page/Page.h" |
77 #include "core/page/ScopedPageLoadDeferrer.h" | 76 #include "core/page/ScopedPageLoadDeferrer.h" |
78 #include "core/paint/PaintLayer.h" | 77 #include "core/paint/PaintLayer.h" |
(...skipping 7387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7466 webViewHelper.webView()->settings()->setWideViewportQuirkEnabled(true); | 7465 webViewHelper.webView()->settings()->setWideViewportQuirkEnabled(true); |
7467 webViewHelper.webView()->settings()->setLoadWithOverviewMode(true); | 7466 webViewHelper.webView()->settings()->setLoadWithOverviewMode(true); |
7468 webViewHelper.webView()->settings()->setUseWideViewport(true); | 7467 webViewHelper.webView()->settings()->setUseWideViewport(true); |
7469 webViewHelper.resize(WebSize(viewportWidth, viewportHeight)); | 7468 webViewHelper.resize(WebSize(viewportWidth, viewportHeight)); |
7470 webViewHelper.webView()->updateAllLifecyclePhases(); | 7469 webViewHelper.webView()->updateAllLifecyclePhases(); |
7471 | 7470 |
7472 FrameView* frameView = webViewHelper.webView()->mainFrameImpl()->frameView(); | 7471 FrameView* frameView = webViewHelper.webView()->mainFrameImpl()->frameView(); |
7473 EXPECT_LT(frameView->maximumScrollOffset().width(), 0); | 7472 EXPECT_LT(frameView->maximumScrollOffset().width(), 0); |
7474 } | 7473 } |
7475 | 7474 |
| 7475 TEST_F(WebFrameTest, FullscreenCleanTopLayerAndFullscreenStack) { |
| 7476 FakeCompositingWebViewClient client; |
| 7477 registerMockedHttpURLLoad("fullscreen_div.html"); |
| 7478 FrameTestHelpers::WebViewHelper webViewHelper; |
| 7479 int viewportWidth = 640; |
| 7480 int viewportHeight = 480; |
| 7481 client.m_screenInfo.rect.width = viewportWidth; |
| 7482 client.m_screenInfo.rect.height = viewportHeight; |
| 7483 WebViewImpl* webViewImpl = |
| 7484 webViewHelper.initializeAndLoad(m_baseURL + "fullscreen_div.html", true, |
| 7485 0, &client, nullptr, configureAndroid); |
| 7486 webViewImpl->resize(WebSize(viewportWidth, viewportHeight)); |
| 7487 webViewImpl->updateAllLifecyclePhases(); |
| 7488 |
| 7489 Document* document = webViewImpl->mainFrameImpl()->frame()->document(); |
| 7490 UserGestureIndicator gesture(DocumentUserGestureToken::create(document)); |
| 7491 Element* divFullscreen = document->getElementById("div1"); |
| 7492 Fullscreen::requestFullscreen(*divFullscreen, Fullscreen::PrefixedRequest); |
| 7493 webViewImpl->didEnterFullscreen(); |
| 7494 ASSERT_EQ(Fullscreen::fullscreenElement(*document), divFullscreen); |
| 7495 |
| 7496 // Sanity check. We should have both in our stack. |
| 7497 ASSERT_EQ(document->topLayerElements().size(), 2UL); |
| 7498 |
| 7499 Fullscreen::exitFullscreen(*document); |
| 7500 webViewImpl->didExitFullscreen(); |
| 7501 |
| 7502 ASSERT_EQ(document->topLayerElements().size(), 0UL); |
| 7503 } |
| 7504 |
7476 TEST_P(ParameterizedWebFrameTest, FullscreenLayerSize) { | 7505 TEST_P(ParameterizedWebFrameTest, FullscreenLayerSize) { |
7477 FakeCompositingWebViewClient client; | 7506 FakeCompositingWebViewClient client; |
7478 registerMockedHttpURLLoad("fullscreen_div.html"); | 7507 registerMockedHttpURLLoad("fullscreen_div.html"); |
7479 FrameTestHelpers::WebViewHelper webViewHelper; | 7508 FrameTestHelpers::WebViewHelper webViewHelper; |
7480 int viewportWidth = 640; | 7509 int viewportWidth = 640; |
7481 int viewportHeight = 480; | 7510 int viewportHeight = 480; |
7482 client.m_screenInfo.rect.width = viewportWidth; | 7511 client.m_screenInfo.rect.width = viewportWidth; |
7483 client.m_screenInfo.rect.height = viewportHeight; | 7512 client.m_screenInfo.rect.height = viewportHeight; |
7484 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad( | 7513 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad( |
7485 m_baseURL + "fullscreen_div.html", true, nullptr, &client, nullptr, | 7514 m_baseURL + "fullscreen_div.html", true, nullptr, &client, nullptr, |
7486 configureAndroid); | 7515 configureAndroid); |
7487 webViewHelper.resize(WebSize(viewportWidth, viewportHeight)); | 7516 webViewHelper.resize(WebSize(viewportWidth, viewportHeight)); |
7488 webViewImpl->updateAllLifecyclePhases(); | 7517 webViewImpl->updateAllLifecyclePhases(); |
7489 | 7518 |
7490 Document* document = webViewImpl->mainFrameImpl()->frame()->document(); | 7519 Document* document = webViewImpl->mainFrameImpl()->frame()->document(); |
7491 UserGestureIndicator gesture(DocumentUserGestureToken::create(document)); | 7520 UserGestureIndicator gesture(DocumentUserGestureToken::create(document)); |
7492 Element* divFullscreen = document->getElementById("div1"); | 7521 Element* divFullscreen = document->getElementById("div1"); |
7493 Fullscreen::requestFullscreen(*divFullscreen, Fullscreen::PrefixedRequest); | 7522 Fullscreen::requestFullscreen(*divFullscreen, Fullscreen::PrefixedRequest); |
7494 webViewImpl->didEnterFullscreen(); | 7523 webViewImpl->didEnterFullscreen(); |
7495 webViewImpl->updateAllLifecyclePhases(); | 7524 webViewImpl->updateAllLifecyclePhases(); |
7496 EXPECT_EQ(Fullscreen::currentFullScreenElementFrom(*document), divFullscreen); | 7525 EXPECT_EQ(Fullscreen::fullscreenElement(*document), divFullscreen); |
7497 | 7526 |
7498 // Verify that the element is sized to the viewport. | 7527 // Verify that the element is sized to the viewport. |
7499 LayoutFullScreen* fullscreenLayoutObject = | 7528 Element* fullscreenElement = Fullscreen::fullscreenElement(*document); |
7500 Fullscreen::from(*document).fullScreenLayoutObject(); | 7529 LayoutBox* fullscreenLayoutObject = |
| 7530 toLayoutBox(fullscreenElement->layoutObject()); |
7501 EXPECT_EQ(viewportWidth, fullscreenLayoutObject->logicalWidth().toInt()); | 7531 EXPECT_EQ(viewportWidth, fullscreenLayoutObject->logicalWidth().toInt()); |
7502 EXPECT_EQ(viewportHeight, fullscreenLayoutObject->logicalHeight().toInt()); | 7532 EXPECT_EQ(viewportHeight, fullscreenLayoutObject->logicalHeight().toInt()); |
7503 | 7533 |
7504 // Verify it's updated after a device rotation. | 7534 // Verify it's updated after a device rotation. |
7505 client.m_screenInfo.rect.width = viewportHeight; | 7535 client.m_screenInfo.rect.width = viewportHeight; |
7506 client.m_screenInfo.rect.height = viewportWidth; | 7536 client.m_screenInfo.rect.height = viewportWidth; |
7507 webViewHelper.resize(WebSize(viewportHeight, viewportWidth)); | 7537 webViewHelper.resize(WebSize(viewportHeight, viewportWidth)); |
7508 webViewImpl->updateAllLifecyclePhases(); | 7538 webViewImpl->updateAllLifecyclePhases(); |
7509 EXPECT_EQ(viewportHeight, fullscreenLayoutObject->logicalWidth().toInt()); | 7539 EXPECT_EQ(viewportHeight, fullscreenLayoutObject->logicalWidth().toInt()); |
7510 EXPECT_EQ(viewportWidth, fullscreenLayoutObject->logicalHeight().toInt()); | 7540 EXPECT_EQ(viewportWidth, fullscreenLayoutObject->logicalHeight().toInt()); |
(...skipping 12 matching lines...) Expand all Loading... |
7523 webViewImpl->updateAllLifecyclePhases(); | 7553 webViewImpl->updateAllLifecyclePhases(); |
7524 | 7554 |
7525 Document* document = webViewImpl->mainFrameImpl()->frame()->document(); | 7555 Document* document = webViewImpl->mainFrameImpl()->frame()->document(); |
7526 UserGestureIndicator gesture(DocumentUserGestureToken::create(document)); | 7556 UserGestureIndicator gesture(DocumentUserGestureToken::create(document)); |
7527 Element* divFullscreen = document->getElementById("div1"); | 7557 Element* divFullscreen = document->getElementById("div1"); |
7528 Fullscreen::requestFullscreen(*divFullscreen, Fullscreen::PrefixedRequest); | 7558 Fullscreen::requestFullscreen(*divFullscreen, Fullscreen::PrefixedRequest); |
7529 webViewImpl->didEnterFullscreen(); | 7559 webViewImpl->didEnterFullscreen(); |
7530 webViewImpl->updateAllLifecyclePhases(); | 7560 webViewImpl->updateAllLifecyclePhases(); |
7531 | 7561 |
7532 // Verify that the viewports are nonscrollable. | 7562 // Verify that the viewports are nonscrollable. |
7533 EXPECT_EQ(Fullscreen::currentFullScreenElementFrom(*document), divFullscreen); | 7563 EXPECT_EQ(Fullscreen::fullscreenElement(*document), divFullscreen); |
7534 FrameView* frameView = webViewHelper.webView()->mainFrameImpl()->frameView(); | 7564 FrameView* frameView = webViewHelper.webView()->mainFrameImpl()->frameView(); |
7535 WebLayer* layoutViewportScrollLayer = | 7565 WebLayer* layoutViewportScrollLayer = |
7536 webViewImpl->compositor()->scrollLayer()->platformLayer(); | 7566 webViewImpl->compositor()->scrollLayer()->platformLayer(); |
7537 WebLayer* visualViewportScrollLayer = frameView->page() | 7567 WebLayer* visualViewportScrollLayer = frameView->page() |
7538 ->frameHost() | 7568 ->frameHost() |
7539 .visualViewport() | 7569 .visualViewport() |
7540 .scrollLayer() | 7570 .scrollLayer() |
7541 ->platformLayer(); | 7571 ->platformLayer(); |
7542 ASSERT_FALSE(layoutViewportScrollLayer->userScrollableHorizontal()); | 7572 ASSERT_FALSE(layoutViewportScrollLayer->userScrollableHorizontal()); |
7543 ASSERT_FALSE(layoutViewportScrollLayer->userScrollableVertical()); | 7573 ASSERT_FALSE(layoutViewportScrollLayer->userScrollableVertical()); |
7544 ASSERT_FALSE(visualViewportScrollLayer->userScrollableHorizontal()); | 7574 ASSERT_FALSE(visualViewportScrollLayer->userScrollableHorizontal()); |
7545 ASSERT_FALSE(visualViewportScrollLayer->userScrollableVertical()); | 7575 ASSERT_FALSE(visualViewportScrollLayer->userScrollableVertical()); |
7546 | 7576 |
7547 // Verify that the viewports are scrollable upon exiting fullscreen. | 7577 // Verify that the viewports are scrollable upon exiting fullscreen. |
7548 webViewImpl->didExitFullscreen(); | 7578 webViewImpl->didExitFullscreen(); |
7549 webViewImpl->updateAllLifecyclePhases(); | 7579 webViewImpl->updateAllLifecyclePhases(); |
7550 EXPECT_EQ(Fullscreen::currentFullScreenElementFrom(*document), nullptr); | 7580 EXPECT_EQ(Fullscreen::fullscreenElement(*document), nullptr); |
7551 ASSERT_TRUE(layoutViewportScrollLayer->userScrollableHorizontal()); | 7581 ASSERT_TRUE(layoutViewportScrollLayer->userScrollableHorizontal()); |
7552 ASSERT_TRUE(layoutViewportScrollLayer->userScrollableVertical()); | 7582 ASSERT_TRUE(layoutViewportScrollLayer->userScrollableVertical()); |
7553 ASSERT_TRUE(visualViewportScrollLayer->userScrollableHorizontal()); | 7583 ASSERT_TRUE(visualViewportScrollLayer->userScrollableHorizontal()); |
7554 ASSERT_TRUE(visualViewportScrollLayer->userScrollableVertical()); | 7584 ASSERT_TRUE(visualViewportScrollLayer->userScrollableVertical()); |
7555 } | 7585 } |
7556 | 7586 |
7557 TEST_P(ParameterizedWebFrameTest, FullscreenMainFrame) { | 7587 TEST_P(ParameterizedWebFrameTest, FullscreenMainFrame) { |
7558 FakeCompositingWebViewClient client; | 7588 FakeCompositingWebViewClient client; |
7559 registerMockedHttpURLLoad("fullscreen_div.html"); | 7589 registerMockedHttpURLLoad("fullscreen_div.html"); |
7560 FrameTestHelpers::WebViewHelper webViewHelper; | 7590 FrameTestHelpers::WebViewHelper webViewHelper; |
7561 int viewportWidth = 640; | 7591 int viewportWidth = 640; |
7562 int viewportHeight = 480; | 7592 int viewportHeight = 480; |
7563 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad( | 7593 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad( |
7564 m_baseURL + "fullscreen_div.html", true, nullptr, &client, nullptr, | 7594 m_baseURL + "fullscreen_div.html", true, nullptr, &client, nullptr, |
7565 configureAndroid); | 7595 configureAndroid); |
7566 webViewHelper.resize(WebSize(viewportWidth, viewportHeight)); | 7596 webViewHelper.resize(WebSize(viewportWidth, viewportHeight)); |
7567 webViewImpl->updateAllLifecyclePhases(); | 7597 webViewImpl->updateAllLifecyclePhases(); |
7568 | 7598 |
7569 Document* document = webViewImpl->mainFrameImpl()->frame()->document(); | 7599 Document* document = webViewImpl->mainFrameImpl()->frame()->document(); |
7570 UserGestureIndicator gesture(DocumentUserGestureToken::create(document)); | 7600 UserGestureIndicator gesture(DocumentUserGestureToken::create(document)); |
7571 Fullscreen::requestFullscreen(*document->documentElement(), | 7601 Fullscreen::requestFullscreen(*document->documentElement(), |
7572 Fullscreen::PrefixedRequest); | 7602 Fullscreen::PrefixedRequest); |
7573 webViewImpl->didEnterFullscreen(); | 7603 webViewImpl->didEnterFullscreen(); |
7574 webViewImpl->updateAllLifecyclePhases(); | 7604 webViewImpl->updateAllLifecyclePhases(); |
7575 | 7605 |
7576 // Verify that the main frame is still scrollable. | 7606 // Verify that the main frame is still scrollable. |
7577 EXPECT_EQ(Fullscreen::currentFullScreenElementFrom(*document), | 7607 EXPECT_EQ(Fullscreen::fullscreenElement(*document), |
7578 document->documentElement()); | 7608 document->documentElement()); |
7579 WebLayer* webScrollLayer = | 7609 WebLayer* webScrollLayer = |
7580 webViewImpl->compositor()->scrollLayer()->platformLayer(); | 7610 webViewImpl->compositor()->scrollLayer()->platformLayer(); |
7581 ASSERT_TRUE(webScrollLayer->scrollable()); | 7611 ASSERT_TRUE(webScrollLayer->scrollable()); |
7582 ASSERT_TRUE(webScrollLayer->userScrollableHorizontal()); | 7612 ASSERT_TRUE(webScrollLayer->userScrollableHorizontal()); |
7583 ASSERT_TRUE(webScrollLayer->userScrollableVertical()); | 7613 ASSERT_TRUE(webScrollLayer->userScrollableVertical()); |
7584 | 7614 |
7585 // Verify the main frame still behaves correctly after a resize. | 7615 // Verify the main frame still behaves correctly after a resize. |
7586 webViewHelper.resize(WebSize(viewportHeight, viewportWidth)); | 7616 webViewHelper.resize(WebSize(viewportHeight, viewportWidth)); |
7587 ASSERT_TRUE(webScrollLayer->scrollable()); | 7617 ASSERT_TRUE(webScrollLayer->scrollable()); |
(...skipping 20 matching lines...) Expand all Loading... |
7608 toWebLocalFrameImpl(webViewHelper.webView()->mainFrame()->firstChild()) | 7638 toWebLocalFrameImpl(webViewHelper.webView()->mainFrame()->firstChild()) |
7609 ->frame() | 7639 ->frame() |
7610 ->document(); | 7640 ->document(); |
7611 UserGestureIndicator gesture(DocumentUserGestureToken::create(document)); | 7641 UserGestureIndicator gesture(DocumentUserGestureToken::create(document)); |
7612 Element* divFullscreen = document->getElementById("div1"); | 7642 Element* divFullscreen = document->getElementById("div1"); |
7613 Fullscreen::requestFullscreen(*divFullscreen, Fullscreen::PrefixedRequest); | 7643 Fullscreen::requestFullscreen(*divFullscreen, Fullscreen::PrefixedRequest); |
7614 webViewImpl->didEnterFullscreen(); | 7644 webViewImpl->didEnterFullscreen(); |
7615 webViewImpl->updateAllLifecyclePhases(); | 7645 webViewImpl->updateAllLifecyclePhases(); |
7616 | 7646 |
7617 // Verify that the element is sized to the viewport. | 7647 // Verify that the element is sized to the viewport. |
7618 LayoutFullScreen* fullscreenLayoutObject = | 7648 Element* fullscreenElement = Fullscreen::fullscreenElement(*document); |
7619 Fullscreen::from(*document).fullScreenLayoutObject(); | 7649 LayoutBox* fullscreenLayoutObject = |
| 7650 toLayoutBox(fullscreenElement->layoutObject()); |
7620 EXPECT_EQ(viewportWidth, fullscreenLayoutObject->logicalWidth().toInt()); | 7651 EXPECT_EQ(viewportWidth, fullscreenLayoutObject->logicalWidth().toInt()); |
7621 EXPECT_EQ(viewportHeight, fullscreenLayoutObject->logicalHeight().toInt()); | 7652 EXPECT_EQ(viewportHeight, fullscreenLayoutObject->logicalHeight().toInt()); |
7622 | 7653 |
7623 // Verify it's updated after a device rotation. | 7654 // Verify it's updated after a device rotation. |
7624 client.m_screenInfo.rect.width = viewportHeight; | 7655 client.m_screenInfo.rect.width = viewportHeight; |
7625 client.m_screenInfo.rect.height = viewportWidth; | 7656 client.m_screenInfo.rect.height = viewportWidth; |
7626 webViewHelper.resize(WebSize(viewportHeight, viewportWidth)); | 7657 webViewHelper.resize(WebSize(viewportHeight, viewportWidth)); |
7627 webViewImpl->updateAllLifecyclePhases(); | 7658 webViewImpl->updateAllLifecyclePhases(); |
7628 EXPECT_EQ(viewportHeight, fullscreenLayoutObject->logicalWidth().toInt()); | 7659 EXPECT_EQ(viewportHeight, fullscreenLayoutObject->logicalWidth().toInt()); |
7629 EXPECT_EQ(viewportWidth, fullscreenLayoutObject->logicalHeight().toInt()); | 7660 EXPECT_EQ(viewportWidth, fullscreenLayoutObject->logicalHeight().toInt()); |
(...skipping 2723 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10353 Frame* mainFrame = webViewHelper.webView()->mainFrameImpl()->frame(); | 10384 Frame* mainFrame = webViewHelper.webView()->mainFrameImpl()->frame(); |
10354 HashSet<AtomicString> names; | 10385 HashSet<AtomicString> names; |
10355 for (Frame* frame = mainFrame->tree().firstChild(); frame; | 10386 for (Frame* frame = mainFrame->tree().firstChild(); frame; |
10356 frame = frame->tree().traverseNext()) { | 10387 frame = frame->tree().traverseNext()) { |
10357 EXPECT_TRUE(names.add(frame->tree().uniqueName()).isNewEntry); | 10388 EXPECT_TRUE(names.add(frame->tree().uniqueName()).isNewEntry); |
10358 } | 10389 } |
10359 EXPECT_EQ(10u, names.size()); | 10390 EXPECT_EQ(10u, names.size()); |
10360 } | 10391 } |
10361 | 10392 |
10362 } // namespace blink | 10393 } // namespace blink |
OLD | NEW |