146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/task_runner_util.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/threading/worker_pool.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h" 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chromeos/system/statistics_provider.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace google_brand { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Path to file that stores the RLZ brand code on ChromeOS. 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType kRLZBrandFilePath[] = 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FILE_PATH_LITERAL("/opt/oem/etc/BRAND_CODE"); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Reads the brand code from file |kRLZBrandFilePath|. 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string ReadBrandFromFile() { 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string brand; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath brand_file_path(kRLZBrandFilePath); 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!base::ReadFileToString(brand_file_path, &brand)) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(WARNING) << "Brand code file missing: " << brand_file_path.value(); 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TrimWhitespace(brand, base::TRIM_ALL, &brand); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return brand; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Sets the brand code to |brand|. 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetBrand(const base::Closure& callback, const std::string& brand) { 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_browser_process->local_state()->SetString(prefs::kRLZBrand, brand); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback.Run(); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// True if brand code has been cleared for the current session. 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool g_brand_empty = false; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ClearBrandForCurrentSession() { 50ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DCHECK(!content::BrowserThread::IsThreadInitialized( 51ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::BrowserThread::UI) || 52ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_brand_empty = true; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string GetBrand() { 57ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DCHECK(!content::BrowserThread::IsThreadInitialized( 58ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::BrowserThread::UI) || 59ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (g_brand_empty) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return std::string(); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(g_browser_process->local_state()); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return g_browser_process->local_state()->GetString(prefs::kRLZBrand); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void InitBrand(const base::Closure& callback) { 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ::chromeos::system::StatisticsProvider* provider = 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ::chromeos::system::StatisticsProvider::GetInstance(); 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string brand; 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const bool found = provider->GetMachineStatistic( 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ::chromeos::system::kRlzBrandCodeKey, &brand); 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (found && !brand.empty()) { 73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetBrand(callback, brand); 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::PostTaskAndReplyWithResult( 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::WorkerPool::GetTaskRunner(false /* task_is_slow */).get(), 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FROM_HERE, 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&ReadBrandFromFile), 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&SetBrand, callback)); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace google_brand 86