15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/user_agent/user_agent.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef testing::Test WebkitGlueUserAgentTest;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsSpoofedUserAgent(const std::string& user_agent) {
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return user_agent.find("TestContentClient") == std::string::npos;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebkitGlueUserAgentTest, UserAgentSpoofingHack) {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum Platform {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NONE = 0,
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MACOSX = 1,
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WIN = 2,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    OTHER = 4,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct Expected {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* url;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int os_mask;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Expected expected[] = {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { "http://wwww.google.com", NONE },
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { "http://www.microsoft.com/getsilverlight", MACOSX },
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { "http://downloads.yahoo.co.jp/docs/silverlight/", MACOSX },
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { "http://gyao.yahoo.co.jp/", MACOSX },
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      { "http://promotion.shopping.yahoo.co.jp/", WIN },
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int os_bit = MACOSX;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int os_bit = WIN;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int os_bit = OTHER;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(expected); ++i) {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ((expected[i].os_mask & os_bit) != 0,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              IsSpoofedUserAgent(
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  webkit_glue::GetUserAgent(GURL(expected[i].url))));
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
56