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_UI_WEBUI_HELP_VERSION_UPDATER_CHROMEOS_H_
6#define CHROME_BROWSER_UI_WEBUI_HELP_VERSION_UPDATER_CHROMEOS_H_
7
8#include "base/compiler_specific.h"
9#include "base/memory/weak_ptr.h"
10#include "chrome/browser/ui/webui/help/version_updater.h"
11#include "chromeos/dbus/update_engine_client.h"
12
13class VersionUpdaterCros : public VersionUpdater,
14                           public chromeos::UpdateEngineClient::Observer {
15 public:
16  // VersionUpdater implementation.
17  virtual void CheckForUpdate(const StatusCallback& callback) OVERRIDE;
18  virtual void RelaunchBrowser() const OVERRIDE;
19  virtual void SetChannel(const std::string& channel,
20                          bool is_powerwash_allowed) OVERRIDE;
21  virtual void GetChannel(bool get_current_channel,
22                          const ChannelCallback& callback) OVERRIDE;
23
24  // Gets the last update status, without triggering a new check or download.
25  void GetUpdateStatus(const StatusCallback& callback);
26
27 protected:
28  friend class VersionUpdater;
29
30  // Clients must use VersionUpdater::Create().
31  VersionUpdaterCros();
32  virtual ~VersionUpdaterCros();
33
34 private:
35  // UpdateEngineClient::Observer implementation.
36  virtual void UpdateStatusChanged(
37      const chromeos::UpdateEngineClient::Status& status) OVERRIDE;
38
39  // Callback from UpdateEngineClient::RequestUpdateCheck().
40  void OnUpdateCheck(chromeos::UpdateEngineClient::UpdateCheckResult result);
41
42  // Callback used to communicate update status to the client.
43  StatusCallback callback_;
44
45  // Last state received via UpdateStatusChanged().
46  chromeos::UpdateEngineClient::UpdateStatusOperation last_operation_;
47
48  // True if an update check should be scheduled when the update engine is idle.
49  bool check_for_update_when_idle_;
50
51  base::WeakPtrFactory<VersionUpdaterCros> weak_ptr_factory_;
52
53  DISALLOW_COPY_AND_ASSIGN(VersionUpdaterCros);
54};
55
56#endif  // CHROME_BROWSER_UI_WEBUI_HELP_VERSION_UPDATER_CHROMEOS_H_
57