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)
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/boot_times_loader.h"
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/version_loader.h"
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_store.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CrosSettings;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Fetches all info we want to show on OOBE/Login screens about system
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// version, boot times and cloud policy.
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class VersionInfoUpdater : public policy::CloudPolicyStore::Observer {
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 the enterprise info notice should be updated.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void OnEnterpriseInfoUpdated(
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        const std::string& enterprise_info) = 0;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit VersionInfoUpdater(Delegate* delegate);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~VersionInfoUpdater();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets delegate.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_delegate(Delegate* delegate) { delegate_ = delegate; }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Starts fetching version info. The delegate will be notified when update
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is received.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void StartUpdate(bool is_official_build);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // policy::CloudPolicyStore::Observer interface:
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnStoreLoaded(policy::CloudPolicyStore* store) OVERRIDE;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnStoreError(policy::CloudPolicyStore* store) OVERRIDE;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Update the version label.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateVersionLabel();
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check and update enterprise domain.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateEnterpriseInfo();
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set enterprise domain name.
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetEnterpriseInfo(const std::string& domain_name);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback from chromeos::VersionLoader giving the version.
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnVersion(const std::string& version);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Handles asynchronously loading the version.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VersionLoader version_loader_;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Handles asynchronously loading the boot times.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BootTimesLoader boot_times_loader_;
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Used to request version and boot times.
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::CancelableTaskTracker tracker_;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Information pieces for version label.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string version_text_;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Full text for the OS version label.
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string os_version_label_text_;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ScopedVector<CrosSettings::ObserverSubscription> subscriptions_;
7968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chromeos::CrosSettings* cros_settings_;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Delegate* delegate_;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Weak pointer factory so we can give our callbacks for invocation
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // at a later time without worrying that they will actually try to
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // happen after the lifetime of this object.
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::WeakPtrFactory<VersionInfoUpdater> weak_pointer_factory_;
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VersionInfoUpdater);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_VERSION_INFO_UPDATER_H_
95