• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 #ifndef CHROME_BROWSER_CHROMEOS_VERSION_LOADER_H_
6 #define CHROME_BROWSER_CHROMEOS_VERSION_LOADER_H_
7 
8 #include <string>
9 
10 #include "base/callback.h"
11 #include "base/gtest_prod_util.h"
12 #include "base/task/cancelable_task_tracker.h"
13 
14 namespace chromeos {
15 
16 // ChromeOSVersionLoader loads the version of Chrome OS from the file system.
17 // Loading is done asynchronously in the blocking thread pool. Once loaded,
18 // ChromeOSVersionLoader callback to a method of your choice with the version
19 // (or an empty string if the version couldn't be found).
20 // To use ChromeOSVersionLoader do the following:
21 //
22 // . In your class define a member field of type chromeos::VersionLoader and
23 //   base::CancelableTaskTracker.
24 // . Define the callback method, something like:
25 //   void OnGetChromeOSVersion(const std::string& version);
26 // . When you want the version invoke:
27 //   VersionLoader::GetVersion()
28 //
29 // This class also provides the ability to load the bios firmware using
30 //   VersionLoader::GetFirmware()
31 class VersionLoader {
32  public:
33   VersionLoader();
34   virtual ~VersionLoader();
35 
36   enum VersionFormat {
37     VERSION_SHORT,
38     VERSION_SHORT_WITH_DATE,
39     VERSION_FULL,
40   };
41 
42   // Signature
43   typedef base::Callback<void(const std::string&)> GetVersionCallback;
44   typedef base::Callback<void(const std::string&)> GetFirmwareCallback;
45 
46   // Asynchronously requests the version.
47   // If |full_version| is true version string with extra info is extracted,
48   // otherwise it's in short format x.x.xx.x.
49   base::CancelableTaskTracker::TaskId GetVersion(
50       VersionFormat format,
51       const GetVersionCallback& callback,
52       base::CancelableTaskTracker* tracker);
53 
54   base::CancelableTaskTracker::TaskId GetFirmware(
55       const GetFirmwareCallback& callback,
56       base::CancelableTaskTracker* tracker);
57 
58  private:
59   FRIEND_TEST_ALL_PREFIXES(VersionLoaderTest, ParseFirmware);
60 
61   // VersionLoader calls into the Backend in the blocking thread pool to load
62   // and extract the version.
63   class Backend : public base::RefCountedThreadSafe<Backend> {
64    public:
Backend()65     Backend() {}
66 
67     // Gets the version number from base::SysInfo. This is invoked on the
68     // blocking thread pool.
69     void GetVersion(VersionFormat format, std::string* version);
70 
71     // Calls ParseFirmware to get the firmware value. This is invoked on the
72     // blocking thread pool.
73     void GetFirmware(std::string* firmware);
74 
75    private:
76     friend class base::RefCountedThreadSafe<Backend>;
77 
~Backend()78     ~Backend() {}
79 
80     DISALLOW_COPY_AND_ASSIGN(Backend);
81   };
82 
83   // Extracts the firmware from the file.
84   static std::string ParseFirmware(const std::string& contents);
85 
86   scoped_refptr<Backend> backend_;
87 
88   DISALLOW_COPY_AND_ASSIGN(VersionLoader);
89 };
90 
91 }  // namespace chromeos
92 
93 #endif  // CHROME_BROWSER_CHROMEOS_VERSION_LOADER_H_
94