Home | History | Annotate | Download | only in google
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/basictypes.h"
      6 #include "base/bind.h"
      7 #include "base/file_util.h"
      8 #include "base/files/file_path.h"
      9 #include "base/logging.h"
     10 #include "base/prefs/pref_service.h"
     11 #include "base/strings/string_util.h"
     12 #include "base/task_runner_util.h"
     13 #include "base/threading/worker_pool.h"
     14 #include "chrome/browser/browser_process.h"
     15 #include "chrome/common/pref_names.h"
     16 #include "content/public/browser/browser_thread.h"
     17 
     18 namespace google_util {
     19 namespace chromeos {
     20 
     21 namespace {
     22 
     23 // Path to file that stores the RLZ brand code on ChromeOS.
     24 const base::FilePath::CharType kRLZBrandFilePath[] =
     25     FILE_PATH_LITERAL("/opt/oem/etc/BRAND_CODE");
     26 
     27 // Reads the brand code from file |kRLZBrandFilePath|.
     28 std::string ReadBrandFromFile() {
     29   std::string brand;
     30   base::FilePath brand_file_path(kRLZBrandFilePath);
     31   if (!file_util::ReadFileToString(brand_file_path, &brand))
     32     LOG(WARNING) << "Brand code file missing: " << brand_file_path.value();
     33   TrimWhitespace(brand, TRIM_ALL, &brand);
     34   return brand;
     35 }
     36 
     37 // Sets the brand code to |brand|.
     38 void SetBrand(const base::Closure& callback, const std::string& brand) {
     39   g_browser_process->local_state()->SetString(prefs::kRLZBrand, brand);
     40   callback.Run();
     41 }
     42 
     43 // True if brand code has been cleared for the current session.
     44 bool g_brand_empty = false;
     45 
     46 }  // namespace
     47 
     48 void ClearBrandForCurrentSession() {
     49   DCHECK(!content::BrowserThread::IsThreadInitialized(
     50              content::BrowserThread::UI) ||
     51          content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
     52   g_brand_empty = true;
     53 }
     54 
     55 std::string GetBrand() {
     56   DCHECK(!content::BrowserThread::IsThreadInitialized(
     57              content::BrowserThread::UI) ||
     58          content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
     59   if (g_brand_empty)
     60     return std::string();
     61   DCHECK(g_browser_process->local_state());
     62   return g_browser_process->local_state()->GetString(prefs::kRLZBrand);
     63 }
     64 
     65 void SetBrandFromFile(const base::Closure& callback) {
     66   base::PostTaskAndReplyWithResult(
     67       base::WorkerPool::GetTaskRunner(false /* task_is_slow */).get(),
     68       FROM_HERE,
     69       base::Bind(&ReadBrandFromFile),
     70       base::Bind(&SetBrand, callback));
     71 }
     72 
     73 }  // namespace chromeos
     74 }  // namespace google_util
     75