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_UI_WEBUI_HELP_VERSION_UPDATER_CHROMEOS_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_HELP_VERSION_UPDATER_CHROMEOS_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/help/version_updater.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/update_engine_client.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VersionUpdaterCros : public VersionUpdater,
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           public chromeos::UpdateEngineClient::Observer {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // VersionUpdater implementation.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void CheckForUpdate(const StatusCallback& callback) OVERRIDE;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RelaunchBrowser() const OVERRIDE;
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void SetChannel(const std::string& channel,
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                          bool is_powerwash_allowed) OVERRIDE;
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void GetChannel(bool get_current_channel,
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                          const ChannelCallback& callback) OVERRIDE;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Gets the last update status, without triggering a new check or download.
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void GetUpdateStatus(const StatusCallback& callback);
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class VersionUpdater;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Clients must use VersionUpdater::Create().
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VersionUpdaterCros();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~VersionUpdaterCros();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // UpdateEngineClient::Observer implementation.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateStatusChanged(
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const chromeos::UpdateEngineClient::Status& status) OVERRIDE;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback from UpdateEngineClient::RequestUpdateCheck().
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnUpdateCheck(chromeos::UpdateEngineClient::UpdateCheckResult result);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback used to communicate update status to the client.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StatusCallback callback_;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Last state received via UpdateStatusChanged().
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chromeos::UpdateEngineClient::UpdateStatusOperation last_operation_;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // True if an update check should be scheduled when the update engine is idle.
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool check_for_update_when_idle_;
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::WeakPtrFactory<VersionUpdaterCros> weak_ptr_factory_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VersionUpdaterCros);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_WEBUI_HELP_VERSION_UPDATER_CHROMEOS_H_
57