1 /*
2  * Copyright (C) 2013 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 #include "testing/gtest/include/gtest/gtest.h"
32 #include "third_party/blink/public/platform/web_float_rect.h"
33 #include "third_party/blink/public/platform/web_url_loader_mock_factory.h"
34 #include "third_party/blink/public/web/web_console_message.h"
35 #include "third_party/blink/public/web/web_frame.h"
36 #include "third_party/blink/public/web/web_local_frame.h"
37 #include "third_party/blink/public/web/web_script_source.h"
38 #include "third_party/blink/public/web/web_settings.h"
39 #include "third_party/blink/public/web/web_view_client.h"
40 #include "third_party/blink/renderer/core/frame/frame_test_helpers.h"
41 #include "third_party/blink/renderer/core/frame/local_frame.h"
42 #include "third_party/blink/renderer/core/frame/local_frame_view.h"
43 #include "third_party/blink/renderer/core/frame/page_scale_constraints.h"
44 #include "third_party/blink/renderer/core/frame/settings.h"
45 #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
46 #include "third_party/blink/renderer/core/page/page.h"
47 #include "third_party/blink/renderer/core/page/viewport_description.h"
48 #include "third_party/blink/renderer/core/scroll/scrollbar_theme.h"
49 #include "third_party/blink/renderer/core/testing/sim/sim_request.h"
50 #include "third_party/blink/renderer/core/testing/sim/sim_test.h"
51 #include "third_party/blink/renderer/platform/geometry/int_point.h"
52 #include "third_party/blink/renderer/platform/geometry/int_rect.h"
53 #include "third_party/blink/renderer/platform/geometry/int_size.h"
54 #include "third_party/blink/renderer/platform/geometry/length.h"
55 #include "third_party/blink/renderer/platform/testing/histogram_tester.h"
56 #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
57 #include "third_party/blink/renderer/platform/testing/url_test_helpers.h"
58 
59 namespace blink {
60 
61 class ViewportTest : public testing::Test {
62  protected:
ViewportTest()63   ViewportTest()
64       : base_url_("http://www.test.com/"), chrome_url_("chrome://") {}
65 
~ViewportTest()66   ~ViewportTest() override {
67     url_test_helpers::UnregisterAllURLsAndClearMemoryCache();
68   }
69 
RegisterMockedHttpURLLoad(const std::string & file_name)70   void RegisterMockedHttpURLLoad(const std::string& file_name) {
71     // TODO(crbug.com/751425): We should use the mock functionality
72     // via the WebViewHelper instance in each test case.
73     url_test_helpers::RegisterMockedURLLoadFromBase(
74         WebString::FromUTF8(base_url_), test::CoreTestDataPath(),
75         WebString::FromUTF8(file_name));
76   }
77 
RegisterMockedChromeURLLoad(const std::string & file_name)78   void RegisterMockedChromeURLLoad(const std::string& file_name) {
79     // TODO(crbug.com/751425): We should use the mock functionality
80     // via the WebViewHelper instance in each test case.
81     url_test_helpers::RegisterMockedURLLoadFromBase(
82         WebString::FromUTF8(chrome_url_), test::CoreTestDataPath(),
83         WebString::FromUTF8(file_name));
84   }
85 
ExecuteScript(WebLocalFrame * frame,const WebString & code)86   void ExecuteScript(WebLocalFrame* frame, const WebString& code) {
87     frame->ExecuteScript(WebScriptSource(code));
88     blink::test::RunPendingTasks();
89   }
90 
91   std::string base_url_;
92   std::string chrome_url_;
93 };
94 
SetViewportSettings(WebSettings * settings)95 static void SetViewportSettings(WebSettings* settings) {
96   settings->SetViewportEnabled(true);
97   settings->SetViewportMetaEnabled(true);
98   settings->SetMainFrameResizesAreOrientationChanges(true);
99 }
100 
RunViewportTest(Page * page,int initial_width,int initial_height)101 static PageScaleConstraints RunViewportTest(Page* page,
102                                             int initial_width,
103                                             int initial_height) {
104   IntSize initial_viewport_size(initial_width, initial_height);
105   To<LocalFrame>(page->MainFrame())
106       ->View()
107       ->SetFrameRect(IntRect(IntPoint::Zero(), initial_viewport_size));
108   ViewportDescription description = page->GetViewportDescription();
109   PageScaleConstraints constraints =
110       description.Resolve(FloatSize(initial_viewport_size), Length::Fixed(980));
111 
112   constraints.FitToContentsWidth(constraints.layout_size.Width(),
113                                  initial_width);
114   constraints.ResolveAutoInitialScale();
115   return constraints;
116 }
117 
TEST_F(ViewportTest,viewport1)118 TEST_F(ViewportTest, viewport1) {
119   RegisterMockedHttpURLLoad("viewport/viewport-1.html");
120 
121   frame_test_helpers::WebViewHelper web_view_helper;
122   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-1.html",
123                                     nullptr, nullptr, nullptr,
124                                     SetViewportSettings);
125 
126   Page* page = web_view_helper.GetWebView()->GetPage();
127   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
128 
129   EXPECT_EQ(320, constraints.layout_size.Width());
130   EXPECT_EQ(352, constraints.layout_size.Height());
131   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
132   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
133   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
134   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
135 }
136 
TEST_F(ViewportTest,viewport2)137 TEST_F(ViewportTest, viewport2) {
138   RegisterMockedHttpURLLoad("viewport/viewport-2.html");
139 
140   frame_test_helpers::WebViewHelper web_view_helper;
141   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-2.html",
142                                     nullptr, nullptr, nullptr,
143                                     SetViewportSettings);
144 
145   Page* page = web_view_helper.GetWebView()->GetPage();
146   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
147 
148   EXPECT_EQ(980, constraints.layout_size.Width());
149   EXPECT_EQ(352, constraints.layout_size.Height());
150   EXPECT_NEAR(0.32f, constraints.initial_scale, 0.01f);
151   EXPECT_NEAR(0.32f, constraints.minimum_scale, 0.01f);
152   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
153   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
154 }
155 
TEST_F(ViewportTest,viewport3)156 TEST_F(ViewportTest, viewport3) {
157   RegisterMockedHttpURLLoad("viewport/viewport-3.html");
158 
159   frame_test_helpers::WebViewHelper web_view_helper;
160   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-3.html",
161                                     nullptr, nullptr, nullptr,
162                                     SetViewportSettings);
163 
164   Page* page = web_view_helper.GetWebView()->GetPage();
165   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
166 
167   EXPECT_EQ(320, constraints.layout_size.Width());
168   EXPECT_EQ(352, constraints.layout_size.Height());
169   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
170   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
171   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
172   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
173 }
174 
TEST_F(ViewportTest,viewport4)175 TEST_F(ViewportTest, viewport4) {
176   RegisterMockedHttpURLLoad("viewport/viewport-4.html");
177 
178   frame_test_helpers::WebViewHelper web_view_helper;
179   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-4.html",
180                                     nullptr, nullptr, nullptr,
181                                     SetViewportSettings);
182 
183   Page* page = web_view_helper.GetWebView()->GetPage();
184   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
185 
186   EXPECT_EQ(160, constraints.layout_size.Width());
187   EXPECT_EQ(176, constraints.layout_size.Height());
188   EXPECT_NEAR(2.0f, constraints.initial_scale, 0.01f);
189   EXPECT_NEAR(2.0f, constraints.minimum_scale, 0.01f);
190   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
191   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
192 }
193 
TEST_F(ViewportTest,viewport5)194 TEST_F(ViewportTest, viewport5) {
195   RegisterMockedHttpURLLoad("viewport/viewport-5.html");
196 
197   frame_test_helpers::WebViewHelper web_view_helper;
198   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-5.html",
199                                     nullptr, nullptr, nullptr,
200                                     SetViewportSettings);
201 
202   Page* page = web_view_helper.GetWebView()->GetPage();
203   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
204 
205   EXPECT_EQ(640, constraints.layout_size.Width());
206   EXPECT_EQ(704, constraints.layout_size.Height());
207   EXPECT_NEAR(0.5f, constraints.initial_scale, 0.01f);
208   EXPECT_NEAR(0.5f, constraints.minimum_scale, 0.01f);
209   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
210   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
211 }
212 
TEST_F(ViewportTest,viewport6)213 TEST_F(ViewportTest, viewport6) {
214   RegisterMockedHttpURLLoad("viewport/viewport-6.html");
215 
216   frame_test_helpers::WebViewHelper web_view_helper;
217   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-6.html",
218                                     nullptr, nullptr, nullptr,
219                                     SetViewportSettings);
220 
221   Page* page = web_view_helper.GetWebView()->GetPage();
222   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
223 
224   EXPECT_EQ(200, constraints.layout_size.Width());
225   EXPECT_EQ(220, constraints.layout_size.Height());
226   EXPECT_NEAR(1.6f, constraints.initial_scale, 0.01f);
227   EXPECT_NEAR(1.6f, constraints.minimum_scale, 0.01f);
228   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
229   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
230 }
231 
TEST_F(ViewportTest,viewport7)232 TEST_F(ViewportTest, viewport7) {
233   RegisterMockedHttpURLLoad("viewport/viewport-7.html");
234 
235   frame_test_helpers::WebViewHelper web_view_helper;
236   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-7.html",
237                                     nullptr, nullptr, nullptr,
238                                     SetViewportSettings);
239 
240   Page* page = web_view_helper.GetWebView()->GetPage();
241   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
242 
243   EXPECT_EQ(1280, constraints.layout_size.Width());
244   EXPECT_EQ(1408, constraints.layout_size.Height());
245   EXPECT_NEAR(0.25f, constraints.initial_scale, 0.01f);
246   EXPECT_NEAR(0.25f, constraints.minimum_scale, 0.01f);
247   EXPECT_NEAR(0.25f, constraints.maximum_scale, 0.01f);
248   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
249 }
250 
TEST_F(ViewportTest,viewport8)251 TEST_F(ViewportTest, viewport8) {
252   RegisterMockedHttpURLLoad("viewport/viewport-8.html");
253 
254   frame_test_helpers::WebViewHelper web_view_helper;
255   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-8.html",
256                                     nullptr, nullptr, nullptr,
257                                     SetViewportSettings);
258 
259   Page* page = web_view_helper.GetWebView()->GetPage();
260   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
261 
262   EXPECT_EQ(1280, constraints.layout_size.Width());
263   EXPECT_EQ(1408, constraints.layout_size.Height());
264   EXPECT_NEAR(0.25f, constraints.initial_scale, 0.01f);
265   EXPECT_NEAR(0.25f, constraints.minimum_scale, 0.01f);
266   EXPECT_NEAR(0.25f, constraints.maximum_scale, 0.01f);
267   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
268 }
269 
TEST_F(ViewportTest,viewport9)270 TEST_F(ViewportTest, viewport9) {
271   RegisterMockedHttpURLLoad("viewport/viewport-9.html");
272 
273   frame_test_helpers::WebViewHelper web_view_helper;
274   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-9.html",
275                                     nullptr, nullptr, nullptr,
276                                     SetViewportSettings);
277 
278   Page* page = web_view_helper.GetWebView()->GetPage();
279   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
280 
281   EXPECT_EQ(1280, constraints.layout_size.Width());
282   EXPECT_EQ(1408, constraints.layout_size.Height());
283   EXPECT_NEAR(0.25f, constraints.initial_scale, 0.01f);
284   EXPECT_NEAR(0.25f, constraints.minimum_scale, 0.01f);
285   EXPECT_NEAR(0.25f, constraints.maximum_scale, 0.01f);
286   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
287 }
288 
TEST_F(ViewportTest,viewport10)289 TEST_F(ViewportTest, viewport10) {
290   RegisterMockedHttpURLLoad("viewport/viewport-10.html");
291 
292   frame_test_helpers::WebViewHelper web_view_helper;
293   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-10.html",
294                                     nullptr, nullptr, nullptr,
295                                     SetViewportSettings);
296 
297   Page* page = web_view_helper.GetWebView()->GetPage();
298   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
299 
300   EXPECT_EQ(1280, constraints.layout_size.Width());
301   EXPECT_EQ(1408, constraints.layout_size.Height());
302   EXPECT_NEAR(0.25f, constraints.initial_scale, 0.01f);
303   EXPECT_NEAR(0.25f, constraints.minimum_scale, 0.01f);
304   EXPECT_NEAR(0.25f, constraints.maximum_scale, 0.01f);
305   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
306 }
307 
TEST_F(ViewportTest,viewport11)308 TEST_F(ViewportTest, viewport11) {
309   RegisterMockedHttpURLLoad("viewport/viewport-11.html");
310 
311   frame_test_helpers::WebViewHelper web_view_helper;
312   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-11.html",
313                                     nullptr, nullptr, nullptr,
314                                     SetViewportSettings);
315 
316   Page* page = web_view_helper.GetWebView()->GetPage();
317   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
318 
319   EXPECT_EQ(980, constraints.layout_size.Width());
320   EXPECT_EQ(1078, constraints.layout_size.Height());
321   EXPECT_NEAR(0.32f, constraints.initial_scale, 0.01f);
322   EXPECT_NEAR(0.32f, constraints.minimum_scale, 0.01f);
323   EXPECT_NEAR(0.5f, constraints.maximum_scale, 0.01f);
324   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
325 }
326 
TEST_F(ViewportTest,viewport12)327 TEST_F(ViewportTest, viewport12) {
328   RegisterMockedHttpURLLoad("viewport/viewport-12.html");
329 
330   frame_test_helpers::WebViewHelper web_view_helper;
331   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-12.html",
332                                     nullptr, nullptr, nullptr,
333                                     SetViewportSettings);
334 
335   Page* page = web_view_helper.GetWebView()->GetPage();
336   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
337 
338   EXPECT_EQ(640, constraints.layout_size.Width());
339   EXPECT_EQ(704, constraints.layout_size.Height());
340   EXPECT_NEAR(0.5f, constraints.initial_scale, 0.01f);
341   EXPECT_NEAR(0.5f, constraints.minimum_scale, 0.01f);
342   EXPECT_NEAR(0.5f, constraints.maximum_scale, 0.01f);
343   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
344 }
345 
TEST_F(ViewportTest,viewport13)346 TEST_F(ViewportTest, viewport13) {
347   RegisterMockedHttpURLLoad("viewport/viewport-13.html");
348 
349   frame_test_helpers::WebViewHelper web_view_helper;
350   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-13.html",
351                                     nullptr, nullptr, nullptr,
352                                     SetViewportSettings);
353 
354   Page* page = web_view_helper.GetWebView()->GetPage();
355   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
356 
357   EXPECT_EQ(1280, constraints.layout_size.Width());
358   EXPECT_EQ(1408, constraints.layout_size.Height());
359   EXPECT_NEAR(0.25f, constraints.initial_scale, 0.01f);
360   EXPECT_NEAR(0.25f, constraints.minimum_scale, 0.01f);
361   EXPECT_NEAR(0.5f, constraints.maximum_scale, 0.01f);
362   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
363 }
364 
TEST_F(ViewportTest,viewport14)365 TEST_F(ViewportTest, viewport14) {
366   RegisterMockedHttpURLLoad("viewport/viewport-14.html");
367 
368   frame_test_helpers::WebViewHelper web_view_helper;
369   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-14.html",
370                                     nullptr, nullptr, nullptr,
371                                     SetViewportSettings);
372 
373   Page* page = web_view_helper.GetWebView()->GetPage();
374   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
375 
376   EXPECT_EQ(320, constraints.layout_size.Width());
377   EXPECT_EQ(352, constraints.layout_size.Height());
378   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
379   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
380   EXPECT_NEAR(1.0f, constraints.maximum_scale, 0.01f);
381   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
382 }
383 
TEST_F(ViewportTest,viewport15)384 TEST_F(ViewportTest, viewport15) {
385   RegisterMockedHttpURLLoad("viewport/viewport-15.html");
386 
387   frame_test_helpers::WebViewHelper web_view_helper;
388   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-15.html",
389                                     nullptr, nullptr, nullptr,
390                                     SetViewportSettings);
391 
392   Page* page = web_view_helper.GetWebView()->GetPage();
393   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
394 
395   EXPECT_EQ(980, constraints.layout_size.Width());
396   EXPECT_EQ(1078, constraints.layout_size.Height());
397   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
398   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
399   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
400   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
401 }
402 
TEST_F(ViewportTest,viewport16)403 TEST_F(ViewportTest, viewport16) {
404   RegisterMockedHttpURLLoad("viewport/viewport-16.html");
405 
406   frame_test_helpers::WebViewHelper web_view_helper;
407   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-16.html",
408                                     nullptr, nullptr, nullptr,
409                                     SetViewportSettings);
410 
411   Page* page = web_view_helper.GetWebView()->GetPage();
412   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
413 
414   EXPECT_EQ(980, constraints.layout_size.Width());
415   EXPECT_EQ(1078, constraints.layout_size.Height());
416   EXPECT_NEAR(5.0f, constraints.initial_scale, 0.01f);
417   EXPECT_NEAR(5.0f, constraints.minimum_scale, 0.01f);
418   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
419   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
420 }
421 
TEST_F(ViewportTest,viewport17)422 TEST_F(ViewportTest, viewport17) {
423   RegisterMockedHttpURLLoad("viewport/viewport-17.html");
424 
425   frame_test_helpers::WebViewHelper web_view_helper;
426   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-17.html",
427                                     nullptr, nullptr, nullptr,
428                                     SetViewportSettings);
429 
430   Page* page = web_view_helper.GetWebView()->GetPage();
431   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
432 
433   EXPECT_EQ(980, constraints.layout_size.Width());
434   EXPECT_EQ(1078, constraints.layout_size.Height());
435   EXPECT_NEAR(5.0f, constraints.initial_scale, 0.01f);
436   EXPECT_NEAR(5.0f, constraints.minimum_scale, 0.01f);
437   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
438   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
439 }
440 
TEST_F(ViewportTest,viewport18)441 TEST_F(ViewportTest, viewport18) {
442   RegisterMockedHttpURLLoad("viewport/viewport-18.html");
443 
444   frame_test_helpers::WebViewHelper web_view_helper;
445   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-18.html",
446                                     nullptr, nullptr, nullptr,
447                                     SetViewportSettings);
448 
449   Page* page = web_view_helper.GetWebView()->GetPage();
450   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
451 
452   EXPECT_EQ(64, constraints.layout_size.Width());
453   EXPECT_NEAR(70.4, constraints.layout_size.Height(), 0.01f);
454   EXPECT_NEAR(5.0f, constraints.initial_scale, 0.01f);
455   EXPECT_NEAR(5.0f, constraints.minimum_scale, 0.01f);
456   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
457   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
458 }
459 
TEST_F(ViewportTest,viewport19)460 TEST_F(ViewportTest, viewport19) {
461   RegisterMockedHttpURLLoad("viewport/viewport-19.html");
462 
463   frame_test_helpers::WebViewHelper web_view_helper;
464   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-19.html",
465                                     nullptr, nullptr, nullptr,
466                                     SetViewportSettings);
467 
468   Page* page = web_view_helper.GetWebView()->GetPage();
469   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
470 
471   EXPECT_EQ(160, constraints.layout_size.Width());
472   EXPECT_EQ(176, constraints.layout_size.Height());
473   EXPECT_NEAR(2.0f, constraints.initial_scale, 0.01f);
474   EXPECT_NEAR(2.0f, constraints.minimum_scale, 0.01f);
475   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
476   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
477 }
478 
TEST_F(ViewportTest,viewport20)479 TEST_F(ViewportTest, viewport20) {
480   RegisterMockedHttpURLLoad("viewport/viewport-20.html");
481 
482   frame_test_helpers::WebViewHelper web_view_helper;
483   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-20.html",
484                                     nullptr, nullptr, nullptr,
485                                     SetViewportSettings);
486 
487   Page* page = web_view_helper.GetWebView()->GetPage();
488   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
489 
490   EXPECT_EQ(980, constraints.layout_size.Width());
491   EXPECT_EQ(1078, constraints.layout_size.Height());
492   EXPECT_NEAR(10.0f, constraints.initial_scale, 0.01f);
493   EXPECT_NEAR(10.0f, constraints.minimum_scale, 0.01f);
494   EXPECT_NEAR(10.0f, constraints.maximum_scale, 0.01f);
495   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
496 }
497 
TEST_F(ViewportTest,viewport21)498 TEST_F(ViewportTest, viewport21) {
499   RegisterMockedHttpURLLoad("viewport/viewport-21.html");
500 
501   frame_test_helpers::WebViewHelper web_view_helper;
502   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-21.html",
503                                     nullptr, nullptr, nullptr,
504                                     SetViewportSettings);
505 
506   Page* page = web_view_helper.GetWebView()->GetPage();
507   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
508 
509   EXPECT_EQ(980, constraints.layout_size.Width());
510   EXPECT_EQ(1078, constraints.layout_size.Height());
511   EXPECT_NEAR(10.0f, constraints.initial_scale, 0.01f);
512   EXPECT_NEAR(10.0f, constraints.minimum_scale, 0.01f);
513   EXPECT_NEAR(10.0f, constraints.maximum_scale, 0.01f);
514   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
515 }
516 
TEST_F(ViewportTest,viewport22)517 TEST_F(ViewportTest, viewport22) {
518   RegisterMockedHttpURLLoad("viewport/viewport-22.html");
519 
520   frame_test_helpers::WebViewHelper web_view_helper;
521   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-22.html",
522                                     nullptr, nullptr, nullptr,
523                                     SetViewportSettings);
524 
525   Page* page = web_view_helper.GetWebView()->GetPage();
526   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
527 
528   EXPECT_EQ(980, constraints.layout_size.Width());
529   EXPECT_EQ(1078, constraints.layout_size.Height());
530   EXPECT_NEAR(10.0f, constraints.initial_scale, 0.01f);
531   EXPECT_NEAR(10.0f, constraints.minimum_scale, 0.01f);
532   EXPECT_NEAR(10.0f, constraints.maximum_scale, 0.01f);
533   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
534 }
535 
TEST_F(ViewportTest,viewport23)536 TEST_F(ViewportTest, viewport23) {
537   RegisterMockedHttpURLLoad("viewport/viewport-23.html");
538 
539   frame_test_helpers::WebViewHelper web_view_helper;
540   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-23.html",
541                                     nullptr, nullptr, nullptr,
542                                     SetViewportSettings);
543 
544   Page* page = web_view_helper.GetWebView()->GetPage();
545   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
546 
547   EXPECT_EQ(980, constraints.layout_size.Width());
548   EXPECT_EQ(1078, constraints.layout_size.Height());
549   EXPECT_NEAR(3.0f, constraints.initial_scale, 0.01f);
550   EXPECT_NEAR(3.0f, constraints.minimum_scale, 0.01f);
551   EXPECT_NEAR(3.0f, constraints.maximum_scale, 0.01f);
552   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
553 }
554 
TEST_F(ViewportTest,viewport24)555 TEST_F(ViewportTest, viewport24) {
556   RegisterMockedHttpURLLoad("viewport/viewport-24.html");
557 
558   frame_test_helpers::WebViewHelper web_view_helper;
559   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-24.html",
560                                     nullptr, nullptr, nullptr,
561                                     SetViewportSettings);
562 
563   Page* page = web_view_helper.GetWebView()->GetPage();
564   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
565 
566   EXPECT_EQ(980, constraints.layout_size.Width());
567   EXPECT_EQ(1078, constraints.layout_size.Height());
568   EXPECT_NEAR(4.0f, constraints.initial_scale, 0.01f);
569   EXPECT_NEAR(4.0f, constraints.minimum_scale, 0.01f);
570   EXPECT_NEAR(4.0f, constraints.maximum_scale, 0.01f);
571   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
572 }
573 
TEST_F(ViewportTest,viewport25)574 TEST_F(ViewportTest, viewport25) {
575   RegisterMockedHttpURLLoad("viewport/viewport-25.html");
576 
577   frame_test_helpers::WebViewHelper web_view_helper;
578   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-25.html",
579                                     nullptr, nullptr, nullptr,
580                                     SetViewportSettings);
581 
582   Page* page = web_view_helper.GetWebView()->GetPage();
583   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
584 
585   EXPECT_EQ(980, constraints.layout_size.Width());
586   EXPECT_EQ(1078, constraints.layout_size.Height());
587   EXPECT_NEAR(10.0f, constraints.initial_scale, 0.01f);
588   EXPECT_NEAR(10.0f, constraints.minimum_scale, 0.01f);
589   EXPECT_NEAR(10.0f, constraints.maximum_scale, 0.01f);
590   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
591 }
592 
TEST_F(ViewportTest,viewport26)593 TEST_F(ViewportTest, viewport26) {
594   RegisterMockedHttpURLLoad("viewport/viewport-26.html");
595 
596   frame_test_helpers::WebViewHelper web_view_helper;
597   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-26.html",
598                                     nullptr, nullptr, nullptr,
599                                     SetViewportSettings);
600 
601   Page* page = web_view_helper.GetWebView()->GetPage();
602   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
603 
604   EXPECT_EQ(980, constraints.layout_size.Width());
605   EXPECT_EQ(1078, constraints.layout_size.Height());
606   EXPECT_NEAR(8.0f, constraints.initial_scale, 0.01f);
607   EXPECT_NEAR(8.0f, constraints.minimum_scale, 0.01f);
608   EXPECT_NEAR(9.0f, constraints.maximum_scale, 0.01f);
609   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
610 }
611 
TEST_F(ViewportTest,viewport27)612 TEST_F(ViewportTest, viewport27) {
613   RegisterMockedHttpURLLoad("viewport/viewport-27.html");
614 
615   frame_test_helpers::WebViewHelper web_view_helper;
616   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-27.html",
617                                     nullptr, nullptr, nullptr,
618                                     SetViewportSettings);
619 
620   Page* page = web_view_helper.GetWebView()->GetPage();
621   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
622 
623   EXPECT_EQ(980, constraints.layout_size.Width());
624   EXPECT_EQ(1078, constraints.layout_size.Height());
625   EXPECT_NEAR(0.32f, constraints.initial_scale, 0.01f);
626   EXPECT_NEAR(0.32f, constraints.minimum_scale, 0.01f);
627   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
628   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
629 }
630 
TEST_F(ViewportTest,viewport28)631 TEST_F(ViewportTest, viewport28) {
632   RegisterMockedHttpURLLoad("viewport/viewport-28.html");
633 
634   frame_test_helpers::WebViewHelper web_view_helper;
635   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-28.html",
636                                     nullptr, nullptr, nullptr,
637                                     SetViewportSettings);
638 
639   Page* page = web_view_helper.GetWebView()->GetPage();
640   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
641 
642   EXPECT_EQ(352, constraints.layout_size.Width());
643   EXPECT_NEAR(387.2, constraints.layout_size.Height(), 0.01);
644   EXPECT_NEAR(0.91f, constraints.initial_scale, 0.01f);
645   EXPECT_NEAR(0.91f, constraints.minimum_scale, 0.01f);
646   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
647   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
648 }
649 
TEST_F(ViewportTest,viewport29)650 TEST_F(ViewportTest, viewport29) {
651   RegisterMockedHttpURLLoad("viewport/viewport-29.html");
652 
653   frame_test_helpers::WebViewHelper web_view_helper;
654   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-29.html",
655                                     nullptr, nullptr, nullptr,
656                                     SetViewportSettings);
657 
658   Page* page = web_view_helper.GetWebView()->GetPage();
659   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
660 
661   EXPECT_EQ(700, constraints.layout_size.Width());
662   EXPECT_EQ(770, constraints.layout_size.Height());
663   EXPECT_NEAR(0.46f, constraints.initial_scale, 0.01f);
664   EXPECT_NEAR(0.46f, constraints.minimum_scale, 0.01f);
665   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
666   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
667 }
668 
TEST_F(ViewportTest,viewport30)669 TEST_F(ViewportTest, viewport30) {
670   RegisterMockedHttpURLLoad("viewport/viewport-30.html");
671 
672   frame_test_helpers::WebViewHelper web_view_helper;
673   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-30.html",
674                                     nullptr, nullptr, nullptr,
675                                     SetViewportSettings);
676 
677   Page* page = web_view_helper.GetWebView()->GetPage();
678   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
679 
680   EXPECT_EQ(200, constraints.layout_size.Width());
681   EXPECT_EQ(220, constraints.layout_size.Height());
682   EXPECT_NEAR(1.6f, constraints.initial_scale, 0.01f);
683   EXPECT_NEAR(1.6f, constraints.minimum_scale, 0.01f);
684   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
685   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
686 }
687 
TEST_F(ViewportTest,viewport31)688 TEST_F(ViewportTest, viewport31) {
689   RegisterMockedHttpURLLoad("viewport/viewport-31.html");
690 
691   frame_test_helpers::WebViewHelper web_view_helper;
692   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-31.html",
693                                     nullptr, nullptr, nullptr,
694                                     SetViewportSettings);
695 
696   Page* page = web_view_helper.GetWebView()->GetPage();
697   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
698 
699   EXPECT_EQ(980, constraints.layout_size.Width());
700   EXPECT_EQ(700, constraints.layout_size.Height());
701   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
702   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
703   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
704   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
705 }
706 
TEST_F(ViewportTest,viewport32)707 TEST_F(ViewportTest, viewport32) {
708   RegisterMockedHttpURLLoad("viewport/viewport-32.html");
709 
710   frame_test_helpers::WebViewHelper web_view_helper;
711   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-32.html",
712                                     nullptr, nullptr, nullptr,
713                                     SetViewportSettings);
714 
715   Page* page = web_view_helper.GetWebView()->GetPage();
716   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
717 
718   EXPECT_EQ(980, constraints.layout_size.Width());
719   EXPECT_EQ(200, constraints.layout_size.Height());
720   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
721   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
722   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
723   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
724 }
725 
TEST_F(ViewportTest,viewport33)726 TEST_F(ViewportTest, viewport33) {
727   RegisterMockedHttpURLLoad("viewport/viewport-33.html");
728 
729   frame_test_helpers::WebViewHelper web_view_helper;
730   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-33.html",
731                                     nullptr, nullptr, nullptr,
732                                     SetViewportSettings);
733 
734   Page* page = web_view_helper.GetWebView()->GetPage();
735   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
736 
737   EXPECT_EQ(320, constraints.layout_size.Width());
738   EXPECT_EQ(352, constraints.layout_size.Height());
739   EXPECT_NEAR(2.0f, constraints.initial_scale, 0.01f);
740   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
741   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
742   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
743 }
744 
TEST_F(ViewportTest,viewport34)745 TEST_F(ViewportTest, viewport34) {
746   RegisterMockedHttpURLLoad("viewport/viewport-34.html");
747 
748   frame_test_helpers::WebViewHelper web_view_helper;
749   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-34.html",
750                                     nullptr, nullptr, nullptr,
751                                     SetViewportSettings);
752 
753   Page* page = web_view_helper.GetWebView()->GetPage();
754   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
755 
756   EXPECT_EQ(640, constraints.layout_size.Width());
757   EXPECT_EQ(704, constraints.layout_size.Height());
758   EXPECT_NEAR(0.5f, constraints.initial_scale, 0.01f);
759   EXPECT_NEAR(0.5f, constraints.minimum_scale, 0.01f);
760   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
761   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
762 }
763 
TEST_F(ViewportTest,viewport35)764 TEST_F(ViewportTest, viewport35) {
765   RegisterMockedHttpURLLoad("viewport/viewport-35.html");
766 
767   frame_test_helpers::WebViewHelper web_view_helper;
768   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-35.html",
769                                     nullptr, nullptr, nullptr,
770                                     SetViewportSettings);
771 
772   Page* page = web_view_helper.GetWebView()->GetPage();
773   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
774 
775   EXPECT_EQ(1280, constraints.layout_size.Width());
776   EXPECT_EQ(1408, constraints.layout_size.Height());
777   EXPECT_NEAR(0.25f, constraints.initial_scale, 0.01f);
778   EXPECT_NEAR(0.25f, constraints.minimum_scale, 0.01f);
779   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
780   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
781 }
782 
TEST_F(ViewportTest,viewport36)783 TEST_F(ViewportTest, viewport36) {
784   RegisterMockedHttpURLLoad("viewport/viewport-36.html");
785 
786   frame_test_helpers::WebViewHelper web_view_helper;
787   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-36.html",
788                                     nullptr, nullptr, nullptr,
789                                     SetViewportSettings);
790 
791   Page* page = web_view_helper.GetWebView()->GetPage();
792   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
793 
794   EXPECT_NEAR(636.36, constraints.layout_size.Width(), 0.01f);
795   EXPECT_EQ(700, constraints.layout_size.Height());
796   EXPECT_NEAR(1.6f, constraints.initial_scale, 0.01f);
797   EXPECT_NEAR(0.50f, constraints.minimum_scale, 0.01f);
798   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
799   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
800 }
801 
TEST_F(ViewportTest,viewport37)802 TEST_F(ViewportTest, viewport37) {
803   RegisterMockedHttpURLLoad("viewport/viewport-37.html");
804 
805   frame_test_helpers::WebViewHelper web_view_helper;
806   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-37.html",
807                                     nullptr, nullptr, nullptr,
808                                     SetViewportSettings);
809 
810   Page* page = web_view_helper.GetWebView()->GetPage();
811   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
812 
813   EXPECT_EQ(320, constraints.layout_size.Width());
814   EXPECT_EQ(352, constraints.layout_size.Height());
815   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
816   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
817   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
818   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
819 }
820 
TEST_F(ViewportTest,viewport38)821 TEST_F(ViewportTest, viewport38) {
822   RegisterMockedHttpURLLoad("viewport/viewport-38.html");
823 
824   frame_test_helpers::WebViewHelper web_view_helper;
825   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-38.html",
826                                     nullptr, nullptr, nullptr,
827                                     SetViewportSettings);
828 
829   Page* page = web_view_helper.GetWebView()->GetPage();
830   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
831 
832   EXPECT_EQ(640, constraints.layout_size.Width());
833   EXPECT_EQ(704, constraints.layout_size.Height());
834   EXPECT_NEAR(0.5f, constraints.initial_scale, 0.01f);
835   EXPECT_NEAR(0.5f, constraints.minimum_scale, 0.01f);
836   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
837   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
838 }
839 
TEST_F(ViewportTest,viewport39)840 TEST_F(ViewportTest, viewport39) {
841   RegisterMockedHttpURLLoad("viewport/viewport-39.html");
842 
843   frame_test_helpers::WebViewHelper web_view_helper;
844   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-39.html",
845                                     nullptr, nullptr, nullptr,
846                                     SetViewportSettings);
847 
848   Page* page = web_view_helper.GetWebView()->GetPage();
849   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
850 
851   EXPECT_EQ(200, constraints.layout_size.Width());
852   EXPECT_EQ(700, constraints.layout_size.Height());
853   EXPECT_NEAR(1.6f, constraints.initial_scale, 0.01f);
854   EXPECT_NEAR(1.6f, constraints.minimum_scale, 0.01f);
855   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
856   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
857 }
858 
TEST_F(ViewportTest,viewport40)859 TEST_F(ViewportTest, viewport40) {
860   RegisterMockedHttpURLLoad("viewport/viewport-40.html");
861 
862   frame_test_helpers::WebViewHelper web_view_helper;
863   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-40.html",
864                                     nullptr, nullptr, nullptr,
865                                     SetViewportSettings);
866 
867   Page* page = web_view_helper.GetWebView()->GetPage();
868   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
869 
870   EXPECT_EQ(700, constraints.layout_size.Width());
871   EXPECT_EQ(352, constraints.layout_size.Height());
872   EXPECT_NEAR(0.46f, constraints.initial_scale, 0.01f);
873   EXPECT_NEAR(0.46f, constraints.minimum_scale, 0.01f);
874   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
875   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
876 }
877 
TEST_F(ViewportTest,viewport41)878 TEST_F(ViewportTest, viewport41) {
879   RegisterMockedHttpURLLoad("viewport/viewport-41.html");
880 
881   frame_test_helpers::WebViewHelper web_view_helper;
882   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-41.html",
883                                     nullptr, nullptr, nullptr,
884                                     SetViewportSettings);
885 
886   Page* page = web_view_helper.GetWebView()->GetPage();
887   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
888 
889   EXPECT_EQ(1000, constraints.layout_size.Width());
890   EXPECT_EQ(704, constraints.layout_size.Height());
891   EXPECT_NEAR(0.5f, constraints.initial_scale, 0.01f);
892   EXPECT_NEAR(0.32f, constraints.minimum_scale, 0.01f);
893   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
894   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
895 }
896 
TEST_F(ViewportTest,viewport42)897 TEST_F(ViewportTest, viewport42) {
898   RegisterMockedHttpURLLoad("viewport/viewport-42.html");
899 
900   frame_test_helpers::WebViewHelper web_view_helper;
901   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-42.html",
902                                     nullptr, nullptr, nullptr,
903                                     SetViewportSettings);
904 
905   Page* page = web_view_helper.GetWebView()->GetPage();
906   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
907 
908   EXPECT_EQ(320, constraints.layout_size.Width());
909   EXPECT_EQ(1000, constraints.layout_size.Height());
910   EXPECT_NEAR(2.0f, constraints.initial_scale, 0.01f);
911   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
912   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
913   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
914 }
915 
TEST_F(ViewportTest,viewport43)916 TEST_F(ViewportTest, viewport43) {
917   RegisterMockedHttpURLLoad("viewport/viewport-43.html");
918 
919   frame_test_helpers::WebViewHelper web_view_helper;
920   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-43.html",
921                                     nullptr, nullptr, nullptr,
922                                     SetViewportSettings);
923 
924   Page* page = web_view_helper.GetWebView()->GetPage();
925   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
926 
927   EXPECT_EQ(64, constraints.layout_size.Width());
928   EXPECT_NEAR(70.4, constraints.layout_size.Height(), 0.01f);
929   EXPECT_NEAR(5.0f, constraints.initial_scale, 0.01f);
930   EXPECT_NEAR(5.0f, constraints.minimum_scale, 0.01f);
931   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
932   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
933 }
934 
TEST_F(ViewportTest,viewport44)935 TEST_F(ViewportTest, viewport44) {
936   RegisterMockedHttpURLLoad("viewport/viewport-44.html");
937 
938   frame_test_helpers::WebViewHelper web_view_helper;
939   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-44.html",
940                                     nullptr, nullptr, nullptr,
941                                     SetViewportSettings);
942 
943   Page* page = web_view_helper.GetWebView()->GetPage();
944   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
945 
946   EXPECT_EQ(10000, constraints.layout_size.Width());
947   EXPECT_EQ(10000, constraints.layout_size.Height());
948   EXPECT_NEAR(0.25f, constraints.initial_scale, 0.01f);
949   EXPECT_NEAR(0.25f, constraints.minimum_scale, 0.01f);
950   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
951   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
952 }
953 
TEST_F(ViewportTest,viewport45)954 TEST_F(ViewportTest, viewport45) {
955   RegisterMockedHttpURLLoad("viewport/viewport-45.html");
956 
957   frame_test_helpers::WebViewHelper web_view_helper;
958   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-45.html",
959                                     nullptr, nullptr, nullptr,
960                                     SetViewportSettings);
961 
962   Page* page = web_view_helper.GetWebView()->GetPage();
963   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
964 
965   EXPECT_EQ(3200, constraints.layout_size.Width());
966   EXPECT_EQ(3520, constraints.layout_size.Height());
967   EXPECT_NEAR(0.1f, constraints.initial_scale, 0.01f);
968   EXPECT_NEAR(0.1f, constraints.minimum_scale, 0.01f);
969   EXPECT_NEAR(0.1f, constraints.maximum_scale, 0.01f);
970   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
971 }
972 
TEST_F(ViewportTest,viewport46)973 TEST_F(ViewportTest, viewport46) {
974   RegisterMockedHttpURLLoad("viewport/viewport-46.html");
975 
976   frame_test_helpers::WebViewHelper web_view_helper;
977   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-46.html",
978                                     nullptr, nullptr, nullptr,
979                                     SetViewportSettings);
980 
981   Page* page = web_view_helper.GetWebView()->GetPage();
982   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
983 
984   EXPECT_EQ(32, constraints.layout_size.Width());
985   EXPECT_NEAR(35.2, constraints.layout_size.Height(), 0.01f);
986   EXPECT_NEAR(10.0f, constraints.initial_scale, 0.01f);
987   EXPECT_NEAR(10.0f, constraints.minimum_scale, 0.01f);
988   EXPECT_NEAR(10.0f, constraints.maximum_scale, 0.01f);
989   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
990 }
991 
TEST_F(ViewportTest,viewport47)992 TEST_F(ViewportTest, viewport47) {
993   RegisterMockedHttpURLLoad("viewport/viewport-47.html");
994 
995   frame_test_helpers::WebViewHelper web_view_helper;
996   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-47.html",
997                                     nullptr, nullptr, nullptr,
998                                     SetViewportSettings);
999 
1000   Page* page = web_view_helper.GetWebView()->GetPage();
1001   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1002 
1003   EXPECT_EQ(320, constraints.layout_size.Width());
1004   EXPECT_EQ(3000, constraints.layout_size.Height());
1005   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1006   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
1007   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1008   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1009 }
1010 
TEST_F(ViewportTest,viewport48)1011 TEST_F(ViewportTest, viewport48) {
1012   RegisterMockedHttpURLLoad("viewport/viewport-48.html");
1013 
1014   frame_test_helpers::WebViewHelper web_view_helper;
1015   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-48.html",
1016                                     nullptr, nullptr, nullptr,
1017                                     SetViewportSettings);
1018 
1019   Page* page = web_view_helper.GetWebView()->GetPage();
1020   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1021 
1022   EXPECT_EQ(3000, constraints.layout_size.Width());
1023   EXPECT_EQ(352, constraints.layout_size.Height());
1024   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1025   EXPECT_NEAR(0.25f, constraints.minimum_scale, 0.01f);
1026   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1027   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1028 }
1029 
TEST_F(ViewportTest,viewport49)1030 TEST_F(ViewportTest, viewport49) {
1031   RegisterMockedHttpURLLoad("viewport/viewport-49.html");
1032 
1033   frame_test_helpers::WebViewHelper web_view_helper;
1034   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-49.html",
1035                                     nullptr, nullptr, nullptr,
1036                                     SetViewportSettings);
1037 
1038   Page* page = web_view_helper.GetWebView()->GetPage();
1039   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1040 
1041   EXPECT_EQ(320, constraints.layout_size.Width());
1042   EXPECT_EQ(352, constraints.layout_size.Height());
1043   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1044   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
1045   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1046   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1047 }
1048 
TEST_F(ViewportTest,viewport50)1049 TEST_F(ViewportTest, viewport50) {
1050   RegisterMockedHttpURLLoad("viewport/viewport-50.html");
1051 
1052   frame_test_helpers::WebViewHelper web_view_helper;
1053   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-50.html",
1054                                     nullptr, nullptr, nullptr,
1055                                     SetViewportSettings);
1056 
1057   Page* page = web_view_helper.GetWebView()->GetPage();
1058   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1059 
1060   EXPECT_EQ(980, constraints.layout_size.Width());
1061   EXPECT_EQ(1078, constraints.layout_size.Height());
1062   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1063   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1064   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1065   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1066 }
1067 
TEST_F(ViewportTest,viewport51)1068 TEST_F(ViewportTest, viewport51) {
1069   RegisterMockedHttpURLLoad("viewport/viewport-51.html");
1070 
1071   frame_test_helpers::WebViewHelper web_view_helper;
1072   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-51.html",
1073                                     nullptr, nullptr, nullptr,
1074                                     SetViewportSettings);
1075 
1076   Page* page = web_view_helper.GetWebView()->GetPage();
1077   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1078 
1079   EXPECT_EQ(980, constraints.layout_size.Width());
1080   EXPECT_EQ(1078, constraints.layout_size.Height());
1081   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1082   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1083   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1084   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1085 }
1086 
TEST_F(ViewportTest,viewport52)1087 TEST_F(ViewportTest, viewport52) {
1088   RegisterMockedHttpURLLoad("viewport/viewport-52.html");
1089 
1090   frame_test_helpers::WebViewHelper web_view_helper;
1091   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-52.html",
1092                                     nullptr, nullptr, nullptr,
1093                                     SetViewportSettings);
1094 
1095   Page* page = web_view_helper.GetWebView()->GetPage();
1096   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1097 
1098   EXPECT_EQ(980, constraints.layout_size.Width());
1099   EXPECT_NEAR(1078, constraints.layout_size.Height(), 0.01f);
1100   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1101   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1102   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1103   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1104 }
1105 
TEST_F(ViewportTest,viewport53)1106 TEST_F(ViewportTest, viewport53) {
1107   RegisterMockedHttpURLLoad("viewport/viewport-53.html");
1108 
1109   frame_test_helpers::WebViewHelper web_view_helper;
1110   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-53.html",
1111                                     nullptr, nullptr, nullptr,
1112                                     SetViewportSettings);
1113 
1114   Page* page = web_view_helper.GetWebView()->GetPage();
1115   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1116 
1117   EXPECT_EQ(980, constraints.layout_size.Width());
1118   EXPECT_NEAR(1078, constraints.layout_size.Height(), 0.01f);
1119   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1120   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1121   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1122   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1123 }
1124 
TEST_F(ViewportTest,viewport54)1125 TEST_F(ViewportTest, viewport54) {
1126   RegisterMockedHttpURLLoad("viewport/viewport-54.html");
1127 
1128   frame_test_helpers::WebViewHelper web_view_helper;
1129   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-54.html",
1130                                     nullptr, nullptr, nullptr,
1131                                     SetViewportSettings);
1132 
1133   Page* page = web_view_helper.GetWebView()->GetPage();
1134   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1135 
1136   EXPECT_EQ(980, constraints.layout_size.Width());
1137   EXPECT_NEAR(1078, constraints.layout_size.Height(), 0.01f);
1138   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1139   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1140   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1141   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1142 }
1143 
TEST_F(ViewportTest,viewport55)1144 TEST_F(ViewportTest, viewport55) {
1145   RegisterMockedHttpURLLoad("viewport/viewport-55.html");
1146 
1147   frame_test_helpers::WebViewHelper web_view_helper;
1148   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-55.html",
1149                                     nullptr, nullptr, nullptr,
1150                                     SetViewportSettings);
1151 
1152   Page* page = web_view_helper.GetWebView()->GetPage();
1153   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1154 
1155   EXPECT_EQ(980, constraints.layout_size.Width());
1156   EXPECT_NEAR(1078, constraints.layout_size.Height(), 0.01f);
1157   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1158   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1159   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1160   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1161 }
1162 
TEST_F(ViewportTest,viewport56)1163 TEST_F(ViewportTest, viewport56) {
1164   RegisterMockedHttpURLLoad("viewport/viewport-56.html");
1165 
1166   frame_test_helpers::WebViewHelper web_view_helper;
1167   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-56.html",
1168                                     nullptr, nullptr, nullptr,
1169                                     SetViewportSettings);
1170 
1171   Page* page = web_view_helper.GetWebView()->GetPage();
1172   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1173 
1174   EXPECT_EQ(980, constraints.layout_size.Width());
1175   EXPECT_EQ(1078, constraints.layout_size.Height());
1176   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1177   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1178   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1179   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1180 }
1181 
TEST_F(ViewportTest,viewport57)1182 TEST_F(ViewportTest, viewport57) {
1183   RegisterMockedHttpURLLoad("viewport/viewport-57.html");
1184 
1185   frame_test_helpers::WebViewHelper web_view_helper;
1186   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-57.html",
1187                                     nullptr, nullptr, nullptr,
1188                                     SetViewportSettings);
1189 
1190   Page* page = web_view_helper.GetWebView()->GetPage();
1191   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1192 
1193   EXPECT_EQ(320, constraints.layout_size.Width());
1194   EXPECT_EQ(352, constraints.layout_size.Height());
1195   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1196   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
1197   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1198   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1199 }
1200 
TEST_F(ViewportTest,viewport58)1201 TEST_F(ViewportTest, viewport58) {
1202   RegisterMockedHttpURLLoad("viewport/viewport-58.html");
1203 
1204   frame_test_helpers::WebViewHelper web_view_helper;
1205   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-58.html",
1206                                     nullptr, nullptr, nullptr,
1207                                     SetViewportSettings);
1208 
1209   Page* page = web_view_helper.GetWebView()->GetPage();
1210   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1211 
1212   EXPECT_EQ(3200, constraints.layout_size.Width());
1213   EXPECT_EQ(3520, constraints.layout_size.Height());
1214   EXPECT_NEAR(0.1f, constraints.initial_scale, 0.01f);
1215   EXPECT_NEAR(0.1f, constraints.minimum_scale, 0.01f);
1216   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1217   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1218 }
1219 
TEST_F(ViewportTest,viewport59)1220 TEST_F(ViewportTest, viewport59) {
1221   RegisterMockedHttpURLLoad("viewport/viewport-59.html");
1222 
1223   frame_test_helpers::WebViewHelper web_view_helper;
1224   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-59.html",
1225                                     nullptr, nullptr, nullptr,
1226                                     SetViewportSettings);
1227 
1228   Page* page = web_view_helper.GetWebView()->GetPage();
1229   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1230 
1231   EXPECT_EQ(320, constraints.layout_size.Width());
1232   EXPECT_EQ(352, constraints.layout_size.Height());
1233   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1234   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
1235   EXPECT_NEAR(1.0f, constraints.maximum_scale, 0.01f);
1236   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1237 }
1238 
TEST_F(ViewportTest,viewport60)1239 TEST_F(ViewportTest, viewport60) {
1240   RegisterMockedHttpURLLoad("viewport/viewport-60.html");
1241 
1242   frame_test_helpers::WebViewHelper web_view_helper;
1243   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-60.html",
1244                                     nullptr, nullptr, nullptr,
1245                                     SetViewportSettings);
1246 
1247   Page* page = web_view_helper.GetWebView()->GetPage();
1248   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1249 
1250   EXPECT_EQ(32, constraints.layout_size.Width());
1251   EXPECT_NEAR(35.2, constraints.layout_size.Height(), 0.01f);
1252   EXPECT_NEAR(10.0f, constraints.initial_scale, 0.01f);
1253   EXPECT_NEAR(10.0f, constraints.minimum_scale, 0.01f);
1254   EXPECT_NEAR(10.0f, constraints.maximum_scale, 0.01f);
1255   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1256 }
1257 
TEST_F(ViewportTest,viewport61)1258 TEST_F(ViewportTest, viewport61) {
1259   RegisterMockedHttpURLLoad("viewport/viewport-61.html");
1260 
1261   frame_test_helpers::WebViewHelper web_view_helper;
1262   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-61.html",
1263                                     nullptr, nullptr, nullptr,
1264                                     SetViewportSettings);
1265 
1266   Page* page = web_view_helper.GetWebView()->GetPage();
1267   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1268 
1269   EXPECT_EQ(320, constraints.layout_size.Width());
1270   EXPECT_EQ(352, constraints.layout_size.Height());
1271   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1272   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
1273   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1274   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1275 }
1276 
TEST_F(ViewportTest,viewport62)1277 TEST_F(ViewportTest, viewport62) {
1278   RegisterMockedHttpURLLoad("viewport/viewport-62.html");
1279 
1280   frame_test_helpers::WebViewHelper web_view_helper;
1281   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-62.html",
1282                                     nullptr, nullptr, nullptr,
1283                                     SetViewportSettings);
1284 
1285   Page* page = web_view_helper.GetWebView()->GetPage();
1286   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1287 
1288   EXPECT_EQ(320, constraints.layout_size.Width());
1289   EXPECT_EQ(352, constraints.layout_size.Height());
1290   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1291   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
1292   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1293   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1294 }
1295 
TEST_F(ViewportTest,viewport63)1296 TEST_F(ViewportTest, viewport63) {
1297   RegisterMockedHttpURLLoad("viewport/viewport-63.html");
1298 
1299   frame_test_helpers::WebViewHelper web_view_helper;
1300   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-63.html",
1301                                     nullptr, nullptr, nullptr,
1302                                     SetViewportSettings);
1303 
1304   Page* page = web_view_helper.GetWebView()->GetPage();
1305   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1306 
1307   EXPECT_EQ(320, constraints.layout_size.Width());
1308   EXPECT_EQ(352, constraints.layout_size.Height());
1309   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1310   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
1311   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1312   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1313 }
1314 
TEST_F(ViewportTest,viewport64)1315 TEST_F(ViewportTest, viewport64) {
1316   RegisterMockedHttpURLLoad("viewport/viewport-64.html");
1317 
1318   frame_test_helpers::WebViewHelper web_view_helper;
1319   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-64.html",
1320                                     nullptr, nullptr, nullptr,
1321                                     SetViewportSettings);
1322 
1323   Page* page = web_view_helper.GetWebView()->GetPage();
1324   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1325 
1326   EXPECT_EQ(320, constraints.layout_size.Width());
1327   EXPECT_EQ(352, constraints.layout_size.Height());
1328   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1329   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
1330   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1331   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1332 }
1333 
TEST_F(ViewportTest,viewport65)1334 TEST_F(ViewportTest, viewport65) {
1335   RegisterMockedHttpURLLoad("viewport/viewport-65.html");
1336 
1337   frame_test_helpers::WebViewHelper web_view_helper;
1338   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-65.html",
1339                                     nullptr, nullptr, nullptr,
1340                                     SetViewportSettings);
1341 
1342   Page* page = web_view_helper.GetWebView()->GetPage();
1343   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1344 
1345   EXPECT_EQ(100, constraints.layout_size.Width());
1346   EXPECT_EQ(110, constraints.layout_size.Height());
1347   EXPECT_NEAR(3.2f, constraints.initial_scale, 0.01f);
1348   EXPECT_NEAR(3.2f, constraints.minimum_scale, 0.01f);
1349   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1350   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1351 }
1352 
TEST_F(ViewportTest,viewport66)1353 TEST_F(ViewportTest, viewport66) {
1354   RegisterMockedHttpURLLoad("viewport/viewport-66.html");
1355 
1356   frame_test_helpers::WebViewHelper web_view_helper;
1357   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-66.html",
1358                                     nullptr, nullptr, nullptr,
1359                                     SetViewportSettings);
1360 
1361   Page* page = web_view_helper.GetWebView()->GetPage();
1362   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1363 
1364   EXPECT_EQ(100, constraints.layout_size.Width());
1365   EXPECT_EQ(110, constraints.layout_size.Height());
1366   EXPECT_NEAR(3.2f, constraints.initial_scale, 0.01f);
1367   EXPECT_NEAR(3.2f, constraints.minimum_scale, 0.01f);
1368   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1369   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1370 }
1371 
TEST_F(ViewportTest,viewport67)1372 TEST_F(ViewportTest, viewport67) {
1373   RegisterMockedHttpURLLoad("viewport/viewport-67.html");
1374 
1375   frame_test_helpers::WebViewHelper web_view_helper;
1376   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-67.html",
1377                                     nullptr, nullptr, nullptr,
1378                                     SetViewportSettings);
1379 
1380   Page* page = web_view_helper.GetWebView()->GetPage();
1381   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1382 
1383   EXPECT_EQ(320, constraints.layout_size.Width());
1384   EXPECT_EQ(352, constraints.layout_size.Height());
1385   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1386   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
1387   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1388   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1389 }
1390 
TEST_F(ViewportTest,viewport68)1391 TEST_F(ViewportTest, viewport68) {
1392   RegisterMockedHttpURLLoad("viewport/viewport-68.html");
1393 
1394   frame_test_helpers::WebViewHelper web_view_helper;
1395   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-68.html",
1396                                     nullptr, nullptr, nullptr,
1397                                     SetViewportSettings);
1398 
1399   Page* page = web_view_helper.GetWebView()->GetPage();
1400   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1401 
1402   EXPECT_EQ(320, constraints.layout_size.Width());
1403   EXPECT_EQ(352, constraints.layout_size.Height());
1404   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1405   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
1406   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1407   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1408 }
1409 
TEST_F(ViewportTest,viewport69)1410 TEST_F(ViewportTest, viewport69) {
1411   RegisterMockedHttpURLLoad("viewport/viewport-69.html");
1412 
1413   frame_test_helpers::WebViewHelper web_view_helper;
1414   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-69.html",
1415                                     nullptr, nullptr, nullptr,
1416                                     SetViewportSettings);
1417 
1418   Page* page = web_view_helper.GetWebView()->GetPage();
1419   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1420 
1421   EXPECT_EQ(100, constraints.layout_size.Width());
1422   EXPECT_EQ(110, constraints.layout_size.Height());
1423   EXPECT_NEAR(3.2f, constraints.initial_scale, 0.01f);
1424   EXPECT_NEAR(3.2f, constraints.minimum_scale, 0.01f);
1425   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1426   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1427 }
1428 
TEST_F(ViewportTest,viewport70)1429 TEST_F(ViewportTest, viewport70) {
1430   RegisterMockedHttpURLLoad("viewport/viewport-70.html");
1431 
1432   frame_test_helpers::WebViewHelper web_view_helper;
1433   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-70.html",
1434                                     nullptr, nullptr, nullptr,
1435                                     SetViewportSettings);
1436 
1437   Page* page = web_view_helper.GetWebView()->GetPage();
1438   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1439 
1440   EXPECT_EQ(100, constraints.layout_size.Width());
1441   EXPECT_EQ(110, constraints.layout_size.Height());
1442   EXPECT_NEAR(3.2f, constraints.initial_scale, 0.01f);
1443   EXPECT_NEAR(3.2f, constraints.minimum_scale, 0.01f);
1444   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1445   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1446 }
1447 
TEST_F(ViewportTest,viewport71)1448 TEST_F(ViewportTest, viewport71) {
1449   RegisterMockedHttpURLLoad("viewport/viewport-71.html");
1450 
1451   frame_test_helpers::WebViewHelper web_view_helper;
1452   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-71.html",
1453                                     nullptr, nullptr, nullptr,
1454                                     SetViewportSettings);
1455 
1456   Page* page = web_view_helper.GetWebView()->GetPage();
1457   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1458 
1459   EXPECT_EQ(320, constraints.layout_size.Width());
1460   EXPECT_EQ(352, constraints.layout_size.Height());
1461   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1462   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
1463   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1464   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1465 }
1466 
TEST_F(ViewportTest,viewport72)1467 TEST_F(ViewportTest, viewport72) {
1468   RegisterMockedHttpURLLoad("viewport/viewport-72.html");
1469 
1470   frame_test_helpers::WebViewHelper web_view_helper;
1471   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-72.html",
1472                                     nullptr, nullptr, nullptr,
1473                                     SetViewportSettings);
1474 
1475   Page* page = web_view_helper.GetWebView()->GetPage();
1476   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1477 
1478   EXPECT_EQ(100, constraints.layout_size.Width());
1479   EXPECT_EQ(110, constraints.layout_size.Height());
1480   EXPECT_NEAR(3.2f, constraints.initial_scale, 0.01f);
1481   EXPECT_NEAR(3.2f, constraints.minimum_scale, 0.01f);
1482   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1483   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1484 }
1485 
TEST_F(ViewportTest,viewport73)1486 TEST_F(ViewportTest, viewport73) {
1487   RegisterMockedHttpURLLoad("viewport/viewport-73.html");
1488 
1489   frame_test_helpers::WebViewHelper web_view_helper;
1490   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-73.html",
1491                                     nullptr, nullptr, nullptr,
1492                                     SetViewportSettings);
1493 
1494   Page* page = web_view_helper.GetWebView()->GetPage();
1495   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1496 
1497   EXPECT_EQ(100, constraints.layout_size.Width());
1498   EXPECT_EQ(110, constraints.layout_size.Height());
1499   EXPECT_NEAR(3.2f, constraints.initial_scale, 0.01f);
1500   EXPECT_NEAR(3.2f, constraints.minimum_scale, 0.01f);
1501   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1502   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1503 }
1504 
TEST_F(ViewportTest,viewport74)1505 TEST_F(ViewportTest, viewport74) {
1506   RegisterMockedHttpURLLoad("viewport/viewport-74.html");
1507 
1508   frame_test_helpers::WebViewHelper web_view_helper;
1509   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-74.html",
1510                                     nullptr, nullptr, nullptr,
1511                                     SetViewportSettings);
1512 
1513   Page* page = web_view_helper.GetWebView()->GetPage();
1514   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1515 
1516   EXPECT_EQ(100, constraints.layout_size.Width());
1517   EXPECT_EQ(110, constraints.layout_size.Height());
1518   EXPECT_NEAR(3.2f, constraints.initial_scale, 0.01f);
1519   EXPECT_NEAR(3.2f, constraints.minimum_scale, 0.01f);
1520   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1521   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1522 }
1523 
TEST_F(ViewportTest,viewport75)1524 TEST_F(ViewportTest, viewport75) {
1525   RegisterMockedHttpURLLoad("viewport/viewport-75.html");
1526 
1527   frame_test_helpers::WebViewHelper web_view_helper;
1528   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-75.html",
1529                                     nullptr, nullptr, nullptr,
1530                                     SetViewportSettings);
1531 
1532   Page* page = web_view_helper.GetWebView()->GetPage();
1533   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1534 
1535   EXPECT_EQ(64, constraints.layout_size.Width());
1536   EXPECT_NEAR(70.4, constraints.layout_size.Height(), 0.01f);
1537   EXPECT_NEAR(5.0f, constraints.initial_scale, 0.01f);
1538   EXPECT_NEAR(5.0f, constraints.minimum_scale, 0.01f);
1539   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1540   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1541 }
1542 
TEST_F(ViewportTest,viewport76)1543 TEST_F(ViewportTest, viewport76) {
1544   RegisterMockedHttpURLLoad("viewport/viewport-76.html");
1545 
1546   frame_test_helpers::WebViewHelper web_view_helper;
1547   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-76.html",
1548                                     nullptr, nullptr, nullptr,
1549                                     SetViewportSettings);
1550 
1551   Page* page = web_view_helper.GetWebView()->GetPage();
1552   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1553 
1554   EXPECT_EQ(32, constraints.layout_size.Width());
1555   EXPECT_NEAR(35.2, constraints.layout_size.Height(), 0.01);
1556   EXPECT_NEAR(10.0f, constraints.initial_scale, 0.01f);
1557   EXPECT_NEAR(10.0f, constraints.minimum_scale, 0.01f);
1558   EXPECT_NEAR(10.0f, constraints.maximum_scale, 0.01f);
1559   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1560 }
1561 
TEST_F(ViewportTest,viewport77)1562 TEST_F(ViewportTest, viewport77) {
1563   RegisterMockedHttpURLLoad("viewport/viewport-77.html");
1564 
1565   frame_test_helpers::WebViewHelper web_view_helper;
1566   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-77.html",
1567                                     nullptr, nullptr, nullptr,
1568                                     SetViewportSettings);
1569 
1570   Page* page = web_view_helper.GetWebView()->GetPage();
1571   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1572 
1573   EXPECT_EQ(1280, constraints.layout_size.Width());
1574   EXPECT_EQ(1408, constraints.layout_size.Height());
1575   EXPECT_NEAR(0.25f, constraints.initial_scale, 0.01f);
1576   EXPECT_NEAR(0.25f, constraints.minimum_scale, 0.01f);
1577   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1578   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1579 }
1580 
TEST_F(ViewportTest,viewport78)1581 TEST_F(ViewportTest, viewport78) {
1582   RegisterMockedHttpURLLoad("viewport/viewport-78.html");
1583 
1584   frame_test_helpers::WebViewHelper web_view_helper;
1585   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-78.html",
1586                                     nullptr, nullptr, nullptr,
1587                                     SetViewportSettings);
1588 
1589   Page* page = web_view_helper.GetWebView()->GetPage();
1590   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1591 
1592   EXPECT_EQ(100, constraints.layout_size.Width());
1593   EXPECT_EQ(110, constraints.layout_size.Height());
1594   EXPECT_NEAR(3.2f, constraints.initial_scale, 0.01f);
1595   EXPECT_NEAR(3.2f, constraints.minimum_scale, 0.01f);
1596   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1597   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1598 }
1599 
TEST_F(ViewportTest,viewport79)1600 TEST_F(ViewportTest, viewport79) {
1601   RegisterMockedHttpURLLoad("viewport/viewport-79.html");
1602 
1603   frame_test_helpers::WebViewHelper web_view_helper;
1604   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-79.html",
1605                                     nullptr, nullptr, nullptr,
1606                                     SetViewportSettings);
1607 
1608   Page* page = web_view_helper.GetWebView()->GetPage();
1609   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1610 
1611   EXPECT_EQ(320, constraints.layout_size.Width());
1612   EXPECT_EQ(352, constraints.layout_size.Height());
1613   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1614   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
1615   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1616   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1617 }
1618 
TEST_F(ViewportTest,viewport80)1619 TEST_F(ViewportTest, viewport80) {
1620   RegisterMockedHttpURLLoad("viewport/viewport-80.html");
1621 
1622   frame_test_helpers::WebViewHelper web_view_helper;
1623   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-80.html",
1624                                     nullptr, nullptr, nullptr,
1625                                     SetViewportSettings);
1626 
1627   Page* page = web_view_helper.GetWebView()->GetPage();
1628   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1629 
1630   EXPECT_EQ(320, constraints.layout_size.Width());
1631   EXPECT_EQ(352, constraints.layout_size.Height());
1632   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
1633   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
1634   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1635   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1636 }
1637 
TEST_F(ViewportTest,viewport81)1638 TEST_F(ViewportTest, viewport81) {
1639   RegisterMockedHttpURLLoad("viewport/viewport-81.html");
1640 
1641   frame_test_helpers::WebViewHelper web_view_helper;
1642   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-81.html",
1643                                     nullptr, nullptr, nullptr,
1644                                     SetViewportSettings);
1645 
1646   Page* page = web_view_helper.GetWebView()->GetPage();
1647   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1648 
1649   EXPECT_EQ(3000, constraints.layout_size.Width());
1650   EXPECT_EQ(3300, constraints.layout_size.Height());
1651   EXPECT_NEAR(0.25f, constraints.initial_scale, 0.01f);
1652   EXPECT_NEAR(0.25f, constraints.minimum_scale, 0.01f);
1653   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1654   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1655 }
1656 
TEST_F(ViewportTest,viewport82)1657 TEST_F(ViewportTest, viewport82) {
1658   RegisterMockedHttpURLLoad("viewport/viewport-82.html");
1659 
1660   frame_test_helpers::WebViewHelper web_view_helper;
1661   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-82.html",
1662                                     nullptr, nullptr, nullptr,
1663                                     SetViewportSettings);
1664 
1665   Page* page = web_view_helper.GetWebView()->GetPage();
1666   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1667 
1668   EXPECT_EQ(400, constraints.layout_size.Width());
1669   EXPECT_EQ(440, constraints.layout_size.Height());
1670   EXPECT_NEAR(0.8f, constraints.initial_scale, 0.01f);
1671   EXPECT_NEAR(0.8f, constraints.minimum_scale, 0.01f);
1672   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1673   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1674 }
1675 
TEST_F(ViewportTest,viewport83)1676 TEST_F(ViewportTest, viewport83) {
1677   RegisterMockedHttpURLLoad("viewport/viewport-83.html");
1678 
1679   frame_test_helpers::WebViewHelper web_view_helper;
1680   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-83.html",
1681                                     nullptr, nullptr, nullptr,
1682                                     SetViewportSettings);
1683 
1684   Page* page = web_view_helper.GetWebView()->GetPage();
1685   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1686 
1687   EXPECT_EQ(980, constraints.layout_size.Width());
1688   EXPECT_NEAR(1078, constraints.layout_size.Height(), 0.01f);
1689   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1690   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1691   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1692   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1693 }
1694 
TEST_F(ViewportTest,viewport84)1695 TEST_F(ViewportTest, viewport84) {
1696   RegisterMockedHttpURLLoad("viewport/viewport-84.html");
1697 
1698   frame_test_helpers::WebViewHelper web_view_helper;
1699   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-84.html",
1700                                     nullptr, nullptr, nullptr,
1701                                     SetViewportSettings);
1702 
1703   Page* page = web_view_helper.GetWebView()->GetPage();
1704   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1705 
1706   EXPECT_EQ(980, constraints.layout_size.Width());
1707   EXPECT_EQ(480, constraints.layout_size.Height());
1708   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1709   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1710   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1711   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1712 }
1713 
TEST_F(ViewportTest,viewport85)1714 TEST_F(ViewportTest, viewport85) {
1715   RegisterMockedHttpURLLoad("viewport/viewport-85.html");
1716 
1717   frame_test_helpers::WebViewHelper web_view_helper;
1718   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-85.html",
1719                                     nullptr, nullptr, nullptr,
1720                                     SetViewportSettings);
1721 
1722   Page* page = web_view_helper.GetWebView()->GetPage();
1723   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1724 
1725   EXPECT_EQ(540, constraints.layout_size.Width());
1726   EXPECT_EQ(594, constraints.layout_size.Height());
1727   EXPECT_NEAR(0.59f, constraints.initial_scale, 0.01f);
1728   EXPECT_NEAR(0.59f, constraints.minimum_scale, 0.01f);
1729   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1730   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1731 }
1732 
TEST_F(ViewportTest,viewport86)1733 TEST_F(ViewportTest, viewport86) {
1734   RegisterMockedHttpURLLoad("viewport/viewport-86.html");
1735 
1736   frame_test_helpers::WebViewHelper web_view_helper;
1737   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-86.html",
1738                                     nullptr, nullptr, nullptr,
1739                                     SetViewportSettings);
1740 
1741   Page* page = web_view_helper.GetWebView()->GetPage();
1742   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1743 
1744   EXPECT_NEAR(457.14, constraints.layout_size.Width(), 0.01f);
1745   EXPECT_NEAR(502.86, constraints.layout_size.Height(), 0.01f);
1746   EXPECT_NEAR(0.7f, constraints.initial_scale, 0.01f);
1747   EXPECT_NEAR(0.7f, constraints.minimum_scale, 0.01f);
1748   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1749   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1750 }
1751 
TEST_F(ViewportTest,viewport87)1752 TEST_F(ViewportTest, viewport87) {
1753   RegisterMockedHttpURLLoad("viewport/viewport-87.html");
1754 
1755   frame_test_helpers::WebViewHelper web_view_helper;
1756   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-87.html",
1757                                     nullptr, nullptr, nullptr,
1758                                     SetViewportSettings);
1759 
1760   Page* page = web_view_helper.GetWebView()->GetPage();
1761   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1762 
1763   EXPECT_EQ(980, constraints.layout_size.Width());
1764   EXPECT_NEAR(1078, constraints.layout_size.Height(), 0.01f);
1765   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1766   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1767   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1768   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1769 }
1770 
TEST_F(ViewportTest,viewport88)1771 TEST_F(ViewportTest, viewport88) {
1772   RegisterMockedHttpURLLoad("viewport/viewport-88.html");
1773 
1774   frame_test_helpers::WebViewHelper web_view_helper;
1775   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-88.html",
1776                                     nullptr, nullptr, nullptr,
1777                                     SetViewportSettings);
1778 
1779   Page* page = web_view_helper.GetWebView()->GetPage();
1780   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1781 
1782   EXPECT_EQ(980, constraints.layout_size.Width());
1783   EXPECT_EQ(1078, constraints.layout_size.Height());
1784   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1785   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1786   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1787   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1788 }
1789 
TEST_F(ViewportTest,viewport90)1790 TEST_F(ViewportTest, viewport90) {
1791   RegisterMockedHttpURLLoad("viewport/viewport-90.html");
1792 
1793   frame_test_helpers::WebViewHelper web_view_helper;
1794   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-90.html",
1795                                     nullptr, nullptr, nullptr,
1796                                     SetViewportSettings);
1797 
1798   Page* page = web_view_helper.GetWebView()->GetPage();
1799   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1800 
1801   EXPECT_EQ(700, constraints.layout_size.Width());
1802   EXPECT_EQ(770, constraints.layout_size.Height());
1803   EXPECT_NEAR(0.5f, constraints.initial_scale, 0.01f);
1804   EXPECT_NEAR(0.46f, constraints.minimum_scale, 0.01f);
1805   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1806   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1807 }
1808 
TEST_F(ViewportTest,viewport100)1809 TEST_F(ViewportTest, viewport100) {
1810   RegisterMockedHttpURLLoad("viewport/viewport-100.html");
1811 
1812   frame_test_helpers::WebViewHelper web_view_helper;
1813   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-100.html",
1814                                     nullptr, nullptr, nullptr,
1815                                     SetViewportSettings);
1816 
1817   Page* page = web_view_helper.GetWebView()->GetPage();
1818   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1819 
1820   EXPECT_EQ(400, constraints.layout_size.Width());
1821   EXPECT_EQ(440, constraints.layout_size.Height());
1822   EXPECT_NEAR(0.8f, constraints.initial_scale, 0.01f);
1823   EXPECT_NEAR(0.8f, constraints.minimum_scale, 0.01f);
1824   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1825   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1826 }
1827 
TEST_F(ViewportTest,viewport101)1828 TEST_F(ViewportTest, viewport101) {
1829   RegisterMockedHttpURLLoad("viewport/viewport-101.html");
1830 
1831   frame_test_helpers::WebViewHelper web_view_helper;
1832   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-101.html",
1833                                     nullptr, nullptr, nullptr,
1834                                     SetViewportSettings);
1835 
1836   Page* page = web_view_helper.GetWebView()->GetPage();
1837   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1838 
1839   EXPECT_EQ(400, constraints.layout_size.Width());
1840   EXPECT_EQ(440, constraints.layout_size.Height());
1841   EXPECT_NEAR(0.8f, constraints.initial_scale, 0.01f);
1842   EXPECT_NEAR(0.8f, constraints.minimum_scale, 0.01f);
1843   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1844   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1845 }
1846 
TEST_F(ViewportTest,viewport102)1847 TEST_F(ViewportTest, viewport102) {
1848   RegisterMockedHttpURLLoad("viewport/viewport-102.html");
1849 
1850   frame_test_helpers::WebViewHelper web_view_helper;
1851   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-102.html",
1852                                     nullptr, nullptr, nullptr,
1853                                     SetViewportSettings);
1854 
1855   Page* page = web_view_helper.GetWebView()->GetPage();
1856   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1857 
1858   EXPECT_EQ(400, constraints.layout_size.Width());
1859   EXPECT_EQ(440, constraints.layout_size.Height());
1860   EXPECT_NEAR(0.8f, constraints.initial_scale, 0.01f);
1861   EXPECT_NEAR(0.8f, constraints.minimum_scale, 0.01f);
1862   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1863   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1864 }
1865 
TEST_F(ViewportTest,viewport103)1866 TEST_F(ViewportTest, viewport103) {
1867   RegisterMockedHttpURLLoad("viewport/viewport-103.html");
1868 
1869   frame_test_helpers::WebViewHelper web_view_helper;
1870   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-103.html",
1871                                     nullptr, nullptr, nullptr,
1872                                     SetViewportSettings);
1873 
1874   Page* page = web_view_helper.GetWebView()->GetPage();
1875   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1876 
1877   EXPECT_EQ(400, constraints.layout_size.Width());
1878   EXPECT_EQ(440, constraints.layout_size.Height());
1879   EXPECT_NEAR(0.8f, constraints.initial_scale, 0.01f);
1880   EXPECT_NEAR(0.8f, constraints.minimum_scale, 0.01f);
1881   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1882   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1883 }
1884 
TEST_F(ViewportTest,viewport104)1885 TEST_F(ViewportTest, viewport104) {
1886   RegisterMockedHttpURLLoad("viewport/viewport-104.html");
1887 
1888   frame_test_helpers::WebViewHelper web_view_helper;
1889   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-104.html",
1890                                     nullptr, nullptr, nullptr,
1891                                     SetViewportSettings);
1892 
1893   Page* page = web_view_helper.GetWebView()->GetPage();
1894   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1895 
1896   EXPECT_EQ(980, constraints.layout_size.Width());
1897   EXPECT_EQ(1078, constraints.layout_size.Height());
1898   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1899   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1900   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1901   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1902 }
1903 
TEST_F(ViewportTest,viewport105)1904 TEST_F(ViewportTest, viewport105) {
1905   RegisterMockedHttpURLLoad("viewport/viewport-105.html");
1906 
1907   frame_test_helpers::WebViewHelper web_view_helper;
1908   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-105.html",
1909                                     nullptr, nullptr, nullptr,
1910                                     SetViewportSettings);
1911 
1912   Page* page = web_view_helper.GetWebView()->GetPage();
1913   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1914 
1915   EXPECT_EQ(980, constraints.layout_size.Width());
1916   EXPECT_EQ(1078, constraints.layout_size.Height());
1917   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1918   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1919   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1920   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1921 }
1922 
TEST_F(ViewportTest,viewport106)1923 TEST_F(ViewportTest, viewport106) {
1924   RegisterMockedHttpURLLoad("viewport/viewport-106.html");
1925 
1926   frame_test_helpers::WebViewHelper web_view_helper;
1927   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-106.html",
1928                                     nullptr, nullptr, nullptr,
1929                                     SetViewportSettings);
1930 
1931   Page* page = web_view_helper.GetWebView()->GetPage();
1932   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1933 
1934   EXPECT_EQ(980, constraints.layout_size.Width());
1935   EXPECT_EQ(1078, constraints.layout_size.Height());
1936   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1937   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1938   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1939   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1940 }
1941 
TEST_F(ViewportTest,viewport107)1942 TEST_F(ViewportTest, viewport107) {
1943   RegisterMockedHttpURLLoad("viewport/viewport-107.html");
1944 
1945   frame_test_helpers::WebViewHelper web_view_helper;
1946   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-107.html",
1947                                     nullptr, nullptr, nullptr,
1948                                     SetViewportSettings);
1949 
1950   Page* page = web_view_helper.GetWebView()->GetPage();
1951   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1952 
1953   EXPECT_EQ(980, constraints.layout_size.Width());
1954   EXPECT_EQ(1078, constraints.layout_size.Height());
1955   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1956   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1957   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1958   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1959 }
1960 
TEST_F(ViewportTest,viewport108)1961 TEST_F(ViewportTest, viewport108) {
1962   RegisterMockedHttpURLLoad("viewport/viewport-108.html");
1963 
1964   frame_test_helpers::WebViewHelper web_view_helper;
1965   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-108.html",
1966                                     nullptr, nullptr, nullptr,
1967                                     SetViewportSettings);
1968 
1969   Page* page = web_view_helper.GetWebView()->GetPage();
1970   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1971 
1972   EXPECT_EQ(980, constraints.layout_size.Width());
1973   EXPECT_EQ(1078, constraints.layout_size.Height());
1974   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1975   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1976   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1977   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1978 }
1979 
TEST_F(ViewportTest,viewport109)1980 TEST_F(ViewportTest, viewport109) {
1981   RegisterMockedHttpURLLoad("viewport/viewport-109.html");
1982 
1983   frame_test_helpers::WebViewHelper web_view_helper;
1984   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-109.html",
1985                                     nullptr, nullptr, nullptr,
1986                                     SetViewportSettings);
1987 
1988   Page* page = web_view_helper.GetWebView()->GetPage();
1989   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
1990 
1991   EXPECT_EQ(980, constraints.layout_size.Width());
1992   EXPECT_EQ(1078, constraints.layout_size.Height());
1993   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
1994   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
1995   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
1996   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
1997 }
1998 
TEST_F(ViewportTest,viewport110)1999 TEST_F(ViewportTest, viewport110) {
2000   RegisterMockedHttpURLLoad("viewport/viewport-110.html");
2001 
2002   frame_test_helpers::WebViewHelper web_view_helper;
2003   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-110.html",
2004                                     nullptr, nullptr, nullptr,
2005                                     SetViewportSettings);
2006 
2007   Page* page = web_view_helper.GetWebView()->GetPage();
2008   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2009 
2010   EXPECT_EQ(980, constraints.layout_size.Width());
2011   EXPECT_EQ(1078, constraints.layout_size.Height());
2012   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
2013   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
2014   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2015   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2016 }
2017 
TEST_F(ViewportTest,viewport111)2018 TEST_F(ViewportTest, viewport111) {
2019   RegisterMockedHttpURLLoad("viewport/viewport-111.html");
2020 
2021   frame_test_helpers::WebViewHelper web_view_helper;
2022   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-111.html",
2023                                     nullptr, nullptr, nullptr,
2024                                     SetViewportSettings);
2025 
2026   Page* page = web_view_helper.GetWebView()->GetPage();
2027   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2028 
2029   EXPECT_EQ(980, constraints.layout_size.Width());
2030   EXPECT_EQ(1078, constraints.layout_size.Height());
2031   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
2032   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
2033   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2034   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2035 }
2036 
TEST_F(ViewportTest,viewport112)2037 TEST_F(ViewportTest, viewport112) {
2038   RegisterMockedHttpURLLoad("viewport/viewport-112.html");
2039 
2040   frame_test_helpers::WebViewHelper web_view_helper;
2041   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-112.html",
2042                                     nullptr, nullptr, nullptr,
2043                                     SetViewportSettings);
2044 
2045   Page* page = web_view_helper.GetWebView()->GetPage();
2046   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2047 
2048   EXPECT_EQ(400, constraints.layout_size.Width());
2049   EXPECT_EQ(440, constraints.layout_size.Height());
2050   EXPECT_NEAR(0.8f, constraints.initial_scale, 0.01f);
2051   EXPECT_NEAR(0.8f, constraints.minimum_scale, 0.01f);
2052   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2053   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2054 }
2055 
TEST_F(ViewportTest,viewport113)2056 TEST_F(ViewportTest, viewport113) {
2057   RegisterMockedHttpURLLoad("viewport/viewport-113.html");
2058 
2059   frame_test_helpers::WebViewHelper web_view_helper;
2060   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-113.html",
2061                                     nullptr, nullptr, nullptr,
2062                                     SetViewportSettings);
2063 
2064   Page* page = web_view_helper.GetWebView()->GetPage();
2065   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2066 
2067   EXPECT_EQ(980, constraints.layout_size.Width());
2068   EXPECT_EQ(1078, constraints.layout_size.Height());
2069   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
2070   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
2071   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2072   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2073 }
2074 
TEST_F(ViewportTest,viewport114)2075 TEST_F(ViewportTest, viewport114) {
2076   RegisterMockedHttpURLLoad("viewport/viewport-114.html");
2077 
2078   frame_test_helpers::WebViewHelper web_view_helper;
2079   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-114.html",
2080                                     nullptr, nullptr, nullptr,
2081                                     SetViewportSettings);
2082 
2083   Page* page = web_view_helper.GetWebView()->GetPage();
2084   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2085 
2086   EXPECT_EQ(980, constraints.layout_size.Width());
2087   EXPECT_EQ(1078, constraints.layout_size.Height());
2088   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
2089   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
2090   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2091   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2092 }
2093 
TEST_F(ViewportTest,viewport115)2094 TEST_F(ViewportTest, viewport115) {
2095   RegisterMockedHttpURLLoad("viewport/viewport-115.html");
2096 
2097   frame_test_helpers::WebViewHelper web_view_helper;
2098   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-115.html",
2099                                     nullptr, nullptr, nullptr,
2100                                     SetViewportSettings);
2101 
2102   Page* page = web_view_helper.GetWebView()->GetPage();
2103   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2104 
2105   EXPECT_EQ(400, constraints.layout_size.Width());
2106   EXPECT_EQ(440, constraints.layout_size.Height());
2107   EXPECT_NEAR(0.8f, constraints.initial_scale, 0.01f);
2108   EXPECT_NEAR(0.8f, constraints.minimum_scale, 0.01f);
2109   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2110   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2111 }
2112 
TEST_F(ViewportTest,viewport116)2113 TEST_F(ViewportTest, viewport116) {
2114   RegisterMockedHttpURLLoad("viewport/viewport-116.html");
2115 
2116   frame_test_helpers::WebViewHelper web_view_helper;
2117   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-116.html",
2118                                     nullptr, nullptr, nullptr,
2119                                     SetViewportSettings);
2120 
2121   Page* page = web_view_helper.GetWebView()->GetPage();
2122   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2123 
2124   EXPECT_EQ(400, constraints.layout_size.Width());
2125   EXPECT_EQ(440, constraints.layout_size.Height());
2126   EXPECT_NEAR(0.8f, constraints.initial_scale, 0.01f);
2127   EXPECT_NEAR(0.8f, constraints.minimum_scale, 0.01f);
2128   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2129   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2130 }
2131 
TEST_F(ViewportTest,viewport117)2132 TEST_F(ViewportTest, viewport117) {
2133   RegisterMockedHttpURLLoad("viewport/viewport-117.html");
2134 
2135   frame_test_helpers::WebViewHelper web_view_helper;
2136   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-117.html",
2137                                     nullptr, nullptr, nullptr,
2138                                     SetViewportSettings);
2139 
2140   Page* page = web_view_helper.GetWebView()->GetPage();
2141   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2142 
2143   EXPECT_EQ(980, constraints.layout_size.Width());
2144   EXPECT_EQ(400, constraints.layout_size.Height());
2145   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
2146   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
2147   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2148   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2149 }
2150 
TEST_F(ViewportTest,viewport118)2151 TEST_F(ViewportTest, viewport118) {
2152   RegisterMockedHttpURLLoad("viewport/viewport-118.html");
2153 
2154   frame_test_helpers::WebViewHelper web_view_helper;
2155   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-118.html",
2156                                     nullptr, nullptr, nullptr,
2157                                     SetViewportSettings);
2158 
2159   Page* page = web_view_helper.GetWebView()->GetPage();
2160   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2161 
2162   EXPECT_EQ(320, constraints.layout_size.Width());
2163   EXPECT_EQ(352, constraints.layout_size.Height());
2164   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2165   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2166   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2167   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2168 }
2169 
TEST_F(ViewportTest,viewport119)2170 TEST_F(ViewportTest, viewport119) {
2171   RegisterMockedHttpURLLoad("viewport/viewport-119.html");
2172 
2173   frame_test_helpers::WebViewHelper web_view_helper;
2174   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-119.html",
2175                                     nullptr, nullptr, nullptr,
2176                                     SetViewportSettings);
2177 
2178   Page* page = web_view_helper.GetWebView()->GetPage();
2179   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2180 
2181   EXPECT_EQ(320, constraints.layout_size.Width());
2182   EXPECT_EQ(352, constraints.layout_size.Height());
2183   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2184   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2185   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2186   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2187 }
2188 
TEST_F(ViewportTest,viewport120)2189 TEST_F(ViewportTest, viewport120) {
2190   RegisterMockedHttpURLLoad("viewport/viewport-120.html");
2191 
2192   frame_test_helpers::WebViewHelper web_view_helper;
2193   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-120.html",
2194                                     nullptr, nullptr, nullptr,
2195                                     SetViewportSettings);
2196 
2197   Page* page = web_view_helper.GetWebView()->GetPage();
2198   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2199 
2200   EXPECT_EQ(320, constraints.layout_size.Width());
2201   EXPECT_EQ(352, constraints.layout_size.Height());
2202   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2203   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2204   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2205   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2206 }
2207 
TEST_F(ViewportTest,viewport121)2208 TEST_F(ViewportTest, viewport121) {
2209   RegisterMockedHttpURLLoad("viewport/viewport-121.html");
2210 
2211   frame_test_helpers::WebViewHelper web_view_helper;
2212   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-121.html",
2213                                     nullptr, nullptr, nullptr,
2214                                     SetViewportSettings);
2215 
2216   Page* page = web_view_helper.GetWebView()->GetPage();
2217   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2218 
2219   EXPECT_EQ(980, constraints.layout_size.Width());
2220   EXPECT_NEAR(1078, constraints.layout_size.Height(), 0.01f);
2221   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
2222   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
2223   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2224   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2225 }
2226 
TEST_F(ViewportTest,viewport122)2227 TEST_F(ViewportTest, viewport122) {
2228   RegisterMockedHttpURLLoad("viewport/viewport-122.html");
2229 
2230   frame_test_helpers::WebViewHelper web_view_helper;
2231   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-122.html",
2232                                     nullptr, nullptr, nullptr,
2233                                     SetViewportSettings);
2234 
2235   Page* page = web_view_helper.GetWebView()->GetPage();
2236   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2237 
2238   EXPECT_EQ(980, constraints.layout_size.Width());
2239   EXPECT_NEAR(1078, constraints.layout_size.Height(), 0.01f);
2240   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
2241   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
2242   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2243   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2244 }
2245 
TEST_F(ViewportTest,viewport123)2246 TEST_F(ViewportTest, viewport123) {
2247   RegisterMockedHttpURLLoad("viewport/viewport-123.html");
2248 
2249   frame_test_helpers::WebViewHelper web_view_helper;
2250   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-123.html",
2251                                     nullptr, nullptr, nullptr,
2252                                     SetViewportSettings);
2253 
2254   Page* page = web_view_helper.GetWebView()->GetPage();
2255   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2256 
2257   EXPECT_EQ(320, constraints.layout_size.Width());
2258   EXPECT_EQ(352, constraints.layout_size.Height());
2259   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2260   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2261   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2262   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2263 }
2264 
TEST_F(ViewportTest,viewport124)2265 TEST_F(ViewportTest, viewport124) {
2266   RegisterMockedHttpURLLoad("viewport/viewport-124.html");
2267 
2268   frame_test_helpers::WebViewHelper web_view_helper;
2269   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-124.html",
2270                                     nullptr, nullptr, nullptr,
2271                                     SetViewportSettings);
2272 
2273   Page* page = web_view_helper.GetWebView()->GetPage();
2274   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2275 
2276   EXPECT_EQ(320, constraints.layout_size.Width());
2277   EXPECT_EQ(352, constraints.layout_size.Height());
2278   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2279   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2280   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2281   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2282 }
2283 
TEST_F(ViewportTest,viewport125)2284 TEST_F(ViewportTest, viewport125) {
2285   RegisterMockedHttpURLLoad("viewport/viewport-125.html");
2286 
2287   frame_test_helpers::WebViewHelper web_view_helper;
2288   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-125.html",
2289                                     nullptr, nullptr, nullptr,
2290                                     SetViewportSettings);
2291 
2292   Page* page = web_view_helper.GetWebView()->GetPage();
2293   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2294 
2295   EXPECT_EQ(980, constraints.layout_size.Width());
2296   EXPECT_NEAR(1078, constraints.layout_size.Height(), 0.01f);
2297   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
2298   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
2299   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2300   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2301 }
2302 
TEST_F(ViewportTest,viewport126)2303 TEST_F(ViewportTest, viewport126) {
2304   RegisterMockedHttpURLLoad("viewport/viewport-126.html");
2305 
2306   frame_test_helpers::WebViewHelper web_view_helper;
2307   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-126.html",
2308                                     nullptr, nullptr, nullptr,
2309                                     SetViewportSettings);
2310 
2311   Page* page = web_view_helper.GetWebView()->GetPage();
2312   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2313 
2314   EXPECT_EQ(980, constraints.layout_size.Width());
2315   EXPECT_NEAR(1078, constraints.layout_size.Height(), 0.01f);
2316   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
2317   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
2318   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2319   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2320 }
2321 
TEST_F(ViewportTest,viewport127)2322 TEST_F(ViewportTest, viewport127) {
2323   RegisterMockedHttpURLLoad("viewport/viewport-127.html");
2324 
2325   frame_test_helpers::WebViewHelper web_view_helper;
2326   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-127.html",
2327                                     nullptr, nullptr, nullptr,
2328                                     SetViewportSettings);
2329 
2330   Page* page = web_view_helper.GetWebView()->GetPage();
2331   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2332 
2333   EXPECT_EQ(980, constraints.layout_size.Width());
2334   EXPECT_NEAR(1078, constraints.layout_size.Height(), 0.01f);
2335   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
2336   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
2337   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2338   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2339 }
2340 
TEST_F(ViewportTest,viewport129)2341 TEST_F(ViewportTest, viewport129) {
2342   RegisterMockedHttpURLLoad("viewport/viewport-129.html");
2343 
2344   frame_test_helpers::WebViewHelper web_view_helper;
2345   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-129.html",
2346                                     nullptr, nullptr, nullptr,
2347                                     SetViewportSettings);
2348 
2349   Page* page = web_view_helper.GetWebView()->GetPage();
2350   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2351 
2352   EXPECT_EQ(123, constraints.layout_size.Width());
2353   EXPECT_NEAR(135.3, constraints.layout_size.Height(), 0.01f);
2354   EXPECT_NEAR(2.60f, constraints.initial_scale, 0.01f);
2355   EXPECT_NEAR(2.60f, constraints.minimum_scale, 0.01f);
2356   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2357   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2358 }
2359 
TEST_F(ViewportTest,viewport130)2360 TEST_F(ViewportTest, viewport130) {
2361   RegisterMockedHttpURLLoad("viewport/viewport-130.html");
2362 
2363   frame_test_helpers::WebViewHelper web_view_helper;
2364   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-130.html",
2365                                     nullptr, nullptr, nullptr,
2366                                     SetViewportSettings);
2367 
2368   Page* page = web_view_helper.GetWebView()->GetPage();
2369   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2370 
2371   EXPECT_EQ(320, constraints.layout_size.Width());
2372   EXPECT_EQ(352, constraints.layout_size.Height());
2373   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2374   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2375   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2376   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2377 }
2378 
TEST_F(ViewportTest,viewport131)2379 TEST_F(ViewportTest, viewport131) {
2380   RegisterMockedHttpURLLoad("viewport/viewport-131.html");
2381 
2382   frame_test_helpers::WebViewHelper web_view_helper;
2383   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-131.html",
2384                                     nullptr, nullptr, nullptr,
2385                                     SetViewportSettings);
2386 
2387   Page* page = web_view_helper.GetWebView()->GetPage();
2388   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2389 
2390   EXPECT_EQ(320, constraints.layout_size.Width());
2391   EXPECT_EQ(352, constraints.layout_size.Height());
2392   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2393   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2394   EXPECT_NEAR(1.0f, constraints.maximum_scale, 0.01f);
2395   EXPECT_FALSE(page->GetViewportDescription().user_zoom);
2396 }
2397 
TEST_F(ViewportTest,viewport132)2398 TEST_F(ViewportTest, viewport132) {
2399   RegisterMockedHttpURLLoad("viewport/viewport-132.html");
2400 
2401   frame_test_helpers::WebViewHelper web_view_helper;
2402   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-132.html",
2403                                     nullptr, nullptr, nullptr,
2404                                     SetViewportSettings);
2405 
2406   Page* page = web_view_helper.GetWebView()->GetPage();
2407   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2408 
2409   EXPECT_EQ(320, constraints.layout_size.Width());
2410   EXPECT_EQ(352, constraints.layout_size.Height());
2411   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2412   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2413   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2414   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2415 }
2416 
TEST_F(ViewportTest,viewport133)2417 TEST_F(ViewportTest, viewport133) {
2418   RegisterMockedHttpURLLoad("viewport/viewport-133.html");
2419 
2420   frame_test_helpers::WebViewHelper web_view_helper;
2421   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-133.html",
2422                                     nullptr, nullptr, nullptr,
2423                                     SetViewportSettings);
2424 
2425   Page* page = web_view_helper.GetWebView()->GetPage();
2426   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2427 
2428   EXPECT_EQ(980, constraints.layout_size.Width());
2429   EXPECT_EQ(1078, constraints.layout_size.Height());
2430   EXPECT_NEAR(10.0f, constraints.initial_scale, 0.01f);
2431   EXPECT_NEAR(10.0f, constraints.minimum_scale, 0.01f);
2432   EXPECT_NEAR(10.0f, constraints.maximum_scale, 0.01f);
2433   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2434 }
2435 
TEST_F(ViewportTest,viewport134)2436 TEST_F(ViewportTest, viewport134) {
2437   RegisterMockedHttpURLLoad("viewport/viewport-134.html");
2438 
2439   frame_test_helpers::WebViewHelper web_view_helper;
2440   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-134.html",
2441                                     nullptr, nullptr, nullptr,
2442                                     SetViewportSettings);
2443 
2444   Page* page = web_view_helper.GetWebView()->GetPage();
2445   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2446 
2447   EXPECT_EQ(160, constraints.layout_size.Width());
2448   EXPECT_EQ(176, constraints.layout_size.Height());
2449   EXPECT_NEAR(2.0f, constraints.initial_scale, 0.01f);
2450   EXPECT_NEAR(2.0f, constraints.minimum_scale, 0.01f);
2451   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2452   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2453 }
2454 
TEST_F(ViewportTest,viewport135)2455 TEST_F(ViewportTest, viewport135) {
2456   RegisterMockedHttpURLLoad("viewport/viewport-135.html");
2457 
2458   frame_test_helpers::WebViewHelper web_view_helper;
2459   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-135.html",
2460                                     nullptr, nullptr, nullptr,
2461                                     SetViewportSettings);
2462 
2463   Page* page = web_view_helper.GetWebView()->GetPage();
2464   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2465 
2466   EXPECT_EQ(980, constraints.layout_size.Width());
2467   EXPECT_EQ(1078, constraints.layout_size.Height());
2468   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
2469   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
2470   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2471   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2472 }
2473 
TEST_F(ViewportTest,viewport136)2474 TEST_F(ViewportTest, viewport136) {
2475   RegisterMockedHttpURLLoad("viewport/viewport-136.html");
2476 
2477   frame_test_helpers::WebViewHelper web_view_helper;
2478   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-136.html",
2479                                     nullptr, nullptr, nullptr,
2480                                     SetViewportSettings);
2481 
2482   Page* page = web_view_helper.GetWebView()->GetPage();
2483   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2484 
2485   EXPECT_EQ(320, constraints.layout_size.Width());
2486   EXPECT_EQ(352, constraints.layout_size.Height());
2487   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2488   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2489   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2490   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2491 }
2492 
TEST_F(ViewportTest,viewport137)2493 TEST_F(ViewportTest, viewport137) {
2494   RegisterMockedHttpURLLoad("viewport/viewport-137.html");
2495 
2496   frame_test_helpers::WebViewHelper web_view_helper;
2497   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-137.html",
2498                                     nullptr, nullptr, nullptr,
2499                                     SetViewportSettings);
2500 
2501   Page* page = web_view_helper.GetWebView()->GetPage();
2502   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2503 
2504   EXPECT_EQ(980, constraints.layout_size.Width());
2505   EXPECT_EQ(1078, constraints.layout_size.Height());
2506   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
2507   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
2508   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2509   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2510 }
2511 
TEST_F(ViewportTest,viewport138)2512 TEST_F(ViewportTest, viewport138) {
2513   RegisterMockedHttpURLLoad("viewport/viewport-138.html");
2514 
2515   frame_test_helpers::WebViewHelper web_view_helper;
2516   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-138.html",
2517                                     nullptr, nullptr, nullptr,
2518                                     SetViewportSettings);
2519 
2520   Page* page = web_view_helper.GetWebView()->GetPage();
2521   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2522 
2523   EXPECT_NEAR(123.0f, constraints.layout_size.Width(), 0.01);
2524   EXPECT_NEAR(135.3f, constraints.layout_size.Height(), 0.01);
2525   EXPECT_NEAR(2.60f, constraints.initial_scale, 0.01f);
2526   EXPECT_NEAR(2.60f, constraints.minimum_scale, 0.01f);
2527   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2528   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2529 }
2530 
TEST_F(ViewportTest,viewportLegacyHandheldFriendly)2531 TEST_F(ViewportTest, viewportLegacyHandheldFriendly) {
2532   RegisterMockedHttpURLLoad("viewport/viewport-legacy-handheldfriendly.html");
2533 
2534   frame_test_helpers::WebViewHelper web_view_helper;
2535   web_view_helper.InitializeAndLoad(
2536       base_url_ + "viewport/viewport-legacy-handheldfriendly.html", nullptr,
2537       nullptr, nullptr, SetViewportSettings);
2538 
2539   Page* page = web_view_helper.GetWebView()->GetPage();
2540   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2541 
2542   EXPECT_EQ(320, constraints.layout_size.Width());
2543   EXPECT_EQ(352, constraints.layout_size.Height());
2544   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2545   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2546   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2547   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2548 }
2549 
SetQuirkViewportSettings(WebSettings * settings)2550 static void SetQuirkViewportSettings(WebSettings* settings) {
2551   SetViewportSettings(settings);
2552 
2553   // This quirk allows content attributes of meta viewport tags to be merged.
2554   settings->SetViewportMetaMergeContentQuirk(true);
2555 }
2556 
TEST_F(ViewportTest,viewportLegacyMergeQuirk1)2557 TEST_F(ViewportTest, viewportLegacyMergeQuirk1) {
2558   RegisterMockedHttpURLLoad("viewport/viewport-legacy-merge-quirk-1.html");
2559 
2560   frame_test_helpers::WebViewHelper web_view_helper;
2561   web_view_helper.InitializeAndLoad(
2562       base_url_ + "viewport/viewport-legacy-merge-quirk-1.html", nullptr,
2563       nullptr, nullptr, SetQuirkViewportSettings);
2564 
2565   Page* page = web_view_helper.GetWebView()->GetPage();
2566   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2567 
2568   EXPECT_EQ(640, constraints.layout_size.Width());
2569   EXPECT_EQ(704, constraints.layout_size.Height());
2570   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2571   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2572   EXPECT_NEAR(1.0f, constraints.maximum_scale, 0.01f);
2573   EXPECT_FALSE(page->GetViewportDescription().user_zoom);
2574 }
2575 
TEST_F(ViewportTest,viewportLegacyMergeQuirk2)2576 TEST_F(ViewportTest, viewportLegacyMergeQuirk2) {
2577   RegisterMockedHttpURLLoad("viewport/viewport-legacy-merge-quirk-2.html");
2578 
2579   frame_test_helpers::WebViewHelper web_view_helper;
2580   web_view_helper.InitializeAndLoad(
2581       base_url_ + "viewport/viewport-legacy-merge-quirk-2.html", nullptr,
2582       nullptr, nullptr, SetQuirkViewportSettings);
2583 
2584   Page* page = web_view_helper.GetWebView()->GetPage();
2585 
2586   // This quirk allows content attributes of meta viewport tags to be merged.
2587   page->GetSettings().SetViewportMetaMergeContentQuirk(true);
2588   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2589 
2590   EXPECT_EQ(500, constraints.layout_size.Width());
2591   EXPECT_EQ(550, constraints.layout_size.Height());
2592   EXPECT_NEAR(2.0f, constraints.initial_scale, 0.01f);
2593   EXPECT_NEAR(2.0f, constraints.minimum_scale, 0.01f);
2594   EXPECT_NEAR(2.0f, constraints.maximum_scale, 0.01f);
2595   EXPECT_FALSE(page->GetViewportDescription().user_zoom);
2596 }
2597 
TEST_F(ViewportTest,viewportLegacyMobileOptimizedMetaWithoutContent)2598 TEST_F(ViewportTest, viewportLegacyMobileOptimizedMetaWithoutContent) {
2599   RegisterMockedHttpURLLoad("viewport/viewport-legacy-mobileoptimized.html");
2600 
2601   frame_test_helpers::WebViewHelper web_view_helper;
2602   web_view_helper.InitializeAndLoad(
2603       base_url_ + "viewport/viewport-legacy-mobileoptimized.html", nullptr,
2604       nullptr, nullptr, SetViewportSettings);
2605 
2606   Page* page = web_view_helper.GetWebView()->GetPage();
2607 
2608   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2609 
2610   EXPECT_EQ(320, constraints.layout_size.Width());
2611   EXPECT_EQ(352, constraints.layout_size.Height());
2612   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2613   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2614   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2615   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2616 }
2617 
TEST_F(ViewportTest,viewportLegacyMobileOptimizedMetaWith0)2618 TEST_F(ViewportTest, viewportLegacyMobileOptimizedMetaWith0) {
2619   RegisterMockedHttpURLLoad("viewport/viewport-legacy-mobileoptimized-2.html");
2620 
2621   frame_test_helpers::WebViewHelper web_view_helper;
2622   web_view_helper.InitializeAndLoad(
2623       base_url_ + "viewport/viewport-legacy-mobileoptimized-2.html", nullptr,
2624       nullptr, nullptr, SetViewportSettings);
2625 
2626   Page* page = web_view_helper.GetWebView()->GetPage();
2627 
2628   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2629 
2630   EXPECT_EQ(320, constraints.layout_size.Width());
2631   EXPECT_EQ(352, constraints.layout_size.Height());
2632   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2633   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2634   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2635   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2636 }
2637 
TEST_F(ViewportTest,viewportLegacyMobileOptimizedMetaWith400)2638 TEST_F(ViewportTest, viewportLegacyMobileOptimizedMetaWith400) {
2639   RegisterMockedHttpURLLoad("viewport/viewport-legacy-mobileoptimized-2.html");
2640 
2641   frame_test_helpers::WebViewHelper web_view_helper;
2642   web_view_helper.InitializeAndLoad(
2643       base_url_ + "viewport/viewport-legacy-mobileoptimized-2.html", nullptr,
2644       nullptr, nullptr, SetViewportSettings);
2645 
2646   Page* page = web_view_helper.GetWebView()->GetPage();
2647 
2648   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2649 
2650   EXPECT_EQ(320, constraints.layout_size.Width());
2651   EXPECT_EQ(352, constraints.layout_size.Height());
2652   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2653   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2654   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2655   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2656 }
2657 
TEST_F(ViewportTest,viewportLegacyOrdering2)2658 TEST_F(ViewportTest, viewportLegacyOrdering2) {
2659   RegisterMockedHttpURLLoad("viewport/viewport-legacy-ordering-2.html");
2660 
2661   frame_test_helpers::WebViewHelper web_view_helper;
2662   web_view_helper.InitializeAndLoad(
2663       base_url_ + "viewport/viewport-legacy-ordering-2.html", nullptr, nullptr,
2664       nullptr, SetViewportSettings);
2665 
2666   Page* page = web_view_helper.GetWebView()->GetPage();
2667 
2668   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2669 
2670   EXPECT_EQ(300, constraints.layout_size.Width());
2671   EXPECT_EQ(330, constraints.layout_size.Height());
2672   EXPECT_NEAR(1.07f, constraints.initial_scale, 0.01f);
2673   EXPECT_NEAR(1.07f, constraints.minimum_scale, 0.01f);
2674   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2675   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2676 }
2677 
TEST_F(ViewportTest,viewportLegacyOrdering3)2678 TEST_F(ViewportTest, viewportLegacyOrdering3) {
2679   RegisterMockedHttpURLLoad("viewport/viewport-legacy-ordering-3.html");
2680 
2681   frame_test_helpers::WebViewHelper web_view_helper;
2682   web_view_helper.InitializeAndLoad(
2683       base_url_ + "viewport/viewport-legacy-ordering-3.html", nullptr, nullptr,
2684       nullptr, SetViewportSettings);
2685 
2686   Page* page = web_view_helper.GetWebView()->GetPage();
2687 
2688   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2689 
2690   EXPECT_EQ(300, constraints.layout_size.Width());
2691   EXPECT_EQ(330, constraints.layout_size.Height());
2692   EXPECT_NEAR(1.07f, constraints.initial_scale, 0.01f);
2693   EXPECT_NEAR(1.07f, constraints.minimum_scale, 0.01f);
2694   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2695   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2696 }
2697 
TEST_F(ViewportTest,viewportLegacyOrdering4)2698 TEST_F(ViewportTest, viewportLegacyOrdering4) {
2699   RegisterMockedHttpURLLoad("viewport/viewport-legacy-ordering-4.html");
2700 
2701   frame_test_helpers::WebViewHelper web_view_helper;
2702   web_view_helper.InitializeAndLoad(
2703       base_url_ + "viewport/viewport-legacy-ordering-4.html", nullptr, nullptr,
2704       nullptr, SetViewportSettings);
2705 
2706   Page* page = web_view_helper.GetWebView()->GetPage();
2707 
2708   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2709 
2710   EXPECT_EQ(300, constraints.layout_size.Width());
2711   EXPECT_EQ(330, constraints.layout_size.Height());
2712   EXPECT_NEAR(1.07f, constraints.initial_scale, 0.01f);
2713   EXPECT_NEAR(1.07f, constraints.minimum_scale, 0.01f);
2714   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2715   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2716 }
2717 
TEST_F(ViewportTest,viewportLegacyOrdering5)2718 TEST_F(ViewportTest, viewportLegacyOrdering5) {
2719   RegisterMockedHttpURLLoad("viewport/viewport-legacy-ordering-5.html");
2720 
2721   frame_test_helpers::WebViewHelper web_view_helper;
2722   web_view_helper.InitializeAndLoad(
2723       base_url_ + "viewport/viewport-legacy-ordering-5.html", nullptr, nullptr,
2724       nullptr, SetViewportSettings);
2725 
2726   Page* page = web_view_helper.GetWebView()->GetPage();
2727 
2728   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2729 
2730   EXPECT_EQ(320, constraints.layout_size.Width());
2731   EXPECT_EQ(352, constraints.layout_size.Height());
2732   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2733   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2734   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2735   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2736 }
2737 
TEST_F(ViewportTest,viewportLegacyOrdering6)2738 TEST_F(ViewportTest, viewportLegacyOrdering6) {
2739   RegisterMockedHttpURLLoad("viewport/viewport-legacy-ordering-6.html");
2740 
2741   frame_test_helpers::WebViewHelper web_view_helper;
2742   web_view_helper.InitializeAndLoad(
2743       base_url_ + "viewport/viewport-legacy-ordering-6.html", nullptr, nullptr,
2744       nullptr, SetViewportSettings);
2745 
2746   Page* page = web_view_helper.GetWebView()->GetPage();
2747 
2748   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2749 
2750   EXPECT_EQ(320, constraints.layout_size.Width());
2751   EXPECT_EQ(352, constraints.layout_size.Height());
2752   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2753   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2754   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2755   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2756 }
2757 
TEST_F(ViewportTest,viewportLegacyOrdering7)2758 TEST_F(ViewportTest, viewportLegacyOrdering7) {
2759   RegisterMockedHttpURLLoad("viewport/viewport-legacy-ordering-7.html");
2760 
2761   frame_test_helpers::WebViewHelper web_view_helper;
2762   web_view_helper.InitializeAndLoad(
2763       base_url_ + "viewport/viewport-legacy-ordering-7.html", nullptr, nullptr,
2764       nullptr, SetViewportSettings);
2765 
2766   Page* page = web_view_helper.GetWebView()->GetPage();
2767 
2768   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2769 
2770   EXPECT_EQ(300, constraints.layout_size.Width());
2771   EXPECT_EQ(330, constraints.layout_size.Height());
2772   EXPECT_NEAR(1.07f, constraints.initial_scale, 0.01f);
2773   EXPECT_NEAR(1.07f, constraints.minimum_scale, 0.01f);
2774   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2775   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2776 }
2777 
TEST_F(ViewportTest,viewportLegacyOrdering8)2778 TEST_F(ViewportTest, viewportLegacyOrdering8) {
2779   RegisterMockedHttpURLLoad("viewport/viewport-legacy-ordering-8.html");
2780 
2781   frame_test_helpers::WebViewHelper web_view_helper;
2782   web_view_helper.InitializeAndLoad(
2783       base_url_ + "viewport/viewport-legacy-ordering-8.html", nullptr, nullptr,
2784       nullptr, SetViewportSettings);
2785 
2786   Page* page = web_view_helper.GetWebView()->GetPage();
2787 
2788   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2789 
2790   EXPECT_EQ(300, constraints.layout_size.Width());
2791   EXPECT_EQ(330, constraints.layout_size.Height());
2792   EXPECT_NEAR(1.07f, constraints.initial_scale, 0.01f);
2793   EXPECT_NEAR(1.07f, constraints.minimum_scale, 0.01f);
2794   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2795   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2796 }
2797 
TEST_F(ViewportTest,viewportLegacyEmptyAtViewportDoesntOverrideViewportMeta)2798 TEST_F(ViewportTest, viewportLegacyEmptyAtViewportDoesntOverrideViewportMeta) {
2799   RegisterMockedHttpURLLoad("viewport/viewport-legacy-ordering-10.html");
2800 
2801   frame_test_helpers::WebViewHelper web_view_helper;
2802   web_view_helper.InitializeAndLoad(
2803       base_url_ + "viewport/viewport-legacy-ordering-10.html", nullptr, nullptr,
2804       nullptr, SetViewportSettings);
2805 
2806   Page* page = web_view_helper.GetWebView()->GetPage();
2807   PageScaleConstraints constraints = RunViewportTest(page, 800, 600);
2808 
2809   EXPECT_EQ(5000, constraints.layout_size.Width());
2810 }
2811 
TEST_F(ViewportTest,viewportLegacyDefaultValueChangedByXHTMLMP)2812 TEST_F(ViewportTest, viewportLegacyDefaultValueChangedByXHTMLMP) {
2813   RegisterMockedHttpURLLoad("viewport/viewport-legacy-xhtmlmp.html");
2814 
2815   frame_test_helpers::WebViewHelper web_view_helper;
2816   web_view_helper.InitializeAndLoad(
2817       base_url_ + "viewport/viewport-legacy-xhtmlmp.html", nullptr, nullptr,
2818       nullptr, SetViewportSettings);
2819 
2820   Page* page = web_view_helper.GetWebView()->GetPage();
2821   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2822 
2823   EXPECT_EQ(320, constraints.layout_size.Width());
2824   EXPECT_EQ(352, constraints.layout_size.Height());
2825   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2826   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2827   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2828   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2829 }
2830 
TEST_F(ViewportTest,viewportLegacyDefaultValueChangedByXHTMLMPAndOverriddenByMeta)2831 TEST_F(ViewportTest,
2832        viewportLegacyDefaultValueChangedByXHTMLMPAndOverriddenByMeta) {
2833   RegisterMockedHttpURLLoad(
2834       "viewport/viewport-legacy-xhtmlmp-misplaced-doctype.html");
2835 
2836   frame_test_helpers::WebViewHelper web_view_helper;
2837   web_view_helper.InitializeAndLoad(
2838       base_url_ + "viewport/viewport-legacy-xhtmlmp-misplaced-doctype.html",
2839       nullptr, nullptr, nullptr, SetViewportSettings);
2840 
2841   Page* page = web_view_helper.GetWebView()->GetPage();
2842   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2843 
2844   EXPECT_EQ(640, constraints.layout_size.Width());
2845   EXPECT_EQ(704, constraints.layout_size.Height());
2846   EXPECT_NEAR(0.5f, constraints.initial_scale, 0.01f);
2847   EXPECT_NEAR(0.5f, constraints.minimum_scale, 0.01f);
2848   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2849   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2850 }
2851 
TEST_F(ViewportTest,viewportLegacyXHTMLMPOrdering)2852 TEST_F(ViewportTest, viewportLegacyXHTMLMPOrdering) {
2853   RegisterMockedHttpURLLoad("viewport/viewport-legacy-xhtmlmp-ordering.html");
2854 
2855   frame_test_helpers::WebViewHelper web_view_helper;
2856   web_view_helper.InitializeAndLoad(
2857       base_url_ + "viewport/viewport-legacy-xhtmlmp-ordering.html", nullptr,
2858       nullptr, nullptr, SetViewportSettings);
2859 
2860   Page* page = web_view_helper.GetWebView()->GetPage();
2861   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2862 
2863   EXPECT_EQ(640, constraints.layout_size.Width());
2864   EXPECT_EQ(704, constraints.layout_size.Height());
2865   EXPECT_NEAR(0.5f, constraints.initial_scale, 0.01f);
2866   EXPECT_NEAR(0.5f, constraints.minimum_scale, 0.01f);
2867   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2868   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2869 }
2870 
TEST_F(ViewportTest,viewportLegacyXHTMLMPRemoveAndAdd)2871 TEST_F(ViewportTest, viewportLegacyXHTMLMPRemoveAndAdd) {
2872   RegisterMockedHttpURLLoad("viewport/viewport-legacy-xhtmlmp.html");
2873 
2874   frame_test_helpers::WebViewHelper web_view_helper;
2875   web_view_helper.InitializeAndLoad(
2876       base_url_ + "viewport/viewport-legacy-xhtmlmp.html", nullptr, nullptr,
2877       nullptr, SetViewportSettings);
2878 
2879   Page* page = web_view_helper.GetWebView()->GetPage();
2880   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2881 
2882   EXPECT_EQ(320, constraints.layout_size.Width());
2883   EXPECT_EQ(352, constraints.layout_size.Height());
2884   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2885   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2886   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2887   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2888 
2889   ExecuteScript(web_view_helper.LocalMainFrame(),
2890                 "originalDoctype = document.doctype;"
2891                 "document.removeChild(originalDoctype);");
2892 
2893   constraints = RunViewportTest(page, 320, 352);
2894 
2895   EXPECT_EQ(320, constraints.layout_size.Width());
2896   EXPECT_EQ(352, constraints.layout_size.Height());
2897   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2898   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2899   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2900   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2901 
2902   ExecuteScript(web_view_helper.LocalMainFrame(),
2903                 "document.insertBefore(originalDoctype, document.firstChild);");
2904 
2905   constraints = RunViewportTest(page, 320, 352);
2906 
2907   EXPECT_EQ(320, constraints.layout_size.Width());
2908   EXPECT_EQ(352, constraints.layout_size.Height());
2909   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2910   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2911   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
2912   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2913 }
2914 
TEST_F(ViewportTest,viewportLimitsAdjustedForNoUserScale)2915 TEST_F(ViewportTest, viewportLimitsAdjustedForNoUserScale) {
2916   RegisterMockedHttpURLLoad(
2917       "viewport/viewport-limits-adjusted-for-no-user-scale.html");
2918 
2919   frame_test_helpers::WebViewHelper web_view_helper;
2920   web_view_helper.InitializeAndLoad(
2921       base_url_ + "viewport/viewport-limits-adjusted-for-no-user-scale.html",
2922       nullptr, nullptr, nullptr, SetViewportSettings);
2923 
2924   web_view_helper.GetWebView()->MainFrameWidget()->UpdateAllLifecyclePhases(
2925       DocumentUpdateReason::kTest);
2926   Page* page = web_view_helper.GetWebView()->GetPage();
2927   PageScaleConstraints constraints = RunViewportTest(page, 10, 10);
2928 
2929   EXPECT_FALSE(page->GetViewportDescription().user_zoom);
2930   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2931   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2932 }
2933 
TEST_F(ViewportTest,viewportLimitsAdjustedForUserScale)2934 TEST_F(ViewportTest, viewportLimitsAdjustedForUserScale) {
2935   RegisterMockedHttpURLLoad(
2936       "viewport/viewport-limits-adjusted-for-user-scale.html");
2937 
2938   frame_test_helpers::WebViewHelper web_view_helper;
2939   web_view_helper.InitializeAndLoad(
2940       base_url_ + "viewport/viewport-limits-adjusted-for-user-scale.html",
2941       nullptr, nullptr, nullptr, SetViewportSettings);
2942   web_view_helper.GetWebView()->MainFrameWidget()->UpdateAllLifecyclePhases(
2943       DocumentUpdateReason::kTest);
2944   Page* page = web_view_helper.GetWebView()->GetPage();
2945   PageScaleConstraints constraints = RunViewportTest(page, 10, 10);
2946 
2947   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2948   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2949   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2950 }
2951 
2952 class ConsoleMessageWebFrameClient
2953     : public frame_test_helpers::TestWebFrameClient {
2954  public:
DidAddMessageToConsole(const WebConsoleMessage & msg,const WebString & source_name,unsigned source_line,const WebString & stack_trace)2955   void DidAddMessageToConsole(const WebConsoleMessage& msg,
2956                               const WebString& source_name,
2957                               unsigned source_line,
2958                               const WebString& stack_trace) override {
2959     messages.push_back(msg);
2960   }
2961 
2962   Vector<WebConsoleMessage> messages;
2963 };
2964 
TEST_F(ViewportTest,viewportWarnings1)2965 TEST_F(ViewportTest, viewportWarnings1) {
2966   ConsoleMessageWebFrameClient web_frame_client;
2967 
2968   RegisterMockedHttpURLLoad("viewport/viewport-warnings-1.html");
2969 
2970   frame_test_helpers::WebViewHelper web_view_helper;
2971   web_view_helper.InitializeAndLoad(
2972       base_url_ + "viewport/viewport-warnings-1.html", &web_frame_client,
2973       nullptr, nullptr, SetViewportSettings);
2974 
2975   Page* page = web_view_helper.GetWebView()->GetPage();
2976   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
2977 
2978   EXPECT_TRUE(web_frame_client.messages.IsEmpty());
2979 
2980   EXPECT_EQ(320, constraints.layout_size.Width());
2981   EXPECT_EQ(352, constraints.layout_size.Height());
2982   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
2983   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
2984   EXPECT_NEAR(2.0f, constraints.maximum_scale, 0.01f);
2985   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
2986 }
2987 
TEST_F(ViewportTest,viewportWarnings2)2988 TEST_F(ViewportTest, viewportWarnings2) {
2989   ConsoleMessageWebFrameClient web_frame_client;
2990 
2991   RegisterMockedHttpURLLoad("viewport/viewport-warnings-2.html");
2992 
2993   frame_test_helpers::WebViewHelper web_view_helper;
2994   web_view_helper.InitializeAndLoad(
2995       base_url_ + "viewport/viewport-warnings-2.html", &web_frame_client,
2996       nullptr, nullptr, SetViewportSettings);
2997 
2998   Page* page = web_view_helper.GetWebView()->GetPage();
2999   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
3000 
3001   EXPECT_EQ(1U, web_frame_client.messages.size());
3002   EXPECT_EQ(mojom::ConsoleMessageLevel::kWarning,
3003             web_frame_client.messages[0].level);
3004   EXPECT_EQ("The key \"wwidth\" is not recognized and ignored.",
3005             web_frame_client.messages[0].text);
3006 
3007   EXPECT_EQ(980, constraints.layout_size.Width());
3008   EXPECT_EQ(1078, constraints.layout_size.Height());
3009   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
3010   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
3011   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
3012   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
3013 }
3014 
TEST_F(ViewportTest,viewportWarnings3)3015 TEST_F(ViewportTest, viewportWarnings3) {
3016   ConsoleMessageWebFrameClient web_frame_client;
3017 
3018   RegisterMockedHttpURLLoad("viewport/viewport-warnings-3.html");
3019 
3020   frame_test_helpers::WebViewHelper web_view_helper;
3021   web_view_helper.InitializeAndLoad(
3022       base_url_ + "viewport/viewport-warnings-3.html", &web_frame_client,
3023       nullptr, nullptr, SetViewportSettings);
3024 
3025   Page* page = web_view_helper.GetWebView()->GetPage();
3026   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
3027 
3028   EXPECT_EQ(1U, web_frame_client.messages.size());
3029   EXPECT_EQ(mojom::ConsoleMessageLevel::kWarning,
3030             web_frame_client.messages[0].level);
3031   EXPECT_EQ(
3032       "The value \"unrecognized-width\" for key \"width\" is invalid, and has "
3033       "been ignored.",
3034       web_frame_client.messages[0].text);
3035 
3036   EXPECT_NEAR(980, constraints.layout_size.Width(), 0.01);
3037   EXPECT_NEAR(1078, constraints.layout_size.Height(), 0.01);
3038   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
3039   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
3040   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
3041   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
3042 }
3043 
TEST_F(ViewportTest,viewportWarnings4)3044 TEST_F(ViewportTest, viewportWarnings4) {
3045   ConsoleMessageWebFrameClient web_frame_client;
3046 
3047   RegisterMockedHttpURLLoad("viewport/viewport-warnings-4.html");
3048 
3049   frame_test_helpers::WebViewHelper web_view_helper;
3050   web_view_helper.InitializeAndLoad(
3051       base_url_ + "viewport/viewport-warnings-4.html", &web_frame_client,
3052       nullptr, nullptr, SetViewportSettings);
3053 
3054   Page* page = web_view_helper.GetWebView()->GetPage();
3055   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
3056 
3057   EXPECT_EQ(1U, web_frame_client.messages.size());
3058   EXPECT_EQ(mojom::ConsoleMessageLevel::kWarning,
3059             web_frame_client.messages[0].level);
3060   EXPECT_EQ(
3061       "The value \"123x456\" for key \"width\" was truncated to its numeric "
3062       "prefix.",
3063       web_frame_client.messages[0].text);
3064 
3065   EXPECT_NEAR(123.0f, constraints.layout_size.Width(), 0.01);
3066   EXPECT_NEAR(135.3f, constraints.layout_size.Height(), 0.01);
3067   EXPECT_NEAR(2.60f, constraints.initial_scale, 0.01f);
3068   EXPECT_NEAR(2.60f, constraints.minimum_scale, 0.01f);
3069   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
3070   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
3071 }
3072 
TEST_F(ViewportTest,viewportWarnings5)3073 TEST_F(ViewportTest, viewportWarnings5) {
3074   ConsoleMessageWebFrameClient web_frame_client;
3075 
3076   RegisterMockedHttpURLLoad("viewport/viewport-warnings-5.html");
3077 
3078   frame_test_helpers::WebViewHelper web_view_helper;
3079   web_view_helper.InitializeAndLoad(
3080       base_url_ + "viewport/viewport-warnings-5.html", &web_frame_client,
3081       nullptr, nullptr, SetViewportSettings);
3082 
3083   Page* page = web_view_helper.GetWebView()->GetPage();
3084   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
3085 
3086   EXPECT_EQ(1U, web_frame_client.messages.size());
3087 
3088   EXPECT_EQ(mojom::ConsoleMessageLevel::kWarning,
3089             web_frame_client.messages[0].level);
3090   EXPECT_EQ(
3091       "Error parsing a meta element's content: ';' is not a valid key-value "
3092       "pair separator. Please use ',' instead.",
3093       web_frame_client.messages[0].text);
3094 
3095   EXPECT_NEAR(320.0f, constraints.layout_size.Width(), 0.01);
3096   EXPECT_NEAR(352.0f, constraints.layout_size.Height(), 0.01);
3097   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
3098   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
3099   EXPECT_NEAR(1.0f, constraints.maximum_scale, 0.01f);
3100   EXPECT_FALSE(page->GetViewportDescription().user_zoom);
3101 }
3102 
TEST_F(ViewportTest,viewportWarnings6)3103 TEST_F(ViewportTest, viewportWarnings6) {
3104   ConsoleMessageWebFrameClient web_frame_client;
3105 
3106   RegisterMockedHttpURLLoad("viewport/viewport-warnings-6.html");
3107 
3108   frame_test_helpers::WebViewHelper web_view_helper;
3109   web_view_helper.InitializeAndLoad(
3110       base_url_ + "viewport/viewport-warnings-6.html", &web_frame_client,
3111       nullptr, nullptr, SetViewportSettings);
3112 
3113   Page* page = web_view_helper.GetWebView()->GetPage();
3114   PageScaleConstraints constraints = RunViewportTest(page, 320, 352);
3115 
3116   EXPECT_EQ(1U, web_frame_client.messages.size());
3117   EXPECT_EQ(mojom::ConsoleMessageLevel::kWarning,
3118             web_frame_client.messages[0].level);
3119   EXPECT_EQ(
3120       "The value \"\" for key \"width\" is invalid, and has been ignored.",
3121       web_frame_client.messages[0].text);
3122 
3123   EXPECT_NEAR(980, constraints.layout_size.Width(), 0.01);
3124   EXPECT_NEAR(1078, constraints.layout_size.Height(), 0.01);
3125   EXPECT_NEAR(0.33f, constraints.initial_scale, 0.01f);
3126   EXPECT_NEAR(0.33f, constraints.minimum_scale, 0.01f);
3127   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
3128   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
3129 }
3130 
TEST_F(ViewportTest,viewportWarnings7)3131 TEST_F(ViewportTest, viewportWarnings7) {
3132   ConsoleMessageWebFrameClient web_frame_client;
3133 
3134   RegisterMockedHttpURLLoad("viewport/viewport-warnings-7.html");
3135 
3136   frame_test_helpers::WebViewHelper web_view_helper;
3137   web_view_helper.InitializeAndLoad(
3138       base_url_ + "viewport/viewport-warnings-7.html", &web_frame_client,
3139       nullptr, nullptr, SetViewportSettings);
3140 
3141   Page* page = web_view_helper.GetWebView()->GetPage();
3142   RunViewportTest(page, 320, 352);
3143 
3144   EXPECT_EQ(0U, web_frame_client.messages.size());
3145 }
3146 
TEST_F(ViewportTest,viewportWarnings8)3147 TEST_F(ViewportTest, viewportWarnings8) {
3148   ConsoleMessageWebFrameClient web_frame_client;
3149 
3150   RegisterMockedHttpURLLoad("viewport/viewport-warnings-8.html");
3151 
3152   frame_test_helpers::WebViewHelper web_view_helper;
3153   web_view_helper.InitializeAndLoad(
3154       base_url_ + "viewport/viewport-warnings-8.html", &web_frame_client,
3155       nullptr, nullptr, SetViewportSettings);
3156 
3157   Page* page = web_view_helper.GetWebView()->GetPage();
3158   RunViewportTest(page, 320, 352);
3159 
3160   EXPECT_EQ(0U, web_frame_client.messages.size());
3161 }
3162 
3163 class ViewportClient : public frame_test_helpers::TestWebWidgetClient {
3164  public:
3165   // WebWidgetClient overrides.
ConvertWindowToViewport(WebFloatRect * rect)3166   void ConvertWindowToViewport(WebFloatRect* rect) override {
3167     rect->x *= device_scale_factor_;
3168     rect->y *= device_scale_factor_;
3169     rect->width *= device_scale_factor_;
3170     rect->height *= device_scale_factor_;
3171   }
3172 
set_device_scale_factor(float device_scale_factor)3173   void set_device_scale_factor(float device_scale_factor) {
3174     device_scale_factor_ = device_scale_factor;
3175   }
3176 
3177  private:
3178   float device_scale_factor_ = 1.f;
3179 };
3180 
TEST_F(ViewportTest,viewportUseZoomForDSF1)3181 TEST_F(ViewportTest, viewportUseZoomForDSF1) {
3182   ViewportClient client;
3183   client.set_device_scale_factor(3);
3184   RegisterMockedHttpURLLoad("viewport/viewport-legacy-merge-quirk-1.html");
3185 
3186   frame_test_helpers::WebViewHelper web_view_helper;
3187   web_view_helper.InitializeAndLoad(
3188       base_url_ + "viewport/viewport-legacy-merge-quirk-1.html", nullptr,
3189       nullptr, &client, SetQuirkViewportSettings);
3190 
3191   Page* page = web_view_helper.GetWebView()->GetPage();
3192   // Initial width and height must be scaled by DSF when --use-zoom-for-dsf
3193   // is enabled.
3194   PageScaleConstraints constraints = RunViewportTest(page, 960, 1056);
3195 
3196   // When --use-zoom-for-dsf is enabled,
3197   // constraints layout width == 640 * DSF = 1920
3198   EXPECT_EQ(1920, constraints.layout_size.Width());
3199   // When --use-zoom-for-dsf is enabled,
3200   // constraints layout height == 704 * DSF = 2112
3201   EXPECT_EQ(2112, constraints.layout_size.Height());
3202   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
3203   EXPECT_NEAR(1.0f, constraints.minimum_scale, 0.01f);
3204   EXPECT_NEAR(1.0f, constraints.maximum_scale, 0.01f);
3205   EXPECT_FALSE(page->GetViewportDescription().user_zoom);
3206 }
3207 
TEST_F(ViewportTest,viewportUseZoomForDSF2)3208 TEST_F(ViewportTest, viewportUseZoomForDSF2) {
3209   ViewportClient client;
3210   client.set_device_scale_factor(3);
3211   RegisterMockedHttpURLLoad("viewport/viewport-legacy-merge-quirk-2.html");
3212 
3213   frame_test_helpers::WebViewHelper web_view_helper;
3214   web_view_helper.InitializeAndLoad(
3215       base_url_ + "viewport/viewport-legacy-merge-quirk-2.html", nullptr,
3216       nullptr, &client, SetQuirkViewportSettings);
3217 
3218   Page* page = web_view_helper.GetWebView()->GetPage();
3219 
3220   // This quirk allows content attributes of meta viewport tags to be merged.
3221   page->GetSettings().SetViewportMetaMergeContentQuirk(true);
3222   // Initial width and height must be scaled by DSF when --use-zoom-for-dsf
3223   // is enabled.
3224   PageScaleConstraints constraints = RunViewportTest(page, 960, 1056);
3225 
3226   // When --use-zoom-for-dsf is enabled,
3227   // constraints layout width == 500 * DSF = 1500
3228   EXPECT_EQ(1500, constraints.layout_size.Width());
3229   // When --use-zoom-for-dsf is enabled,
3230   // constraints layout height == 550 * DSF = 1650
3231   EXPECT_EQ(1650, constraints.layout_size.Height());
3232   EXPECT_NEAR(2.0f, constraints.initial_scale, 0.01f);
3233   EXPECT_NEAR(2.0f, constraints.minimum_scale, 0.01f);
3234   EXPECT_NEAR(2.0f, constraints.maximum_scale, 0.01f);
3235   EXPECT_FALSE(page->GetViewportDescription().user_zoom);
3236 }
3237 
TEST_F(ViewportTest,viewportUseZoomForDSF3)3238 TEST_F(ViewportTest, viewportUseZoomForDSF3) {
3239   ViewportClient client;
3240   client.set_device_scale_factor(3);
3241   RegisterMockedHttpURLLoad("viewport/viewport-48.html");
3242 
3243   frame_test_helpers::WebViewHelper web_view_helper;
3244   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-48.html",
3245                                     nullptr, nullptr, &client,
3246                                     SetViewportSettings);
3247 
3248   Page* page = web_view_helper.GetWebView()->GetPage();
3249   // Initial width and height must be scaled by DSF when --use-zoom-for-dsf
3250   // is enabled.
3251   PageScaleConstraints constraints = RunViewportTest(page, 960, 1056);
3252 
3253   // When --use-zoom-for-dsf is enabled,
3254   // constraints layout width == 3000 * DSF = 9000
3255   EXPECT_EQ(9000, constraints.layout_size.Width());
3256   EXPECT_EQ(1056, constraints.layout_size.Height());
3257   EXPECT_NEAR(1.0f, constraints.initial_scale, 0.01f);
3258   EXPECT_NEAR(0.25f, constraints.minimum_scale, 0.01f);
3259   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
3260   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
3261 }
3262 
TEST_F(ViewportTest,viewportUseZoomForDSF4)3263 TEST_F(ViewportTest, viewportUseZoomForDSF4) {
3264   ViewportClient client;
3265   client.set_device_scale_factor(3);
3266   RegisterMockedHttpURLLoad("viewport/viewport-39.html");
3267 
3268   frame_test_helpers::WebViewHelper web_view_helper;
3269   web_view_helper.InitializeAndLoad(base_url_ + "viewport/viewport-39.html",
3270                                     nullptr, nullptr, &client,
3271                                     SetViewportSettings);
3272 
3273   Page* page = web_view_helper.GetWebView()->GetPage();
3274   // Initial width and height must be scaled by DSF when --use-zoom-for-dsf
3275   // is enabled.
3276   PageScaleConstraints constraints = RunViewportTest(page, 960, 1056);
3277 
3278   // When --use-zoom-for-dsf is enabled,
3279   // constraints layout width == 200 * DSF = 600
3280   EXPECT_EQ(600, constraints.layout_size.Width());
3281   // When --use-zoom-for-dsf is enabled,
3282   // constraints layout height == 700 * DSF = 2100
3283   EXPECT_EQ(2100, constraints.layout_size.Height());
3284   EXPECT_NEAR(1.6f, constraints.initial_scale, 0.01f);
3285   EXPECT_NEAR(1.6f, constraints.minimum_scale, 0.01f);
3286   EXPECT_NEAR(5.0f, constraints.maximum_scale, 0.01f);
3287   EXPECT_TRUE(page->GetViewportDescription().user_zoom);
3288 }
3289 
3290 class ViewportHistogramsTest : public SimTest {
3291  public:
3292   ViewportHistogramsTest() = default;
3293 
SetUp()3294   void SetUp() override {
3295     SimTest::SetUp();
3296 
3297     WebView().GetSettings()->SetViewportEnabled(true);
3298     WebView().GetSettings()->SetViewportMetaEnabled(true);
3299     WebView().MainFrameWidget()->Resize(WebSize(500, 600));
3300   }
3301 
UseMetaTag(const String & metaTag)3302   void UseMetaTag(const String& metaTag) {
3303     String responseText =
3304         String("<!DOCTYPE html>") + metaTag +
3305         String("<style> body { width: 2000px; height: 2000px; } </style>");
3306     RunTest(responseText);
3307   }
3308 
UseDocType(const String & docType)3309   void UseDocType(const String& docType) {
3310     String responseText =
3311         docType +
3312         String("<style> body { width: 2000px; height: 2000px; } </style>");
3313     RunTest(responseText);
3314   }
3315 
ExpectType(ViewportDescription::ViewportUMAType type)3316   void ExpectType(ViewportDescription::ViewportUMAType type) {
3317     histogram_tester_.ExpectUniqueSample("Viewport.MetaTagType",
3318                                          static_cast<int>(type), 1);
3319   }
3320 
ExpectOverviewZoom(int sample)3321   void ExpectOverviewZoom(int sample) {
3322     histogram_tester_.ExpectTotalCount("Viewport.OverviewZoom", 1);
3323     histogram_tester_.ExpectBucketCount("Viewport.OverviewZoom", sample, 1);
3324   }
3325 
ExpectTotalCount(const std::string & histogram,int count)3326   void ExpectTotalCount(const std::string& histogram, int count) {
3327     histogram_tester_.ExpectTotalCount(histogram, 0);
3328   }
3329 
3330  private:
RunTest(const String & responseText)3331   void RunTest(const String& responseText) {
3332     SimRequest request("https://example.com/test.html", "text/html");
3333     LoadURL("https://example.com/test.html");
3334     request.Complete(responseText);
3335 
3336     // Pump the task queue so the meta tag gets processed.
3337     blink::test::RunPendingTasks();
3338   }
3339 
3340   HistogramTester histogram_tester_;
3341 };
3342 
TEST_F(ViewportHistogramsTest,NoOpOnWhenViewportDisabled)3343 TEST_F(ViewportHistogramsTest, NoOpOnWhenViewportDisabled) {
3344   WebView().GetSettings()->SetViewportEnabled(false);
3345   UseMetaTag("<meta name='viewport' content='width=device-width'>");
3346 
3347   ExpectTotalCount("Viewport.MetaTagType", 0);
3348   ExpectTotalCount("Viewport.OverviewZoom", 0);
3349 }
3350 
TEST_F(ViewportHistogramsTest,TypeNone)3351 TEST_F(ViewportHistogramsTest, TypeNone) {
3352   UseMetaTag("");
3353   ExpectType(ViewportDescription::ViewportUMAType::kNoViewportTag);
3354   ExpectTotalCount("Viewport.OverviewZoom", 0);
3355 }
3356 
TEST_F(ViewportHistogramsTest,TypeDeviceWidth)3357 TEST_F(ViewportHistogramsTest, TypeDeviceWidth) {
3358   UseMetaTag("<meta name='viewport' content='width=device-width'>");
3359   ExpectType(ViewportDescription::ViewportUMAType::kDeviceWidth);
3360   ExpectTotalCount("Viewport.OverviewZoom", 0);
3361 }
3362 
TEST_F(ViewportHistogramsTest,TypeConstant)3363 TEST_F(ViewportHistogramsTest, TypeConstant) {
3364   UseMetaTag("<meta name='viewport' content='width=800'>");
3365   ExpectType(ViewportDescription::ViewportUMAType::kConstantWidth);
3366 }
3367 
TEST_F(ViewportHistogramsTest,TypeHandheldFriendlyMeta)3368 TEST_F(ViewportHistogramsTest, TypeHandheldFriendlyMeta) {
3369   UseMetaTag("<meta name='HandheldFriendly' content='true'/> ");
3370   ExpectType(ViewportDescription::ViewportUMAType::kMetaHandheldFriendly);
3371   ExpectTotalCount("Viewport.OverviewZoom", 0);
3372 }
3373 
TEST_F(ViewportHistogramsTest,TypeMobileOptimizedMeta)3374 TEST_F(ViewportHistogramsTest, TypeMobileOptimizedMeta) {
3375   UseMetaTag("<meta name='MobileOptimized' content='320'/> ");
3376   ExpectType(ViewportDescription::ViewportUMAType::kMetaMobileOptimized);
3377   ExpectTotalCount("Viewport.OverviewZoom", 0);
3378 }
3379 
TEST_F(ViewportHistogramsTest,TypeXhtml)3380 TEST_F(ViewportHistogramsTest, TypeXhtml) {
3381   UseDocType(
3382       "<!DOCTYPE html PUBLIC '-//WAPFORUM//DTD XHTML Mobile 1.1//EN' "
3383       "'http://www.openmobilealliance.org/tech/DTD/xhtml-mobile11.dtd'");
3384   ExpectType(ViewportDescription::ViewportUMAType::kXhtmlMobileProfile);
3385   ExpectTotalCount("Viewport.OverviewZoom", 0);
3386 }
3387 
TEST_F(ViewportHistogramsTest,OverviewZoom)3388 TEST_F(ViewportHistogramsTest, OverviewZoom) {
3389   UseMetaTag("<meta name='viewport' content='width=1000'>");
3390 
3391   // Since the viewport is 500px wide and the layout width is 1000px we expect
3392   // the metric to report 50%.
3393   ExpectOverviewZoom(50);
3394 }
3395 
3396 }  // namespace blink
3397