146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/google/google_brand.h" 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <string> 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/strings/string_util.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/strings/utf_string_conversions.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/installer/util/google_update_settings.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_MACOSX) 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/mac/keystone_glue.h" 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#elif defined(OS_CHROMEOS) 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/google/google_brand_chromeos.h" 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Helpers -------------------------------------------------------------------- 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace { 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char* g_brand_for_testing = NULL; 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace google_brand { 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Global functions ----------------------------------------------------------- 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_WIN) 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool GetBrand(std::string* brand) { 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (g_brand_for_testing) { 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) brand->assign(g_brand_for_testing); 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::string16 brand16; 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool ret = GoogleUpdateSettings::GetBrand(&brand16); 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (ret) 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) brand->assign(base::UTF16ToASCII(brand16)); 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return ret; 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool GetReactivationBrand(std::string* brand) { 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::string16 brand16; 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool ret = GoogleUpdateSettings::GetReactivationBrand(&brand16); 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (ret) 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) brand->assign(base::UTF16ToASCII(brand16)); 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return ret; 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool GetBrand(std::string* brand) { 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (g_brand_for_testing) { 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) brand->assign(g_brand_for_testing); 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_MACOSX) 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) brand->assign(keystone_glue::BrandCode()); 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#elif defined(OS_CHROMEOS) 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) brand->assign(google_brand::chromeos::GetBrand()); 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) brand->clear(); 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool GetReactivationBrand(std::string* brand) { 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) brand->clear(); 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool IsOrganic(const std::string& brand) { 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_MACOSX) 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (brand.empty()) { 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // An empty brand string on Mac is used for channels other than stable, 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // which are always organic. 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const char* const kBrands[] = { 9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "CHCA", "CHCB", "CHCG", "CHCH", "CHCI", "CHCJ", "CHCK", "CHCL", 9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "CHFO", "CHFT", "CHHS", "CHHM", "CHMA", "CHMB", "CHME", "CHMF", 9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "CHMG", "CHMH", "CHMI", "CHMQ", "CHMV", "CHNB", "CHNC", "CHNG", 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "CHNH", "CHNI", "CHOA", "CHOB", "CHOC", "CHON", "CHOO", "CHOP", 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "CHOQ", "CHOR", "CHOS", "CHOT", "CHOU", "CHOX", "CHOY", "CHOZ", 9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "CHPD", "CHPE", "CHPF", "CHPG", "ECBA", "ECBB", "ECDA", "ECDB", 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "ECSA", "ECSB", "ECVA", "ECVB", "ECWA", "ECWB", "ECWC", "ECWD", 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "ECWE", "ECWF", "EUBB", "EUBC", "GGLA", "GGLS" 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) }; 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const char* const* end = &kBrands[arraysize(kBrands)]; 10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const char* const* found = std::find(&kBrands[0], end, brand); 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (found != end) 10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return StartsWithASCII(brand, "EUB", true) || 10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) StartsWithASCII(brand, "EUC", true) || 10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) StartsWithASCII(brand, "GGR", true); 10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool IsOrganicFirstRun(const std::string& brand) { 11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_MACOSX) 11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (brand.empty()) { 11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // An empty brand string on Mac is used for channels other than stable, 11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // which are always organic. 11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 11746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 11846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return StartsWithASCII(brand, "GG", true) || 12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) StartsWithASCII(brand, "EU", true); 12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool IsInternetCafeBrandCode(const std::string& brand) { 12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const char* const kBrands[] = { 12646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "CHIQ", "CHSG", "HLJY", "NTMO", "OOBA", "OOBB", "OOBC", "OOBD", "OOBE", 12746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "OOBF", "OOBG", "OOBH", "OOBI", "OOBJ", "IDCM", 12846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) }; 12946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const char* const* end = &kBrands[arraysize(kBrands)]; 13046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const char* const* found = std::find(&kBrands[0], end, brand); 13146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return found != end; 13246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 13346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 13446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// BrandForTesting ------------------------------------------------------------ 13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)BrandForTesting::BrandForTesting(const std::string& brand) : brand_(brand) { 13746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(g_brand_for_testing == NULL); 13846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) g_brand_for_testing = brand_.c_str(); 13946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 14046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 14146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)BrandForTesting::~BrandForTesting() { 14246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) g_brand_for_testing = NULL; 14346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 14446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 14546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 14646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace google_brand 147