version_info_updater.h revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
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#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_VERSION_INFO_UPDATER_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_VERSION_INFO_UPDATER_H_
7
8#include <string>
9
10#include "base/memory/scoped_ptr.h"
11#include "base/memory/weak_ptr.h"
12#include "chrome/browser/chromeos/boot_times_loader.h"
13#include "chrome/browser/chromeos/settings/cros_settings.h"
14#include "chrome/browser/chromeos/version_loader.h"
15#include "chrome/browser/policy/cloud/cloud_policy_store.h"
16
17namespace chromeos {
18
19class CrosSettings;
20
21// Fetches all info we want to show on OOBE/Login screens about system
22// version, boot times and cloud policy.
23class VersionInfoUpdater : public policy::CloudPolicyStore::Observer {
24 public:
25  class Delegate {
26   public:
27    virtual ~Delegate() {}
28
29    // Called when OS version label should be updated.
30    virtual void OnOSVersionLabelTextUpdated(
31        const std::string& os_version_label_text) = 0;
32
33    // Called when the enterprise info notice should be updated.
34    virtual void OnEnterpriseInfoUpdated(
35        const std::string& enterprise_info) = 0;
36  };
37
38  explicit VersionInfoUpdater(Delegate* delegate);
39  virtual ~VersionInfoUpdater();
40
41  // Sets delegate.
42  void set_delegate(Delegate* delegate) { delegate_ = delegate; }
43
44  // Starts fetching version info. The delegate will be notified when update
45  // is received.
46  void StartUpdate(bool is_official_build);
47
48 private:
49  // policy::CloudPolicyStore::Observer interface:
50  virtual void OnStoreLoaded(policy::CloudPolicyStore* store) OVERRIDE;
51  virtual void OnStoreError(policy::CloudPolicyStore* store) OVERRIDE;
52
53  // Update the version label.
54  void UpdateVersionLabel();
55
56  // Check and update enterprise domain.
57  void UpdateEnterpriseInfo();
58
59  // Set enterprise domain name.
60  void SetEnterpriseInfo(const std::string& domain_name);
61
62  // Callback from chromeos::VersionLoader giving the version.
63  void OnVersion(const std::string& version);
64
65  // Handles asynchronously loading the version.
66  VersionLoader version_loader_;
67  // Handles asynchronously loading the boot times.
68  BootTimesLoader boot_times_loader_;
69  // Used to request version and boot times.
70  CancelableTaskTracker tracker_;
71
72  // Information pieces for version label.
73  std::string version_text_;
74
75  // Full text for the OS version label.
76  std::string os_version_label_text_;
77
78  ScopedVector<CrosSettings::ObserverSubscription> subscriptions_;
79
80  chromeos::CrosSettings* cros_settings_;
81
82  Delegate* delegate_;
83
84  // Weak pointer factory so we can give our callbacks for invocation
85  // at a later time without worrying that they will actually try to
86  // happen after the lifetime of this object.
87  base::WeakPtrFactory<VersionInfoUpdater> weak_pointer_factory_;
88
89  DISALLOW_COPY_AND_ASSIGN(VersionInfoUpdater);
90};
91
92}  // namespace chromeos
93
94#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_VERSION_INFO_UPDATER_H_
95