| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 | 6 |
| 7 #include "core/frame/PinchViewport.h" | 7 #include "core/frame/PinchViewport.h" |
| 8 | 8 |
| 9 #include "core/frame/FrameHost.h" | 9 #include "core/frame/FrameHost.h" |
| 10 #include "core/frame/LocalFrame.h" | 10 #include "core/frame/LocalFrame.h" |
| 11 #include "core/rendering/RenderView.h" | 11 #include "core/rendering/RenderView.h" |
| 12 #include "core/rendering/compositing/CompositedLayerMapping.h" | 12 #include "core/rendering/compositing/CompositedLayerMapping.h" |
| 13 #include "core/rendering/compositing/RenderLayerCompositor.h" | 13 #include "core/rendering/compositing/RenderLayerCompositor.h" |
| 14 #include "public/platform/Platform.h" | 14 #include "public/platform/Platform.h" |
| 15 #include "public/platform/WebLayerTreeView.h" | 15 #include "public/platform/WebLayerTreeView.h" |
| 16 #include "public/platform/WebUnitTestSupport.h" | 16 #include "public/platform/WebUnitTestSupport.h" |
| 17 #include "public/web/WebScriptSource.h" |
| 17 #include "public/web/WebSettings.h" | 18 #include "public/web/WebSettings.h" |
| 18 #include "public/web/WebViewClient.h" | 19 #include "public/web/WebViewClient.h" |
| 19 #include "web/WebLocalFrameImpl.h" | 20 #include "web/WebLocalFrameImpl.h" |
| 20 #include "web/tests/FrameTestHelpers.h" | 21 #include "web/tests/FrameTestHelpers.h" |
| 21 #include "web/tests/URLTestHelpers.h" | 22 #include "web/tests/URLTestHelpers.h" |
| 22 #include <gmock/gmock.h> | 23 #include <gmock/gmock.h> |
| 23 #include <gtest/gtest.h> | 24 #include <gtest/gtest.h> |
| 24 | 25 |
| 25 #define EXPECT_FLOAT_POINT_EQ(expected, actual) \ | 26 #define EXPECT_FLOAT_POINT_EQ(expected, actual) \ |
| 26 do { \ | 27 do { \ |
| 27 EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \ | 28 EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \ |
| 28 EXPECT_FLOAT_EQ((expected).y(), (actual).y()); \ | 29 EXPECT_FLOAT_EQ((expected).y(), (actual).y()); \ |
| 29 } while (false) | 30 } while (false) |
| 30 | 31 |
| 32 #define EXPECT_POINT_EQ(expected, actual) \ |
| 33 do { \ |
| 34 EXPECT_EQ((expected).x(), (actual).x()); \ |
| 35 EXPECT_EQ((expected).y(), (actual).y()); \ |
| 36 } while (false) |
| 37 |
| 31 #define EXPECT_SIZE_EQ(expected, actual) \ | 38 #define EXPECT_SIZE_EQ(expected, actual) \ |
| 32 do { \ | 39 do { \ |
| 33 EXPECT_EQ((expected).width(), (actual).width()); \ | 40 EXPECT_EQ((expected).width(), (actual).width()); \ |
| 34 EXPECT_EQ((expected).height(), (actual).height()); \ | 41 EXPECT_EQ((expected).height(), (actual).height()); \ |
| 35 } while (false) | 42 } while (false) |
| 36 | 43 |
| 37 #define EXPECT_FLOAT_RECT_EQ(expected, actual) \ | 44 #define EXPECT_FLOAT_RECT_EQ(expected, actual) \ |
| 38 do { \ | 45 do { \ |
| 39 EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \ | 46 EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \ |
| 40 EXPECT_FLOAT_EQ((expected).y(), (actual).y()); \ | 47 EXPECT_FLOAT_EQ((expected).y(), (actual).y()); \ |
| 41 EXPECT_FLOAT_EQ((expected).width(), (actual).width()); \ | 48 EXPECT_FLOAT_EQ((expected).width(), (actual).width()); \ |
| 42 EXPECT_FLOAT_EQ((expected).height(), (actual).height()); \ | 49 EXPECT_FLOAT_EQ((expected).height(), (actual).height()); \ |
| 43 } while (false) | 50 } while (false) |
| 44 | 51 |
| 45 | 52 |
| 46 using namespace WebCore; | 53 using namespace WebCore; |
| 47 using namespace blink; | 54 using namespace blink; |
| 55 using blink::FrameTestHelpers::runPendingTasks; |
| 48 | 56 |
| 49 namespace { | 57 namespace { |
| 50 | 58 |
| 51 class PinchViewportTest : public testing::Test { | 59 class PinchViewportTest : public testing::Test { |
| 52 public: | 60 public: |
| 53 PinchViewportTest() | 61 PinchViewportTest() |
| 54 : m_baseURL("http://www.test.com/") | 62 : m_baseURL("http://www.test.com/") |
| 55 { | 63 { |
| 56 } | 64 } |
| 57 | 65 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 81 void forceFullCompositingUpdate() | 89 void forceFullCompositingUpdate() |
| 82 { | 90 { |
| 83 webViewImpl()->layout(); | 91 webViewImpl()->layout(); |
| 84 } | 92 } |
| 85 | 93 |
| 86 void registerMockedHttpURLLoad(const std::string& fileName) | 94 void registerMockedHttpURLLoad(const std::string& fileName) |
| 87 { | 95 { |
| 88 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseU
RL.c_str()), WebString::fromUTF8(fileName.c_str())); | 96 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseU
RL.c_str()), WebString::fromUTF8(fileName.c_str())); |
| 89 } | 97 } |
| 90 | 98 |
| 99 void executeScript(const WebString& code) |
| 100 { |
| 101 webViewImpl()->mainFrame()->executeScript(WebScriptSource(code)); |
| 102 runPendingTasks(); |
| 103 } |
| 104 |
| 91 WebLayer* getRootScrollLayer() | 105 WebLayer* getRootScrollLayer() |
| 92 { | 106 { |
| 93 RenderLayerCompositor* compositor = frame()->contentRenderer()->composit
or(); | 107 RenderLayerCompositor* compositor = frame()->contentRenderer()->composit
or(); |
| 94 ASSERT(compositor); | 108 ASSERT(compositor); |
| 95 ASSERT(compositor->scrollLayer()); | 109 ASSERT(compositor->scrollLayer()); |
| 96 | 110 |
| 97 WebLayer* webScrollLayer = compositor->scrollLayer()->platformLayer(); | 111 WebLayer* webScrollLayer = compositor->scrollLayer()->platformLayer(); |
| 98 return webScrollLayer; | 112 return webScrollLayer; |
| 99 } | 113 } |
| 100 | 114 |
| (...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 EXPECT_SIZE_EQ(IntSize(0, 0), frame()->page()->frameHost().pinchViewport().s
ize()); | 437 EXPECT_SIZE_EQ(IntSize(0, 0), frame()->page()->frameHost().pinchViewport().s
ize()); |
| 424 | 438 |
| 425 webViewImpl()->enableAutoResizeMode(WebSize(10, 10), WebSize(1000, 1000)); | 439 webViewImpl()->enableAutoResizeMode(WebSize(10, 10), WebSize(1000, 1000)); |
| 426 | 440 |
| 427 registerMockedHttpURLLoad("200-by-300.html"); | 441 registerMockedHttpURLLoad("200-by-300.html"); |
| 428 navigateTo(m_baseURL + "200-by-300.html"); | 442 navigateTo(m_baseURL + "200-by-300.html"); |
| 429 | 443 |
| 430 EXPECT_SIZE_EQ(IntSize(200, 300), frame()->page()->frameHost().pinchViewport
().size()); | 444 EXPECT_SIZE_EQ(IntSize(200, 300), frame()->page()->frameHost().pinchViewport
().size()); |
| 431 } | 445 } |
| 432 | 446 |
| 447 // Test that the text selection handle's position accounts for the pinch viewpor
t. |
| 448 TEST_F(PinchViewportTest, TestTextSelectionHandles) |
| 449 { |
| 450 initializeWithDesktopSettings(); |
| 451 webViewImpl()->resize(IntSize(500, 800)); |
| 452 |
| 453 registerMockedHttpURLLoad("pinch-viewport-input-field.html"); |
| 454 navigateTo(m_baseURL + "pinch-viewport-input-field.html"); |
| 455 |
| 456 PinchViewport& pinchViewport = frame()->page()->frameHost().pinchViewport(); |
| 457 webViewImpl()->setInitialFocus(false); |
| 458 |
| 459 WebRect originalAnchor; |
| 460 WebRect originalFocus; |
| 461 webViewImpl()->selectionBounds(originalAnchor, originalFocus); |
| 462 |
| 463 webViewImpl()->setPageScaleFactor(2); |
| 464 pinchViewport.setLocation(FloatPoint(100, 400)); |
| 465 |
| 466 WebRect anchor; |
| 467 WebRect focus; |
| 468 webViewImpl()->selectionBounds(anchor, focus); |
| 469 |
| 470 IntPoint expected(IntRect(originalAnchor).location()); |
| 471 expected.moveBy(-flooredIntPoint(pinchViewport.visibleRect().location())); |
| 472 expected.scale(pinchViewport.scale(), pinchViewport.scale()); |
| 473 |
| 474 EXPECT_POINT_EQ(expected, IntRect(anchor).location()); |
| 475 EXPECT_POINT_EQ(expected, IntRect(focus).location()); |
| 476 |
| 477 // FIXME(bokan) - http://crbug.com/364154 - Figure out how to test text sele
ction |
| 478 // as well rather than just carret. |
| 479 } |
| 480 |
| 433 } // namespace | 481 } // namespace |
| OLD | NEW |