1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/optimization_guide/optimization_guide_internals_ui.h"
#include <memory>
#include <vector>
#include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
#include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "components/grit/optimization_guide_internals_resources.h"
#include "components/grit/optimization_guide_internals_resources_map.h"
#include "components/optimization_guide/core/prediction_manager.h"
#include "components/optimization_guide/optimization_guide_internals/webui/optimization_guide_internals.mojom.h"
#include "components/optimization_guide/optimization_guide_internals/webui/optimization_guide_internals_page_handler_impl.h"
// static
OptimizationGuideInternalsUI*
OptimizationGuideInternalsUI::MaybeCreateOptimizationGuideInternalsUI(
content::WebUI* web_ui,
SetupWebUIDataSourceCallback set_up_data_source_callback) {
Profile* profile = Profile::FromWebUI(web_ui);
auto* service = OptimizationGuideKeyedServiceFactory::GetForProfile(profile);
if (!service)
return nullptr;
return new OptimizationGuideInternalsUI(
web_ui, std::move(set_up_data_source_callback));
}
OptimizationGuideInternalsUI::OptimizationGuideInternalsUI(
content::WebUI* web_ui,
SetupWebUIDataSourceCallback set_up_data_source_callback)
: MojoWebUIController(web_ui, /*enable_chrome_send=*/true) {
std::move(set_up_data_source_callback)
.Run(base::make_span(kOptimizationGuideInternalsResources,
kOptimizationGuideInternalsResourcesSize),
IDR_OPTIMIZATION_GUIDE_INTERNALS_OPTIMIZATION_GUIDE_INTERNALS_HTML);
}
OptimizationGuideInternalsUI::~OptimizationGuideInternalsUI() = default;
void OptimizationGuideInternalsUI::BindInterface(
mojo::PendingReceiver<
optimization_guide_internals::mojom::PageHandlerFactory> receiver) {
// TODO(https://crbug.com/1297362): Remove the reset which is needed now since
// |this| is reused on internals page reloads.
optimization_guide_internals_page_factory_receiver_.reset();
optimization_guide_internals_page_factory_receiver_.Bind(std::move(receiver));
}
void OptimizationGuideInternalsUI::CreatePageHandler(
mojo::PendingRemote<optimization_guide_internals::mojom::Page> page) {
Profile* profile = Profile::FromWebUI(web_ui());
auto* service = OptimizationGuideKeyedServiceFactory::GetForProfile(profile);
DCHECK(service);
OptimizationGuideLogger* optimization_guide_logger =
service->GetOptimizationGuideLogger();
optimization_guide_internals_page_handler_ =
std::make_unique<OptimizationGuideInternalsPageHandlerImpl>(
std::move(page), optimization_guide_logger);
}
void OptimizationGuideInternalsUI::RequestDownloadedModelsInfo(
RequestDownloadedModelsInfoCallback callback) {
Profile* profile = Profile::FromWebUI(web_ui());
auto* service = OptimizationGuideKeyedServiceFactory::GetForProfile(profile);
DCHECK(service);
optimization_guide::PredictionManager* prediction_manager =
service->GetPredictionManager();
std::vector<optimization_guide_internals::mojom::DownloadedModelInfoPtr>
downloaded_models_info =
prediction_manager->GetDownloadedModelsInfoForWebUI();
std::move(callback).Run(std::move(downloaded_models_info));
}
WEB_UI_CONTROLLER_TYPE_IMPL(OptimizationGuideInternalsUI)
|