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.
5 #ifndef CHROME_BROWSER_CHROMEOS_VERSION_LOADER_H_
6 #define CHROME_BROWSER_CHROMEOS_VERSION_LOADER_H_
10 #include "base/callback.h"
11 #include "base/gtest_prod_util.h"
12 #include "chrome/common/cancelable_task_tracker.h"
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:
22 // . In your class define a member field of type chromeos::VersionLoader and
23 // 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()
29 // This class also provides the ability to load the bios firmware using
30 // VersionLoader::GetFirmware()
34 virtual ~VersionLoader();
38 VERSION_SHORT_WITH_DATE
,
43 typedef base::Callback
<void(const std::string
&)> GetVersionCallback
;
44 typedef base::Callback
<void(const std::string
&)> GetFirmwareCallback
;
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 CancelableTaskTracker::TaskId
GetVersion(VersionFormat format
,
50 const GetVersionCallback
& callback
,
51 CancelableTaskTracker
* tracker
);
53 CancelableTaskTracker::TaskId
GetFirmware(const GetFirmwareCallback
& callback
,
54 CancelableTaskTracker
* tracker
);
57 FRIEND_TEST_ALL_PREFIXES(VersionLoaderTest
, ParseFirmware
);
59 // VersionLoader calls into the Backend in the blocking thread pool to load
60 // and extract the version.
61 class Backend
: public base::RefCountedThreadSafe
<Backend
> {
65 // Gets the version number from base::SysInfo. This is invoked on the
66 // blocking thread pool.
67 void GetVersion(VersionFormat format
, std::string
* version
);
69 // Calls ParseFirmware to get the firmware value. This is invoked on the
70 // blocking thread pool.
71 void GetFirmware(std::string
* firmware
);
74 friend class base::RefCountedThreadSafe
<Backend
>;
78 DISALLOW_COPY_AND_ASSIGN(Backend
);
81 // Extracts the firmware from the file.
82 static std::string
ParseFirmware(const std::string
& contents
);
84 scoped_refptr
<Backend
> backend_
;
86 DISALLOW_COPY_AND_ASSIGN(VersionLoader
);
89 } // namespace chromeos
91 #endif // CHROME_BROWSER_CHROMEOS_VERSION_LOADER_H_