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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
// Copyright 2024 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/ash/system_web_apps/apps/boca_web_app_config.h"
#include "ash/constants/ash_features.h"
#include "ash/constants/ash_pref_names.h"
#include "ash/webui/boca_ui/boca_ui.h"
#include "base/version_info/channel.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/channel_info.h"
#include "chrome/common/pref_names.h"
#include "chromeos/ash/components/boca/boca_role_util.h"
#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/web_ui_data_source.h"
namespace ash {
namespace {
// Implementation of the BocaUIDelegate to expose some
// chrome functions to //chromeos.
class ChromeBocaUIDelegate : public ash::boca::BocaUIDelegate {
public:
explicit ChromeBocaUIDelegate(Profile* profile) : profile_(profile) {}
~ChromeBocaUIDelegate() override = default;
ChromeBocaUIDelegate(const ChromeBocaUIDelegate&) = delete;
ChromeBocaUIDelegate& operator=(const ChromeBocaUIDelegate&) = delete;
// ash::boca::ChromeBocaUIDelegate:
void PopulateLoadTimeData(content::WebUIDataSource* source) override {
const user_manager::User* user =
ash::BrowserContextHelper::Get()->GetUserByBrowserContext(profile_);
const PrefService* pref_service = profile_->GetPrefs();
version_info::Channel channel = chrome::GetChannel();
source->AddBoolean("isDevChannel",
channel == version_info::Channel::DEV ||
channel == version_info::Channel::UNKNOWN);
source->AddBoolean("isProducer", ash::boca_util::IsProducer(user));
source->AddBoolean("isConsumer", ash::boca_util::IsConsumer(user));
// Do not honor sub-feature flag for student as there is no way to config
// it for consumer.
source->AddBoolean(
"spotlightEnabled",
ash::boca_util::IsConsumer(user) ||
pref_service->GetBoolean(
prefs::kClassManagementToolsViewScreenEligibilitySetting));
source->AddString("appLocale", g_browser_process->GetApplicationLocale());
source->AddBoolean(
"classroomEnabled",
pref_service->GetBoolean(
prefs::kClassManagementToolsClassroomEligibilitySetting));
source->AddBoolean(
"captionEnabled",
ash::boca_util::IsConsumer(user) ||
pref_service->GetBoolean(
prefs::kClassManagementToolsCaptionEligibilitySetting));
if (features::IsBocaSpotlightEnabled()) {
source->AddString("spotlightUrlTemplate",
features::kBocaSpotlightUrlTemplate.Get());
}
source->AddBoolean("sessionControlsUpdate",
features::IsBocaLockPauseUpdateEnabled());
source->AddBoolean("navSettingsDialog",
features::IsBocaNavSettingsDialogEnabled());
source->AddBoolean("captionToggle", features::IsBocaCaptionToggleEnabled());
source->AddBoolean("spotlightNativeClientUpdate",
features::IsBocaSpotlightRobotRequesterEnabled());
source->AddBoolean("userFeedbackAllowed",
pref_service->GetBoolean(::prefs::kUserFeedbackAllowed));
}
private:
const raw_ptr<Profile> profile_;
};
} // namespace
BocaUIConfig::BocaUIConfig()
: WebUIConfig(content::kChromeUIUntrustedScheme,
ash::boca::kChromeBocaAppHost) {}
bool BocaUIConfig::IsWebUIEnabled(content::BrowserContext* browser_context) {
return ash::boca_util::IsEnabled(
ash::BrowserContextHelper::Get()->GetUserByBrowserContext(
browser_context));
}
std::unique_ptr<content::WebUIController> BocaUIConfig::CreateWebUIController(
content::WebUI* web_ui,
const GURL& url) {
auto* profile = Profile::FromWebUI(web_ui);
auto delegate = std::make_unique<ChromeBocaUIDelegate>(profile);
return std::make_unique<ash::boca::BocaUI>(
web_ui, std::move(delegate),
ash::boca_util::IsProducer(
ash::BrowserContextHelper::Get()->GetUserByBrowserContext(profile)));
}
} // namespace ash
|