version_info_updater.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_VERSION_INFO_UPDATER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_LOGIN_VERSION_INFO_UPDATER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/boot_times_loader.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/version_loader.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/cloud_policy_store.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CrosSettings;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Fetches all info we want to show on OOBE/Login screens about system
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// version, boot times and cloud policy.
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class VersionInfoUpdater : public policy::CloudPolicyStore::Observer,
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           public content::NotificationObserver {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class Delegate {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~Delegate() {}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called when OS version label should be updated.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnOSVersionLabelTextUpdated(
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const std::string& os_version_label_text) = 0;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called when boot times label should be updated.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnBootTimesLabelTextUpdated(
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const std::string& boot_times_label_text) = 0;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Called when the enterprise info notice should be updated.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnEnterpriseInfoUpdated(
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        const std::string& enterprise_info) = 0;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit VersionInfoUpdater(Delegate* delegate);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~VersionInfoUpdater();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets delegate.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_delegate(Delegate* delegate) { delegate_ = delegate; }
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Starts fetching version info. The delegate will be notified when update
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is received.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void StartUpdate(bool is_official_build);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // policy::CloudPolicyStore::Observer interface:
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnStoreLoaded(policy::CloudPolicyStore* store) OVERRIDE;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnStoreError(policy::CloudPolicyStore* store) OVERRIDE;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // content::NotificationObserver interface.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Observe(
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int type,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::NotificationSource& source,
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::NotificationDetails& details) OVERRIDE;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Update the version label.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateVersionLabel();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check and update enterprise domain.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateEnterpriseInfo();
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set enterprise domain name.
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetEnterpriseInfo(const std::string& domain_name);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback from chromeos::VersionLoader giving the version.
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnVersion(const std::string& version);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback from chromeos::InfoLoader giving the boot times.
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnBootTimes(const BootTimesLoader::BootTimes& boot_times);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Null callback from chromeos::InfoLoader.
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnBootTimesNoop(const BootTimesLoader::BootTimes& boot_times);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Handles asynchronously loading the version.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VersionLoader version_loader_;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Handles asynchronously loading the boot times.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BootTimesLoader boot_times_loader_;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Used to request version and boot times.
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CancelableTaskTracker tracker_;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Information pieces for version label.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string version_text_;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Full text for the OS version label.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string os_version_label_text_;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chromeos::CrosSettings* cros_settings_;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Delegate* delegate_;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Weak pointer factory so we can give our callbacks for invocation
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // at a later time without worrying that they will actually try to
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // happen after the lifetime of this object.
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::WeakPtrFactory<VersionInfoUpdater> weak_pointer_factory_;
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VersionInfoUpdater);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_VERSION_INFO_UPDATER_H_
107