summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/page/chrome_client_impl_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/page/chrome_client_impl_test.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/page/chrome_client_impl_test.cc100
1 files changed, 98 insertions, 2 deletions
diff --git a/chromium/third_party/blink/renderer/core/page/chrome_client_impl_test.cc b/chromium/third_party/blink/renderer/core/page/chrome_client_impl_test.cc
index f2ed77c35a3..cff471e3ff2 100644
--- a/chromium/third_party/blink/renderer/core/page/chrome_client_impl_test.cc
+++ b/chromium/third_party/blink/renderer/core/page/chrome_client_impl_test.cc
@@ -28,10 +28,12 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include "third_party/blink/renderer/core/page/chrome_client_impl.h"
+#include "cc/trees/layer_tree_host.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/platform/web_input_event.h"
-#include "third_party/blink/public/web/web_frame_client.h"
#include "third_party/blink/public/web/web_local_frame.h"
+#include "third_party/blink/public/web/web_local_frame_client.h"
#include "third_party/blink/public/web/web_view.h"
#include "third_party/blink/public/web/web_view_client.h"
#include "third_party/blink/renderer/core/exported/web_view_impl.h"
@@ -42,10 +44,11 @@
#include "third_party/blink/renderer/core/html/forms/date_time_chooser_client.h"
#include "third_party/blink/renderer/core/html/forms/html_select_element.h"
#include "third_party/blink/renderer/core/loader/frame_load_request.h"
-#include "third_party/blink/renderer/core/page/chrome_client_impl.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/core/page/scoped_page_pauser.h"
+#include "third_party/blink/renderer/core/paint/compositing/composited_selection.h"
#include "third_party/blink/renderer/platform/language.h"
+#include "third_party/blink/renderer/platform/testing/stub_graphics_layer_client.h"
namespace blink {
@@ -237,4 +240,97 @@ TEST_F(PagePopupSuppressionTest, SuppressDateTimeChooser) {
EXPECT_TRUE(CanOpenDateTimeChooser());
}
+TEST(ChromeClientImplTest, SelectionHandles) {
+ FrameTestHelpers::WebViewHelper helper;
+ WebViewImpl* web_view = helper.Initialize();
+ ChromeClientImpl* chrome_client_impl =
+ ToChromeClientImpl(&web_view->GetPage()->GetChromeClient());
+
+ content::LayerTreeView* layer_tree_view = helper.GetLayerTreeView();
+ LocalFrame* main_frame = helper.LocalMainFrame()->GetFrame();
+
+ auto set_and_get_selection = [&](const CompositedSelection& selection) {
+ // Sets the selection on the LayerTreeHost, then return what it set.
+ chrome_client_impl->UpdateCompositedSelection(main_frame, selection);
+ return layer_tree_view->layer_tree_host()->selection();
+ };
+
+ StubGraphicsLayerClient graphics_layer_client;
+ std::unique_ptr<GraphicsLayer> graphics_layer =
+ GraphicsLayer::Create(graphics_layer_client);
+
+ CompositedSelection selection;
+ cc::LayerSelection cc_selection;
+
+ selection.start.layer = graphics_layer.get();
+ selection.end.layer = graphics_layer.get();
+
+ // An LTR range selection.
+ selection.type = kRangeSelection;
+ selection.start.is_text_direction_rtl = false;
+ selection.end.is_text_direction_rtl = false;
+ selection.start.edge_top_in_layer = FloatPoint(1.1f, 2.8f);
+ selection.start.edge_bottom_in_layer = FloatPoint(2.9f, 3.2f);
+ selection.end.edge_top_in_layer = FloatPoint(4.1f, 5.8f);
+ selection.end.edge_bottom_in_layer = FloatPoint(5.9f, 6.2f);
+ selection.start.hidden = false;
+ selection.end.hidden = false;
+
+ cc_selection = set_and_get_selection(selection);
+ // LTR means the start is left and the end is right.
+ EXPECT_EQ(cc_selection.start.type, gfx::SelectionBound::Type::LEFT);
+ EXPECT_EQ(cc_selection.end.type, gfx::SelectionBound::Type::RIGHT);
+ EXPECT_EQ(cc_selection.start.hidden, false);
+ EXPECT_EQ(cc_selection.end.hidden, false);
+ // Points are rounded.
+ EXPECT_EQ(cc_selection.start.edge_top, gfx::Point(1, 3));
+ EXPECT_EQ(cc_selection.start.edge_bottom, gfx::Point(3, 3));
+ EXPECT_EQ(cc_selection.end.edge_top, gfx::Point(4, 6));
+ EXPECT_EQ(cc_selection.end.edge_bottom, gfx::Point(6, 6));
+
+ // An RTL range selection.
+ selection.start.is_text_direction_rtl = true;
+ selection.end.is_text_direction_rtl = true;
+
+ cc_selection = set_and_get_selection(selection);
+ // RTL means the start is right and the end is left.
+ EXPECT_EQ(cc_selection.start.type, gfx::SelectionBound::Type::RIGHT);
+ EXPECT_EQ(cc_selection.end.type, gfx::SelectionBound::Type::LEFT);
+ EXPECT_EQ(cc_selection.start.hidden, false);
+ EXPECT_EQ(cc_selection.end.hidden, false);
+ EXPECT_EQ(cc_selection.start.edge_top, gfx::Point(1, 3));
+ EXPECT_EQ(cc_selection.start.edge_bottom, gfx::Point(3, 3));
+ EXPECT_EQ(cc_selection.end.edge_top, gfx::Point(4, 6));
+ EXPECT_EQ(cc_selection.end.edge_bottom, gfx::Point(6, 6));
+
+ // A hidden range selection.
+ selection.start.hidden = true;
+ selection.end.hidden = true;
+
+ cc_selection = set_and_get_selection(selection);
+ EXPECT_EQ(cc_selection.start.type, gfx::SelectionBound::Type::RIGHT);
+ EXPECT_EQ(cc_selection.end.type, gfx::SelectionBound::Type::LEFT);
+ // The hidden flag is propogated.
+ EXPECT_EQ(cc_selection.start.hidden, true);
+ EXPECT_EQ(cc_selection.end.hidden, true);
+ EXPECT_EQ(cc_selection.start.edge_top, gfx::Point(1, 3));
+ EXPECT_EQ(cc_selection.start.edge_bottom, gfx::Point(3, 3));
+ EXPECT_EQ(cc_selection.end.edge_top, gfx::Point(4, 6));
+ EXPECT_EQ(cc_selection.end.edge_bottom, gfx::Point(6, 6));
+
+ // A caret selection.
+ selection.type = kCaretSelection;
+
+ cc_selection = set_and_get_selection(selection);
+ // Caret selections have no left/right, only center.
+ EXPECT_EQ(cc_selection.start.type, gfx::SelectionBound::Type::CENTER);
+ EXPECT_EQ(cc_selection.end.type, gfx::SelectionBound::Type::CENTER);
+ EXPECT_EQ(cc_selection.start.hidden, true);
+ EXPECT_EQ(cc_selection.end.hidden, true);
+ EXPECT_EQ(cc_selection.start.edge_top, gfx::Point(1, 3));
+ EXPECT_EQ(cc_selection.start.edge_bottom, gfx::Point(3, 3));
+ EXPECT_EQ(cc_selection.end.edge_top, gfx::Point(4, 6));
+ EXPECT_EQ(cc_selection.end.edge_bottom, gfx::Point(6, 6));
+}
+
} // namespace blink