1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/net/client_hints.h"
6
7 #include <locale.h>
8
9 #include "base/logging.h"
10 #if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_IOS)
11 #include "base/test/scoped_locale.h"
12 #endif
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 class ClientHintsTest : public testing::Test {
16 public:
UpdateScreenInfo(float pixel_ratio)17 void UpdateScreenInfo(float pixel_ratio) {
18 client_hints_.UpdateScreenInfo(pixel_ratio);
19 };
20
21 protected:
22 ClientHints client_hints_;
23 };
24
TEST_F(ClientHintsTest,HintsWellFormatted)25 TEST_F(ClientHintsTest, HintsWellFormatted) {
26 UpdateScreenInfo(1.567f);
27 std::string hint = client_hints_.GetDevicePixelRatioHeader();
28 EXPECT_EQ("1.57", hint);
29 }
30
31 // Android and iOS do not support setLocale.
32 #if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_IOS)
33 // TODO(bengr): Use ScopedLocal in Windows once it is supported.
TEST_F(ClientHintsTest,HintsWellFormattedWithNonEnLocale)34 TEST_F(ClientHintsTest, HintsWellFormattedWithNonEnLocale) {
35 base::ScopedLocale locale("fr_FR.UTF-8");
36 UpdateScreenInfo(1.567f);
37 std::string hint = client_hints_.GetDevicePixelRatioHeader();
38 EXPECT_EQ("1.57", hint);
39 }
40 #endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_IOS)
41
TEST_F(ClientHintsTest,HintsHaveNonbogusValues)42 TEST_F(ClientHintsTest, HintsHaveNonbogusValues) {
43 UpdateScreenInfo(-1.567f);
44 std::string hint = client_hints_.GetDevicePixelRatioHeader();
45 EXPECT_EQ("", hint);
46
47 UpdateScreenInfo(1.567f);
48 hint = client_hints_.GetDevicePixelRatioHeader();
49 EXPECT_EQ("1.57", hint);
50
51 UpdateScreenInfo(0.0f);
52 hint = client_hints_.GetDevicePixelRatioHeader();
53 // Hints should be last known good values.
54 EXPECT_EQ("1.57", hint);
55 }
56
57