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
|
// Copyright 2025 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/glic/fre/glic_fre_page_handler.h"
#include <optional>
#include "base/functional/callback_helpers.h"
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/metrics/user_metrics.h"
#include "base/metrics/user_metrics_action.h"
#include "chrome/browser/glic/fre/glic_fre_controller.h"
#include "chrome/browser/glic/glic_keyed_service.h"
#include "chrome/browser/glic/glic_keyed_service_factory.h"
#include "chrome/browser/glic/glic_metrics.h"
#include "chrome/browser/glic/widget/glic_window_controller.h"
#include "content/public/browser/web_contents.h"
namespace glic {
GlicFrePageHandler::GlicFrePageHandler(
content::WebContents* webui_contents,
mojo::PendingReceiver<glic::mojom::FrePageHandler> receiver)
: webui_contents_(webui_contents), receiver_(this, std::move(receiver)) {}
GlicFrePageHandler::~GlicFrePageHandler() {
WebUiStateChanged(mojom::FreWebUiState::kUninitialized);
}
content::BrowserContext* GlicFrePageHandler::browser_context() const {
return webui_contents_->GetBrowserContext();
}
GlicKeyedService* GlicFrePageHandler::GetGlicService() {
return GlicKeyedServiceFactory::GetGlicKeyedService(browser_context());
}
void GlicFrePageHandler::AcceptFre() {
GetGlicService()->metrics()->OnFreAccepted();
GetGlicService()->window_controller().fre_controller()->AcceptFre();
}
void GlicFrePageHandler::DismissFre(mojom::FreWebUiState panel_state) {
GetGlicService()->window_controller().fre_controller()->DismissFre(
panel_state);
}
void GlicFrePageHandler::FreReloaded() {
base::RecordAction(
base::UserMetricsAction("Glic.Fre.ErrorPanelTryAgainClicked"));
}
void GlicFrePageHandler::PrepareForClient(
base::OnceCallback<void(bool)> callback) {
GetGlicService()->window_controller().fre_controller()->PrepareForClient(
std::move(callback));
}
void GlicFrePageHandler::ValidateAndOpenLinkInNewTab(const GURL& url) {
if (url.DomainIs("google.com")) {
GetGlicService()->CreateTab(url, /*open_in_background=*/true, std::nullopt,
base::DoNothing());
GetGlicService()->window_controller().fre_controller()->OnLinkClicked(url);
}
}
void GlicFrePageHandler::WebUiStateChanged(mojom::FreWebUiState new_state) {
GetGlicService()->window_controller().fre_controller()->WebUiStateChanged(
new_state);
}
void GlicFrePageHandler::ExceededTimeoutError() {
GetGlicService()
->window_controller()
.fre_controller()
->ExceededTimeoutError();
}
void GlicFrePageHandler::LogWebUiLoadComplete() {
GetGlicService()
->window_controller()
.fre_controller()
->LogWebUiLoadComplete();
}
} // namespace glic
|