blob: 9dc70fc836a094ae7ce4757e6b1df38b2ec7ce62 [file] [log] [blame]
Demetrios Papadopouloseec18702019-12-06 21:54:391// Copyright 2019 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
Demetrios Papadopoulos4ba6c9a62019-12-07 03:26:015#ifndef CHROME_BROWSER_UI_WEBUI_COMPONENTS_COMPONENTS_HANDLER_H_
6#define CHROME_BROWSER_UI_WEBUI_COMPONENTS_COMPONENTS_HANDLER_H_
Demetrios Papadopouloseec18702019-12-06 21:54:397
8#include <memory>
9#include <string>
10
Keishi Hattori0e45c022021-11-27 09:25:5211#include "base/memory/raw_ptr.h"
Sigurdur Asgeirssonecfc6da02021-01-07 19:05:4212#include "base/scoped_observation.h"
Xiaohan Wange9439fd2022-01-18 21:00:3113#include "build/build_config.h"
Demetrios Papadopouloseec18702019-12-06 21:54:3914#include "components/component_updater/component_updater_service.h"
15#include "components/update_client/update_client.h"
Demetrios Papadopouloseec18702019-12-06 21:54:3916#include "content/public/browser/web_ui_message_handler.h"
17
Demetrios Papadopouloseec18702019-12-06 21:54:3918// The handler for Javascript messages for the chrome://components/ page.
19class ComponentsHandler : public content::WebUIMessageHandler,
20 public component_updater::ServiceObserver {
21 public:
Dan Beam6599d5b2020-01-06 22:16:4722 ComponentsHandler(
23 component_updater::ComponentUpdateService* component_updater);
Demetrios Papadopouloseec18702019-12-06 21:54:3924 ComponentsHandler(const ComponentsHandler&) = delete;
25 ComponentsHandler& operator=(const ComponentsHandler&) = delete;
26 ~ComponentsHandler() override;
27
28 // WebUIMessageHandler implementation.
29 void RegisterMessages() override;
30 void OnJavascriptAllowed() override;
31 void OnJavascriptDisallowed() override;
32
33 // Callback for the "requestComponentsData" message.
Maks Orlovich9fef84fc2022-07-01 23:06:5734 void HandleRequestComponentsData(const base::Value::List& args);
Demetrios Papadopouloseec18702019-12-06 21:54:3935
36 // Callback for the "checkUpdate" message.
Maks Orlovich9fef84fc2022-07-01 23:06:5737 void HandleCheckUpdate(const base::Value::List& args);
Demetrios Papadopouloseec18702019-12-06 21:54:3938
39 // ServiceObserver implementation.
40 void OnEvent(Events event, const std::string& id) override;
41
Xiaohan Wange9439fd2022-01-18 21:00:3142#if BUILDFLAG(IS_CHROMEOS)
Stefan Kuhned6672382021-12-08 00:54:2243 // Callback for the "crosUrlComponentsRedirect" message.
Maks Orlovich9fef84fc2022-07-01 23:06:5744 void HandleCrosUrlComponentsRedirect(const base::Value::List& args);
Stefan Kuhned6672382021-12-08 00:54:2245#endif
46
Demetrios Papadopouloseec18702019-12-06 21:54:3947 private:
Jan Wilken Dörrie3f97e292021-03-11 18:07:1448 static std::u16string ComponentEventToString(Events event);
49 static std::u16string ServiceStatusToString(
Demetrios Papadopouloseec18702019-12-06 21:54:3950 update_client::ComponentState state);
Dan Beam6599d5b2020-01-06 22:16:4751
52 std::unique_ptr<base::ListValue> LoadComponents();
53 void OnDemandUpdate(const std::string& component_id);
54
55 // Weak pointer; injected for testing.
Keishi Hattori0e45c022021-11-27 09:25:5256 const raw_ptr<component_updater::ComponentUpdateService> component_updater_;
Demetrios Papadopouloseec18702019-12-06 21:54:3957
Sigurdur Asgeirssonecfc6da02021-01-07 19:05:4258 base::ScopedObservation<component_updater::ComponentUpdateService,
59 component_updater::ComponentUpdateService::Observer>
60 observation_{this};
Demetrios Papadopouloseec18702019-12-06 21:54:3961};
62
Demetrios Papadopoulos4ba6c9a62019-12-07 03:26:0163#endif // CHROME_BROWSER_UI_WEBUI_COMPONENTS_COMPONENTS_HANDLER_H_