11145ef852a4e230e1f642eecd8de155f2b26bc53jkummerow@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved.
29e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org// Use of this source code is governed by a BSD-style license that can be
39e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org// found in the LICENSE file.
49e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
59e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#ifndef CHROME_BROWSER_UI_WEBUI_HELP_HELP_HANDLER_H_
69e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#define CHROME_BROWSER_UI_WEBUI_HELP_HELP_HANDLER_H_
79e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
89e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#include <string>
99e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
109e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#include "base/compiler_specific.h"
119e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#include "base/memory/weak_ptr.h"
129e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#include "base/strings/string16.h"
139e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#include "chrome/browser/ui/webui/help/version_updater.h"
149e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#include "content/public/browser/notification_observer.h"
159e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#include "content/public/browser/notification_registrar.h"
169e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#include "content/public/browser/web_ui_message_handler.h"
179e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
189e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#if defined(OS_CHROMEOS)
199e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#include "base/task/cancelable_task_tracker.h"
209e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#include "chrome/browser/chromeos/version_loader.h"
219e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#endif  // defined(OS_CHROMEOS)
229e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
239e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgnamespace base {
249e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgclass DictionaryValue;
259e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgclass ListValue;
269e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org}
279e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
289e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org// WebUI message handler for the help page.
299e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.orgclass HelpHandler : public content::WebUIMessageHandler,
309e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org                    public content::NotificationObserver {
319e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org public:
329e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  HelpHandler();
339e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  virtual ~HelpHandler();
349e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
359e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // WebUIMessageHandler implementation.
369e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  virtual void RegisterMessages() OVERRIDE;
379e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
389e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // Adds string values for the UI to |localized_strings|.
399e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  static void GetLocalizedValues(base::DictionaryValue* localized_strings);
40ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org
41ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  // NotificationObserver implementation.
42ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  virtual void Observe(int type, const content::NotificationSource& source,
43ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org                       const content::NotificationDetails& details) OVERRIDE;
44ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org
459e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // Returns the browser version as a string.
469e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  static base::string16 BuildBrowserVersionString();
479e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
489e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org private:
499e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // Initializes querying values for the page.
509e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  void OnPageLoaded(const base::ListValue* args);
519e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
529e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#if defined(OS_MACOSX)
539e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // Promotes the updater for all users.
549e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  void PromoteUpdater(const base::ListValue* args);
559e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#endif
569e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
579e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // Relaunches the browser. |args| must be empty.
589e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  void RelaunchNow(const base::ListValue* args);
599e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
60ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  // Opens the feedback dialog. |args| must be empty.
61ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  void OpenFeedbackDialog(const base::ListValue* args);
62ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org
63ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  // Opens the help page. |args| must be empty.
64ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org  void OpenHelpPage(const base::ListValue* args);
659e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
669e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#if defined(OS_CHROMEOS)
679e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // Sets the release track version.
689e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  void SetChannel(const base::ListValue* args);
699e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
709e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // Performs relaunch and powerwash.
719e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  void RelaunchAndPowerwash(const base::ListValue* args);
729e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#endif
739e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
749e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // Checks for and applies update.
759e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  void RequestUpdate(const base::ListValue* args);
769e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
779e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // Callback method which forwards status updates to the page.
789e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  void SetUpdateStatus(VersionUpdater::Status status, int progress,
79c03a1924dcc113678c0ebe58aa7d3c855a657719yangguo@chromium.org                       const base::string16& fail_message);
809e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
819e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#if defined(OS_MACOSX)
829e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // Callback method which forwards promotion state to the page.
839e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  void SetPromotionState(VersionUpdater::PromotionState state);
849e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#endif
859e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
864a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org#if defined(OS_CHROMEOS)
874a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org  // Callbacks from VersionLoader.
884a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org  void OnOSVersion(const std::string& version);
899e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  void OnOSFirmware(const std::string& firmware);
909e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  void OnCurrentChannel(const std::string& channel);
919e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  void OnTargetChannel(const std::string& channel);
929e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#endif
939e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
949e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // Specialized instance of the VersionUpdater used to update the browser.
95c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com  scoped_ptr<VersionUpdater> version_updater_;
96c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
97c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com  // Used to observe notifications.
98a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org  content::NotificationRegistrar registrar_;
99a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org
100a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org#if defined(OS_CHROMEOS)
1019e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // Handles asynchronously loading the CrOS version info.
1029e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  chromeos::VersionLoader loader_;
1039e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
1049e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  // Used to request the version.
1059e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org  base::CancelableTaskTracker tracker_;
1069e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#endif  // defined(OS_CHROMEOS)
107c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
108c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com  // Used for callbacks.
109c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com  base::WeakPtrFactory<HelpHandler> weak_factory_;
1104d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org
1114d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org  DISALLOW_COPY_AND_ASSIGN(HelpHandler);
1129e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org};
1139e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org
1149e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org#endif  // CHROME_BROWSER_UI_WEBUI_HELP_HELP_HANDLER_H_
1159e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org