#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.h"
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include "base/command_line.h"
#include "base/metrics/histogram_functions.h"
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/strings/stringprintf.h"
#include "base/time/time.h"
#include "base/values.h"
#include "build/chromeos_buildflags.h"
#include "chrome/browser/browser_features.h"
#include "chrome/browser/buildflags.h"
#include "chrome/browser/new_tab_page/feature_promo_helper/new_tab_page_feature_promo_helper.h"
#include "chrome/browser/new_tab_page/modules/file_suggestion/file_suggestion_handler.h"
#include "chrome/browser/new_tab_page/modules/new_tab_page_modules.h"
#include "chrome/browser/new_tab_page/modules/v2/calendar/google_calendar_page_handler.h"
#include "chrome/browser/new_tab_page/modules/v2/most_relevant_tab_resumption/most_relevant_tab_resumption_page_handler.h"
#include "chrome/browser/page_image_service/image_service_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search/background/ntp_custom_background_service_factory.h"
#include "chrome/browser/search_engines/template_url_service_factory.h"
#include "chrome/browser/search_provider_logos/logo_service_factory.h"
#include "chrome/browser/signin/identity_manager_factory.h"
#include "chrome/browser/sync/sync_service_factory.h"
#include "chrome/browser/themes/theme_service_factory.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/color/chrome_color_id.h"
#include "chrome/browser/ui/tabs/public/tab_features.h"
#include "chrome/browser/ui/views/side_panel/customize_chrome/customize_chrome_utils.h"
#include "chrome/browser/ui/views/side_panel/customize_chrome/side_panel_controller_views.h"
#include "chrome/browser/ui/webui/browser_command/browser_command_handler.h"
#include "chrome/browser/ui/webui/cr_components/most_visited/most_visited_handler.h"
#include "chrome/browser/ui/webui/favicon_source.h"
#include "chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h"
#include "chrome/browser/ui/webui/new_tab_page/ntp_pref_names.h"
#include "chrome/browser/ui/webui/new_tab_page/untrusted_source.h"
#include "chrome/browser/ui/webui/sanitized_image_source.h"
#include "chrome/browser/ui/webui/searchbox/realbox_handler.h"
#include "chrome/browser/ui/webui/searchbox/searchbox_handler.h"
#include "chrome/browser/ui/webui/theme_source.h"
#include "chrome/browser/ui/webui/webui_util.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/search/instant_types.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/branded_strings.h"
#include "chrome/grit/browser_resources.h"
#include "chrome/grit/generated_resources.h"
#include "chrome/grit/new_tab_page_resources.h"
#include "chrome/grit/new_tab_page_resources_map.h"
#include "chrome/grit/theme_resources.h"
#include "components/commerce/core/commerce_feature_list.h"
#include "components/content_settings/core/common/content_settings_pattern.h"
#include "components/favicon_base/favicon_url_parser.h"
#include "components/google/core/common/google_util.h"
#include "components/grit/components_scaled_resources.h"
#include "components/history_clusters/core/features.h"
#include "components/page_image_service/image_service.h"
#include "components/page_image_service/image_service_handler.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service.h"
#include "components/search/ntp_features.h"
#include "components/search_engines/template_url_service.h"
#include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h"
#include "components/signin/public/identity_manager/identity_manager.h"
#include "components/strings/grit/components_strings.h"
#include "components/sync/service/sync_service.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/url_data_source.h"
#include "content/public/browser/web_ui_data_source.h"
#include "google_apis/gaia/core_account_id.h"
#include "media/base/media_switches.h"
#include "services/network/public/mojom/content_security_policy.mojom.h"
#include "skia/ext/skia_utils_base.h"
#include "ui/base/accelerators/accelerator.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/webui/web_ui_util.h"
#include "ui/color/color_provider.h"
#include "ui/native_theme/native_theme.h"
#include "ui/resources/grit/webui_resources.h"
#include "ui/webui/color_change_listener/color_change_handler.h"
#include "ui/webui/webui_allowlist.h"
#include "url/origin.h"
#include "url/url_util.h"
#if !defined(OFFICIAL_BUILD)
#include "chrome/browser/ui/webui/new_tab_page/foo/foo_handler.h"
#endif
BrowserContext;
WebContents;
DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(NewTabPageUI,
kCustomizeChromeButtonElementId);
DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(NewTabPageUI,
kModulesCustomizeIPHAnchorElement);
namespace {
constexpr char kPrevNavigationTimePrefName[] = …;
bool HasCredentials(Profile* profile) { … }
content::WebUIDataSource* CreateAndAddNewTabPageUiHtmlSource(Profile* profile) { … }
}
NewTabPageUI::NewTabPageUI(content::WebUI* web_ui)
: … { … }
WEB_UI_CONTROLLER_TYPE_IMPL(NewTabPageUI)
NewTabPageUI::~NewTabPageUI() { … }
bool NewTabPageUI::IsNewTabPageOrigin(const GURL& url) { … }
void NewTabPageUI::RegisterProfilePrefs(PrefRegistrySimple* registry) { … }
void NewTabPageUI::ResetProfilePrefs(PrefService* prefs) { … }
bool NewTabPageUI::IsManagedProfile(Profile* profile) { … }
void NewTabPageUI::BindInterface(
mojo::PendingReceiver<new_tab_page::mojom::PageHandlerFactory>
pending_receiver) { … }
void NewTabPageUI::BindInterface(
mojo::PendingReceiver<color_change_listener::mojom::PageHandler>
pending_receiver) { … }
void NewTabPageUI::BindInterface(
mojo::PendingReceiver<searchbox::mojom::PageHandler> pending_page_handler) { … }
void NewTabPageUI::BindInterface(
mojo::PendingReceiver<metrics_reporter::mojom::PageMetricsHost> receiver) { … }
void NewTabPageUI::BindInterface(
mojo::PendingReceiver<browser_command::mojom::CommandHandlerFactory>
pending_receiver) { … }
void NewTabPageUI::BindInterface(
mojo::PendingReceiver<most_visited::mojom::MostVisitedPageHandlerFactory>
pending_receiver) { … }
void NewTabPageUI::BindInterface(
mojo::PendingReceiver<file_suggestion::mojom::FileSuggestionHandler>
pending_receiver) { … }
#if !defined(OFFICIAL_BUILD)
void NewTabPageUI::BindInterface(
mojo::PendingReceiver<foo::mojom::FooHandler> pending_page_handler) { … }
#endif
void NewTabPageUI::BindInterface(
mojo::PendingReceiver<ntp::most_relevant_tab_resumption::mojom::PageHandler>
pending_page_handler) { … }
void NewTabPageUI::BindInterface(
mojo::PendingReceiver<ntp::calendar::mojom::GoogleCalendarPageHandler>
pending_page_handler) { … }
void NewTabPageUI::BindInterface(
mojo::PendingReceiver<page_image_service::mojom::PageImageServiceHandler>
pending_page_handler) { … }
void NewTabPageUI::BindInterface(
mojo::PendingReceiver<help_bubble::mojom::HelpBubbleHandlerFactory>
pending_receiver) { … }
void NewTabPageUI::CreatePageHandler(
mojo::PendingRemote<new_tab_page::mojom::Page> pending_page,
mojo::PendingReceiver<new_tab_page::mojom::PageHandler>
pending_page_handler) { … }
void NewTabPageUI::CreateBrowserCommandHandler(
mojo::PendingReceiver<browser_command::mojom::CommandHandler>
pending_handler) { … }
void NewTabPageUI::CreatePageHandler(
mojo::PendingRemote<most_visited::mojom::MostVisitedPage> pending_page,
mojo::PendingReceiver<most_visited::mojom::MostVisitedPageHandler>
pending_page_handler) { … }
void NewTabPageUI::CreateHelpBubbleHandler(
mojo::PendingRemote<help_bubble::mojom::HelpBubbleClient> client,
mojo::PendingReceiver<help_bubble::mojom::HelpBubbleHandler> handler) { … }
void NewTabPageUI::OnColorProviderChanged() { … }
void NewTabPageUI::OnCustomBackgroundImageUpdated() { … }
void NewTabPageUI::DidStartNavigation(
content::NavigationHandle* navigation_handle) { … }
bool NewTabPageUI::IsCustomLinksEnabled() const { … }
bool NewTabPageUI::IsShortcutsVisible() const { … }
void NewTabPageUI::OnCustomLinksEnabledPrefChanged() { … }
void NewTabPageUI::OnTilesVisibilityPrefChanged() { … }
void NewTabPageUI::OnLoad() { … }
void NewTabPageUI::TabWillDetach(tabs::TabInterface* tab,
tabs::TabInterface::DetachReason reason) { … }
base::RefCountedMemory* NewTabPageUI::GetFaviconResourceBytes(
ui::ResourceScaleFactor scale_factor) { … }