Index: content/renderer/render_view_browsertest.cc |
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc |
index 3e3c3364bbdba28be0679267643ce10a18569725..0cd8cd3bcc3ba6abfa4e684fa951c4f27520a614 100644 |
--- a/content/renderer/render_view_browsertest.cc |
+++ b/content/renderer/render_view_browsertest.cc |
@@ -388,15 +388,17 @@ class RenderViewImplScaleFactorTest : public RenderViewImplBlinkSettingsTest { |
public: |
void DoSetUp() override { |
RenderViewImplBlinkSettingsTest::DoSetUp(); |
+ } |
Avi (use Gerrit)
2015/12/10 15:28:54
This override just to call the superclass version
oshima
2015/12/10 18:45:36
oops, thanks for the catch. done.
|
+ 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_); |
} |
}; |
@@ -1828,6 +1830,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( |
@@ -2491,6 +2494,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); |
@@ -2503,13 +2507,108 @@ 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 are't exactly same because the font metrics are different |
+ // at 1x and 2x. Just make sure that the difference is small. |
+ EXPECT_NE(b1, b2); |
+ EXPECT_LT(origin_diff.x(), 2); |
+ EXPECT_LT(origin_diff.y(), 2); |
+ EXPECT_LT(std::abs(b1.width() - b2.width()), 2); |
+ EXPECT_LT(std::abs(b1.height() - b2.height()), 2); |
+ } |
+} |
+#endif |
+ |
+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); |
} |
TEST_F(DevToolsAgentTest, DevToolsResumeOnClose) { |