14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/net/client_hints.h"
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <locale.h>
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/logging.h"
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_IOS)
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/test/scoped_locale.h"
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class ClientHintsTest : public testing::Test {
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public:
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  void UpdateScreenInfo(float pixel_ratio) {
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    client_hints_.UpdateScreenInfo(pixel_ratio);
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  };
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) protected:
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClientHints client_hints_;
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(ClientHintsTest, HintsWellFormatted) {
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  UpdateScreenInfo(1.567f);
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  std::string hint = client_hints_.GetDevicePixelRatioHeader();
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ("1.57", hint);
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Android and iOS do not support setLocale.
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_IOS)
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// TODO(bengr): Use ScopedLocal in Windows once it is supported.
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(ClientHintsTest, HintsWellFormattedWithNonEnLocale) {
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::ScopedLocale locale("fr_FR.UTF-8");
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  UpdateScreenInfo(1.567f);
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  std::string hint = client_hints_.GetDevicePixelRatioHeader();
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ("1.57", hint);
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif  // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_IOS)
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(ClientHintsTest, HintsHaveNonbogusValues) {
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  UpdateScreenInfo(-1.567f);
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  std::string hint = client_hints_.GetDevicePixelRatioHeader();
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ("", hint);
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  UpdateScreenInfo(1.567f);
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  hint = client_hints_.GetDevicePixelRatioHeader();
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ("1.57", hint);
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  UpdateScreenInfo(0.0f);
524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  hint = client_hints_.GetDevicePixelRatioHeader();
534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Hints should be last known good values.
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ("1.57", hint);
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
57