// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_UI_WEBUI_OPTIONS_ABOUT_PAGE_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_OPTIONS_ABOUT_PAGE_HANDLER_H_

#include <string>

#include "chrome/browser/ui/webui/options/options_ui.h"

#if defined(OS_CHROMEOS)
#include "chrome/browser/chromeos/cros/update_library.h"
#include "chrome/browser/chromeos/version_loader.h"
#endif

// ChromeOS about page UI handler.
class AboutPageHandler : public OptionsPageUIHandler {
 public:
  AboutPageHandler();
  virtual ~AboutPageHandler();

  // OptionsPageUIHandler implementation.
  virtual void GetLocalizedValues(DictionaryValue* localized_strings);
  virtual void RegisterMessages();

 private:
  // The function is called from JavaScript when the about page is ready.
  void PageReady(const ListValue* args);

  // The function is called from JavaScript to set the release track like
  // "beta-channel" and "dev-channel".
  void SetReleaseTrack(const ListValue* args);

#if defined(OS_CHROMEOS)
  // Initiates update check.
  void CheckNow(const ListValue* args);

  // Restarts the system.
  void RestartNow(const ListValue* args);

  // Callback from chromeos::VersionLoader giving the version.
  void OnOSVersion(chromeos::VersionLoader::Handle handle,
                   std::string version);
  void OnOSFirmware(chromeos::VersionLoader::Handle handle,
                    std::string firmware);
  void UpdateStatus(const chromeos::UpdateLibrary::Status& status);

  // UpdateEngine Callback handler.
  static void UpdateSelectedChannel(void* user_data, const char* channel);

  // Handles asynchronously loading the version.
  chromeos::VersionLoader loader_;

  // Used to request the version.
  CancelableRequestConsumer consumer_;

  // Update Observer
  class UpdateObserver;
  scoped_ptr<UpdateObserver> update_observer_;

  int progress_;
  bool sticky_;
  bool started_;
#endif

  DISALLOW_COPY_AND_ASSIGN(AboutPageHandler);
};

#endif  // CHROME_BROWSER_UI_WEBUI_OPTIONS_ABOUT_PAGE_HANDLER_H_