Index: content/renderer/render_view_browsertest.cc |
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc |
index 3c92c5de4fd676a439a13ec74d45c2c7ff7bfa71..87773de5bbcd01531326675b9c12c8559c3a2e0f 100644 |
--- a/content/renderer/render_view_browsertest.cc |
+++ b/content/renderer/render_view_browsertest.cc |
@@ -388,17 +388,15 @@ class RenderViewImplBlinkSettingsTest : public RenderViewImplTest { |
class RenderViewImplScaleFactorTest : public RenderViewImplBlinkSettingsTest { |
public: |
- void DoSetUp() override { |
- RenderViewImplBlinkSettingsTest::DoSetUp(); |
- |
+ void SetDeviceScaleFactor(float dsf) { |
ViewMsg_Resize_Params params; |
- params.screen_info.deviceScaleFactor = 2.f; |
+ params.screen_info.deviceScaleFactor = dsf; |
params.new_size = gfx::Size(100, 100); |
params.physical_backing_size = gfx::Size(200, 200); |
params.visible_viewport_size = params.new_size; |
params.needs_resize_ack = false; |
view()->OnResize(params); |
- ASSERT_EQ(2.f, view()->device_scale_factor_); |
+ ASSERT_EQ(dsf, view()->device_scale_factor_); |
} |
}; |
@@ -1887,6 +1885,7 @@ TEST_F(RenderViewImplTest, GetCompositionCharacterBoundsTest) { |
view()->OnImeSetComposition(ascii_composition, empty_underline, 0, 0); |
view()->GetCompositionCharacterBounds(&bounds); |
ASSERT_EQ(ascii_composition.size(), bounds.size()); |
+ |
for (size_t i = 0; i < bounds.size(); ++i) |
EXPECT_LT(0, bounds[i].width()); |
view()->OnImeConfirmComposition( |
@@ -2550,6 +2549,7 @@ TEST_F(RenderViewImplBlinkSettingsTest, Negative) { |
TEST_F(RenderViewImplScaleFactorTest, ConverViewportToWindowWithoutZoomForDSF) { |
DoSetUp(); |
+ SetDeviceScaleFactor(2.f); |
blink::WebRect rect(20, 10, 200, 100); |
view()->convertViewportToWindow(&rect); |
EXPECT_EQ(20, rect.x); |
@@ -2562,15 +2562,113 @@ TEST_F(RenderViewImplScaleFactorTest, ConverViewportToWindowWithZoomForDSF) { |
base::CommandLine::ForCurrentProcess()->AppendSwitch( |
switches::kEnableUseZoomForDSF); |
DoSetUp(); |
+ SetDeviceScaleFactor(1.f); |
+ { |
+ blink::WebRect rect(20, 10, 200, 100); |
+ view()->convertViewportToWindow(&rect); |
+ EXPECT_EQ(20, rect.x); |
+ EXPECT_EQ(10, rect.y); |
+ EXPECT_EQ(200, rect.width); |
+ EXPECT_EQ(100, rect.height); |
+ } |
- blink::WebRect rect(20, 10, 200, 100); |
- view()->convertViewportToWindow(&rect); |
- EXPECT_EQ(10, rect.x); |
- EXPECT_EQ(5, rect.y); |
- EXPECT_EQ(100, rect.width); |
- EXPECT_EQ(50, rect.height); |
+ SetDeviceScaleFactor(2.f); |
+ { |
+ blink::WebRect rect(20, 10, 200, 100); |
+ view()->convertViewportToWindow(&rect); |
+ EXPECT_EQ(10, rect.x); |
+ EXPECT_EQ(5, rect.y); |
+ EXPECT_EQ(100, rect.width); |
+ EXPECT_EQ(50, rect.height); |
+ } |
} |
+#if defined(OS_MACOSX) || defined(USE_AURA) |
+TEST_F(RenderViewImplScaleFactorTest, GetCompositionCharacterBoundsTest) { |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kEnableUseZoomForDSF); |
+ DoSetUp(); |
+ SetDeviceScaleFactor(1.f); |
+#if defined(OS_WIN) |
+ // http://crbug.com/508747 |
+ if (base::win::GetVersion() >= base::win::VERSION_WIN10) |
+ return; |
+#endif |
+ |
+ LoadHTML("<textarea id=\"test\"></textarea>"); |
+ ExecuteJavaScriptForTests("document.getElementById('test').focus();"); |
+ |
+ const base::string16 empty_string; |
+ const std::vector<blink::WebCompositionUnderline> empty_underline; |
+ std::vector<gfx::Rect> bounds_at_1x; |
+ view()->OnSetFocus(true); |
+ |
+ // ASCII composition |
+ const base::string16 ascii_composition = base::UTF8ToUTF16("aiueo"); |
+ view()->OnImeSetComposition(ascii_composition, empty_underline, 0, 0); |
+ view()->GetCompositionCharacterBounds(&bounds_at_1x); |
+ ASSERT_EQ(ascii_composition.size(), bounds_at_1x.size()); |
+ |
+ SetDeviceScaleFactor(2.f); |
+ std::vector<gfx::Rect> bounds_at_2x; |
+ view()->GetCompositionCharacterBounds(&bounds_at_2x); |
+ ASSERT_EQ(bounds_at_1x.size(), bounds_at_2x.size()); |
+ for (size_t i = 0; i < bounds_at_1x.size(); i++) { |
+ const gfx::Rect& b1 = bounds_at_1x[i]; |
+ const gfx::Rect& b2 = bounds_at_2x[i]; |
+ gfx::Vector2d origin_diff = b1.origin() - b2.origin(); |
+ |
+ // The bounds may not be exactly same because the font metrics are different |
+ // at 1x and 2x. Just make sure that the difference is small. |
+ EXPECT_LT(origin_diff.x(), 2); |
+ EXPECT_LT(origin_diff.y(), 2); |
+ EXPECT_LT(std::abs(b1.width() - b2.width()), 3); |
+ EXPECT_LT(std::abs(b1.height() - b2.height()), 2); |
+ } |
+} |
+#endif |
+ |
+#if !defined(OS_ANDROID) |
+// No extensions/autoresize on Android. |
+namespace { |
+ |
+// Don't use text as it text will change the size in DIP at different |
+// scale factor. |
+const char kAutoResizeTestPage[] = |
+ "<div style='width=20px; height=20px'></div>"; |
+ |
+} // namespace |
+ |
+TEST_F(RenderViewImplScaleFactorTest, AutoResizeWithZoomForDSF) { |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kEnableUseZoomForDSF); |
+ DoSetUp(); |
+ view()->EnableAutoResizeForTesting(gfx::Size(5, 5), gfx::Size(1000, 1000)); |
+ LoadHTML(kAutoResizeTestPage); |
+ gfx::Size size_at_1x = view()->size(); |
+ ASSERT_FALSE(size_at_1x.IsEmpty()); |
+ |
+ SetDeviceScaleFactor(2.f); |
+ LoadHTML(kAutoResizeTestPage); |
+ gfx::Size size_at_2x = view()->size(); |
+ EXPECT_EQ(size_at_1x, size_at_2x); |
+} |
+ |
+TEST_F(RenderViewImplScaleFactorTest, AutoResizeWithoutZoomForDSF) { |
+ DoSetUp(); |
+ view()->EnableAutoResizeForTesting(gfx::Size(5, 5), gfx::Size(1000, 1000)); |
+ LoadHTML(kAutoResizeTestPage); |
+ gfx::Size size_at_1x = view()->size(); |
+ ASSERT_FALSE(size_at_1x.IsEmpty()); |
+ |
+ SetDeviceScaleFactor(2.f); |
+ LoadHTML(kAutoResizeTestPage); |
+ gfx::Size size_at_2x = view()->size(); |
+ EXPECT_EQ(size_at_1x, size_at_2x); |
+} |
+ |
+#endif |
+ |
TEST_F(DevToolsAgentTest, DevToolsResumeOnClose) { |
Attach(); |
EXPECT_FALSE(IsPaused()); |