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