blob: 7920260c6f9488a546b656482cfd23645b5a7716 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <string>
#include "base/feature_list.h"
#include "chrome/browser/ui/webui/settings/ash/pdf_ocr_handler.h"
#include "chrome/grit/generated_resources.h"
#include "components/services/screen_ai/public/cpp/screen_ai_install_state.h"
#include "ui/accessibility/accessibility_features.h"
#include "ui/base/l10n/l10n_util.h"
namespace {
constexpr char kPdfOcrStateChangedEventName[] = "pdf-ocr-state-changed";
constexpr char kPdfOcrDownloadingProgressChangedEventName[] =
"pdf-ocr-downloading-progress-changed";
} // namespace
namespace settings {
PdfOcrHandler::PdfOcrHandler() {
DCHECK(base::FeatureList::IsEnabled(features::kPdfOcr));
}
PdfOcrHandler::~PdfOcrHandler() {
screen_ai::ScreenAIInstallState::GetInstance()->RemoveObserver(this);
}
void PdfOcrHandler::RegisterMessages() {
VLOG(2) << "Registering a UI handler for the PDF OCR toggle on Settings";
web_ui()->RegisterMessageCallback(
"pdfOcrSectionReady",
base::BindRepeating(&PdfOcrHandler::HandlePdfOcrSectionReady,
base::Unretained(this)));
}
void PdfOcrHandler::OnJavascriptAllowed() {
screen_ai::ScreenAIInstallState::GetInstance()->AddObserver(this);
}
void PdfOcrHandler::OnJavascriptDisallowed() {
screen_ai::ScreenAIInstallState::GetInstance()->RemoveObserver(this);
}
void PdfOcrHandler::HandlePdfOcrSectionReady(const base::Value::List& args) {
AllowJavascript();
}
void PdfOcrHandler::DownloadProgressChanged(double progress) {
const int progress_num = progress * 100;
VLOG(2) << "Downloading progress: " << progress_num << "%";
FireWebUIListener(kPdfOcrDownloadingProgressChangedEventName,
base::Value(progress_num));
}
void PdfOcrHandler::StateChanged(screen_ai::ScreenAIInstallState::State state) {
base::Value state_value = base::Value(static_cast<int>(state));
FireWebUIListener(kPdfOcrStateChangedEventName, state_value);
}
} // namespace settings