blob: d3d75ff366c42e2c7821eb939c2febdde2a49c72 [file] [log] [blame]
Avi Drissman4a8573c2022-09-09 19:35:541// Copyright 2019 The Chromium Authors
Demetrios Papadopouloseec18702019-12-06 21:54:392// 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.
Joshua Pawlicki2c20c792024-09-27 13:28:1440 void OnEvent(const update_client::CrxUpdateItem& item) override;
Demetrios Papadopouloseec18702019-12-06 21:54:3941
42 private:
Jan Wilken Dörrie3f97e292021-03-11 18:07:1443 static std::u16string ServiceStatusToString(
Demetrios Papadopouloseec18702019-12-06 21:54:3944 update_client::ComponentState state);
Dan Beam6599d5b2020-01-06 22:16:4745
Claudio DeSouzab9f4fced2022-08-10 11:11:4946 base::Value::List LoadComponents();
Dan Beam6599d5b2020-01-06 22:16:4747 void OnDemandUpdate(const std::string& component_id);
48
49 // Weak pointer; injected for testing.
Keishi Hattori0e45c022021-11-27 09:25:5250 const raw_ptr<component_updater::ComponentUpdateService> component_updater_;
Demetrios Papadopouloseec18702019-12-06 21:54:3951
Sigurdur Asgeirssonecfc6da02021-01-07 19:05:4252 base::ScopedObservation<component_updater::ComponentUpdateService,
53 component_updater::ComponentUpdateService::Observer>
54 observation_{this};
Demetrios Papadopouloseec18702019-12-06 21:54:3955};
56
Demetrios Papadopoulos4ba6c9a62019-12-07 03:26:0157#endif // CHROME_BROWSER_UI_WEBUI_COMPONENTS_COMPONENTS_HANDLER_H_