#include "chrome/browser/screen_ai/screen_ai_service_router.h"
#include <utility>
#include <vector>
#include "base/containers/contains.h"
#include "base/containers/flat_map.h"
#include "base/debug/alias.h"
#include "base/debug/dump_without_crashing.h"
#include "base/files/file.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/functional/bind.h"
#include "base/location.h"
#include "base/metrics/histogram_functions.h"
#include "base/strings/string_split.h"
#include "base/strings/stringprintf.h"
#include "base/task/thread_pool.h"
#include "chrome/browser/screen_ai/screen_ai_install_state.h"
#include "content/public/browser/network_service_instance.h"
#include "content/public/browser/service_process_host.h"
#include "content/public/browser/service_process_host_passkeys.h"
#include "mojo/public/mojom/base/file_path.mojom.h"
#include "services/network/public/mojom/network_change_manager.mojom.h"
#include "services/screen_ai/public/cpp/utilities.h"
#include "ui/accessibility/accessibility_features.h"
#if BUILDFLAG(IS_WIN)
#include "base/strings/utf_string_conversions.h"
#endif
namespace {
enum class ComponentAvailability { … };
bool IsModelFileContentReadable(base::File& file) { … }
const base::FilePath::CharType kMainContentExtractionFilesList[] = …);
const base::FilePath::CharType kOcrFilesList[] = …);
class ComponentFiles { … };
ComponentFiles::ComponentFiles(
const base::FilePath& library_binary_path,
const base::FilePath::CharType* files_list_file_name)
: … { … }
std::unique_ptr<ComponentFiles> ComponentFiles::Load(
const base::FilePath::CharType* files_list_file_name) { … }
void RecordComponentAvailability(bool available) { … }
}
namespace screen_ai {
ScreenAIServiceRouter::ScreenAIServiceRouter() = default;
ScreenAIServiceRouter::~ScreenAIServiceRouter() = default;
std::optional<bool> ScreenAIServiceRouter::GetServiceState(Service service) { … }
void ScreenAIServiceRouter::GetServiceStateAsync(
Service service,
ServiceStateCallback callback) { … }
std::set<ScreenAIServiceRouter::Service>
ScreenAIServiceRouter::GetAllPendingStatusServices() { … }
void ScreenAIServiceRouter::StateChanged(ScreenAIInstallState::State state) { … }
void ScreenAIServiceRouter::OnScreenAIServiceDisconnected() { … }
void ScreenAIServiceRouter::CallPendingStatusRequests(Service service,
bool successful) { … }
void ScreenAIServiceRouter::BindScreenAIAnnotator(
mojo::PendingReceiver<mojom::ScreenAIAnnotator> receiver) { … }
void ScreenAIServiceRouter::BindMainContentExtractor(
mojo::PendingReceiver<mojom::Screen2xMainContentExtractor> receiver) { … }
void ScreenAIServiceRouter::LaunchIfNotRunning() { … }
void ScreenAIServiceRouter::InitializeServiceIfNeeded(Service service) { … }
void ScreenAIServiceRouter::InitializeOCR(
base::TimeTicks request_start_time,
mojo::PendingReceiver<mojom::OCRService> receiver,
std::unique_ptr<ComponentFiles> component_files) { … }
void ScreenAIServiceRouter::InitializeMainContentExtraction(
base::TimeTicks request_start_time,
mojo::PendingReceiver<mojom::MainContentExtractionService> receiver,
std::unique_ptr<ComponentFiles> component_files) { … }
void ScreenAIServiceRouter::SetLibraryLoadState(
Service service,
base::TimeTicks request_start_time,
bool successful) { … }
bool ScreenAIServiceRouter::IsConnectionBoundForTesting(Service service) { … }
bool ScreenAIServiceRouter::IsProcessRunningForTesting() { … }
}