diff --git a/.storybook/main.ts b/.storybook/main.ts index c201a222ea0..1d022664c8e 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -22,7 +22,11 @@ const slashStoriesIndexer: Indexer = { const config: StorybookConfig = { stories: process.env.STORYBOOK_STORYPATH ? [`../${process.env.STORYBOOK_STORYPATH}`] - : ['../components/**/stories/*.tsx', '../components/**/*.stories.tsx'], + : [ + '../components/**/stories/*.tsx', + '../components/**/*.stories.tsx', + '../browser/resources/**/stories/*.tsx' + ], typescript: { check: false, reactDocgen: false, diff --git a/browser/about_flags.cc b/browser/about_flags.cc index 06e4dff3521..ee82b5d5a1c 100644 --- a/browser/about_flags.cc +++ b/browser/about_flags.cc @@ -535,6 +535,13 @@ const flags_ui::FeatureEntry::FeatureVariation kZCashFeatureVariations[] = { kOsDesktop, \ FEATURE_VALUE_TYPE(features::kBraveNtpSearchWidget), \ }, \ + { \ + "brave-ntp-refresh-enabled", \ + "New Tab Page refresh", \ + "Enables the refreshed version of the New Tab Page", \ + kOsDesktop, \ + FEATURE_VALUE_TYPE(features::kBraveNewTabPageRefreshEnabled), \ + }, \ { \ "brave-adblock-cname-uncloaking", \ "Enable CNAME uncloaking", \ diff --git a/browser/brave_browser_features.cc b/browser/brave_browser_features.cc index 85c244faad0..0464b4d8bae 100644 --- a/browser/brave_browser_features.cc +++ b/browser/brave_browser_features.cc @@ -9,6 +9,10 @@ namespace features { +BASE_FEATURE(kBraveNewTabPageRefreshEnabled, + "BraveNewTabPageRefreshEnabled", + base::FEATURE_DISABLED_BY_DEFAULT); + // Cleanup Session Cookies on browser restart if Session Restore is enabled. BASE_FEATURE(kBraveCleanupSessionCookiesOnSessionRestore, "BraveCleanupSessionCookiesOnSessionRestore", diff --git a/browser/brave_browser_features.h b/browser/brave_browser_features.h index ad30895a251..c3d9815cfb7 100644 --- a/browser/brave_browser_features.h +++ b/browser/brave_browser_features.h @@ -13,6 +13,7 @@ namespace features { +BASE_DECLARE_FEATURE(kBraveNewTabPageRefreshEnabled); BASE_DECLARE_FEATURE(kBraveCleanupSessionCookiesOnSessionRestore); BASE_DECLARE_FEATURE(kBraveCopyCleanLinkByDefault); BASE_DECLARE_FEATURE(kBraveCopyCleanLinkFromJs); diff --git a/browser/brave_content_browser_client.cc b/browser/brave_content_browser_client.cc index 38cc978efdb..a4d2af83558 100644 --- a/browser/brave_content_browser_client.cc +++ b/browser/brave_content_browser_client.cc @@ -234,6 +234,8 @@ using extensions::ChromeContentBrowserClientExtensionsPart; #if !BUILDFLAG(IS_ANDROID) #include "brave/browser/new_tab/new_tab_shows_navigation_throttle.h" #include "brave/browser/ui/geolocation/brave_geolocation_permission_tab_helper.h" +#include "brave/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page.mojom.h" +#include "brave/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_ui.h" #include "brave/browser/ui/webui/brave_news_internals/brave_news_internals_ui.h" #include "brave/browser/ui/webui/brave_rewards/rewards_page_top_ui.h" #include "brave/browser/ui/webui/brave_rewards/rewards_panel_ui.h" @@ -661,6 +663,9 @@ void BraveContentBrowserClient::RegisterWebUIInterfaceBrokers( .Add(); #if !BUILDFLAG(IS_ANDROID) + registry.ForWebUI() + .Add(); + auto ntp_registration = registry.ForWebUI() .Add() diff --git a/browser/resources/brave_new_tab_page_refresh/BUILD.gn b/browser/resources/brave_new_tab_page_refresh/BUILD.gn new file mode 100644 index 00000000000..cf3e9f94456 --- /dev/null +++ b/browser/resources/brave_new_tab_page_refresh/BUILD.gn @@ -0,0 +1,25 @@ +# Copyright (c) 2025 The Brave Authors. All rights reserved. +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at https://mozilla.org/MPL/2.0/. + +import("//brave/components/common/typescript.gni") + +assert(!is_android) + +transpile_web_ui("resources") { + entry_points = [ [ + "brave_new_tab_page", + rebase_path("brave_new_tab_page.tsx"), + ] ] + resource_name = "brave_new_tab_page_refresh" + output_module = true + deps = [ "//brave/browser/ui/webui/brave_new_tab_page_refresh:mojom_js" ] +} + +pack_web_resources("generated_resources") { + resource_name = "brave_new_tab_page_refresh" + output_dir = + "$root_gen_dir/brave/browser/resources/brave_new_tab_page_refresh" + deps = [ ":resources" ] +} diff --git a/browser/resources/brave_new_tab_page_refresh/brave_new_tab_page.html b/browser/resources/brave_new_tab_page_refresh/brave_new_tab_page.html new file mode 100644 index 00000000000..c3dc7bd690f --- /dev/null +++ b/browser/resources/brave_new_tab_page_refresh/brave_new_tab_page.html @@ -0,0 +1,22 @@ + + + + + + New Tab + + + + + + + + + +
+ + diff --git a/browser/resources/brave_new_tab_page_refresh/brave_new_tab_page.tsx b/browser/resources/brave_new_tab_page_refresh/brave_new_tab_page.tsx new file mode 100644 index 00000000000..fc2db44f87c --- /dev/null +++ b/browser/resources/brave_new_tab_page_refresh/brave_new_tab_page.tsx @@ -0,0 +1,16 @@ +/* Copyright (c) 2025 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at https://mozilla.org/MPL/2.0/. */ + +import * as React from 'react' +import { createRoot } from 'react-dom/client' +import { setIconBasePath } from '@brave/leo/react/icon' + +import { App } from './components/app' + +setIconBasePath('chrome://resources/brave-icons') + +createRoot(document.getElementById('root')!).render( + +) diff --git a/browser/resources/brave_new_tab_page_refresh/components/app.tsx b/browser/resources/brave_new_tab_page_refresh/components/app.tsx new file mode 100644 index 00000000000..cd8d31879e4 --- /dev/null +++ b/browser/resources/brave_new_tab_page_refresh/components/app.tsx @@ -0,0 +1,12 @@ +/* Copyright (c) 2025 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at https://mozilla.org/MPL/2.0/. */ + +import * as React from 'react' + +export function App() { + return ( +
+ ) +} diff --git a/browser/resources/brave_new_tab_page_refresh/stories/index.tsx b/browser/resources/brave_new_tab_page_refresh/stories/index.tsx new file mode 100644 index 00000000000..91577ed8d5d --- /dev/null +++ b/browser/resources/brave_new_tab_page_refresh/stories/index.tsx @@ -0,0 +1,20 @@ +/* Copyright (c) 2025 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at https://mozilla.org/MPL/2.0/. */ + +import * as React from 'react' + +import { App } from '../components/app' + +export default { + title: 'New Tab/Refresh' +} + +export function NTPRefresh() { + return ( +
+ +
+ ) +} diff --git a/browser/resources/brave_new_tab_page_refresh/tsconfig.json b/browser/resources/brave_new_tab_page_refresh/tsconfig.json new file mode 100644 index 00000000000..3b6366185a8 --- /dev/null +++ b/browser/resources/brave_new_tab_page_refresh/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig", + "include": [ + "**/*.ts", + "**/*.tsx", + "**/*.d.ts" + ] +} diff --git a/browser/sources.gni b/browser/sources.gni index 18eba7999b7..13fd1278680 100644 --- a/browser/sources.gni +++ b/browser/sources.gni @@ -292,6 +292,8 @@ if (!is_android) { brave_chrome_browser_deps += [ "//brave/browser/ui/ai_chat", "//brave/browser/ui/tabs:impl", + "//brave/browser/ui/webui/brave_new_tab_page_refresh", + "//brave/browser/ui/webui/brave_new_tab_page_refresh:mojom", "//brave/browser/ui/webui/brave_news_internals", "//brave/browser/user_education:features", "//components/feed:feature_list", @@ -634,3 +636,11 @@ if (is_android) { "//brave/browser/android:tab_features", ] } + +# TODO(https://github.com/brave/brave-browser/issues/43310): +# brave_new_tab_page_ui.cc includes some headers (e.g. from +# //brave/browser/new_tab) that are currently in the //chrome/browser target. +if (!is_android) { + brave_chrome_browser_allow_circular_includes_from += + [ "//brave/browser/ui/webui/brave_new_tab_page_refresh" ] +} diff --git a/browser/ui/config.gni b/browser/ui/config.gni index 586f7e8dacf..0c854de654e 100644 --- a/browser/ui/config.gni +++ b/browser/ui/config.gni @@ -10,6 +10,7 @@ brave_ui_allow_circular_includes_from = if (!is_android) { brave_ui_allow_circular_includes_from += [ "//brave/browser/ui/webui/brave_education", + "//brave/browser/ui/webui/brave_new_tab_page_refresh", "//brave/browser/ui/webui/brave_news_internals", ] } diff --git a/browser/ui/webui/brave_new_tab_page_refresh/BUILD.gn b/browser/ui/webui/brave_new_tab_page_refresh/BUILD.gn new file mode 100644 index 00000000000..3de7c1a8302 --- /dev/null +++ b/browser/ui/webui/brave_new_tab_page_refresh/BUILD.gn @@ -0,0 +1,37 @@ +# Copyright (c) 2025 The Brave Authors. All rights reserved. +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at https://mozilla.org/MPL/2.0/. + +import("//mojo/public/tools/bindings/mojom.gni") + +assert(!is_android) + +mojom("mojom") { + sources = [ "brave_new_tab_page.mojom" ] +} + +source_set("brave_new_tab_page_refresh") { + sources = [ + "brave_new_tab_page_refresh_handler.cc", + "brave_new_tab_page_refresh_handler.h", + "brave_new_tab_page_ui.cc", + "brave_new_tab_page_ui.h", + ] + + deps = [ + ":mojom", + "//brave/browser/resources/brave_new_tab_page_refresh:generated_resources", + "//brave/components/l10n/common", + "//brave/components/resources:static_resources", + "//brave/components/resources:strings", + "//chrome/app:generated_resources", + "//chrome/browser:browser_public_dependencies", + "//chrome/browser/profiles:profile", + "//chrome/browser/themes", + "//chrome/browser/ui/webui:webui_util", + "//components/strings:components_strings", + "//ui/base", + "//ui/webui", + ] +} diff --git a/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page.mojom b/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page.mojom new file mode 100644 index 00000000000..be04db74930 --- /dev/null +++ b/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page.mojom @@ -0,0 +1,18 @@ +// Copyright (c) 2025 The Brave Authors. All rights reserved. +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at https://mozilla.org/MPL/2.0/. + +module brave_new_tab_page_refresh.mojom; + +// WebUI-side handler for notifications from the browser. +interface NewTabPage {}; + +// Browser-side handler for requests from the WebUI page. +interface NewTabPageHandler { + + // Sets the NewTabPage remote interface that will receive notifications from + // the browser. + SetNewTabPage(pending_remote page); + +}; diff --git a/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_refresh_handler.cc b/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_refresh_handler.cc new file mode 100644 index 00000000000..fae223dd5f4 --- /dev/null +++ b/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_refresh_handler.cc @@ -0,0 +1,21 @@ +// Copyright (c) 2025 The Brave Authors. All rights reserved. +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at https://mozilla.org/MPL/2.0/. + +#include "brave/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_refresh_handler.h" + +#include + +BraveNewTabPageRefreshHandler::BraveNewTabPageRefreshHandler( + mojo::PendingReceiver + receiver) + : receiver_(this, std::move(receiver)) {} + +BraveNewTabPageRefreshHandler::~BraveNewTabPageRefreshHandler() = default; + +void BraveNewTabPageRefreshHandler::SetNewTabPage( + mojo::PendingRemote page) { + page_.reset(); + page_.Bind(std::move(page)); +} diff --git a/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_refresh_handler.h b/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_refresh_handler.h new file mode 100644 index 00000000000..c017db769f2 --- /dev/null +++ b/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_refresh_handler.h @@ -0,0 +1,35 @@ +// Copyright (c) 2025 The Brave Authors. All rights reserved. +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at https://mozilla.org/MPL/2.0/. + +#ifndef BRAVE_BROWSER_UI_WEBUI_BRAVE_NEW_TAB_PAGE_REFRESH_BRAVE_NEW_TAB_PAGE_REFRESH_HANDLER_H_ +#define BRAVE_BROWSER_UI_WEBUI_BRAVE_NEW_TAB_PAGE_REFRESH_BRAVE_NEW_TAB_PAGE_REFRESH_HANDLER_H_ + +#include "brave/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" + +class BraveNewTabPageRefreshHandler + : public brave_new_tab_page_refresh::mojom::NewTabPageHandler { + public: + explicit BraveNewTabPageRefreshHandler( + mojo::PendingReceiver< + brave_new_tab_page_refresh::mojom::NewTabPageHandler> receiver); + + ~BraveNewTabPageRefreshHandler() override; + + // brave_new_tab_page_refresh::mojom::NewTabPageHandler: + void SetNewTabPage( + mojo::PendingRemote page) + override; + + private: + mojo::Receiver + receiver_; + mojo::Remote page_; +}; + +#endif // BRAVE_BROWSER_UI_WEBUI_BRAVE_NEW_TAB_PAGE_REFRESH_BRAVE_NEW_TAB_PAGE_REFRESH_HANDLER_H_ diff --git a/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_ui.cc b/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_ui.cc new file mode 100644 index 00000000000..5e088899c60 --- /dev/null +++ b/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_ui.cc @@ -0,0 +1,62 @@ +// Copyright (c) 2025 The Brave Authors. All rights reserved. +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at https://mozilla.org/MPL/2.0/. + +#include "brave/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_ui.h" + +#include + +#include "brave/browser/new_tab/new_tab_shows_options.h" +#include "brave/browser/resources/brave_new_tab_page_refresh/grit/brave_new_tab_page_refresh_generated_map.h" +#include "brave/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_refresh_handler.h" +#include "brave/browser/ui/webui/brave_webui_source.h" +#include "brave/components/l10n/common/localization_util.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/favicon_source.h" +#include "chrome/common/webui_url_constants.h" +#include "components/favicon_base/favicon_url_parser.h" +#include "components/grit/brave_components_resources.h" +#include "components/grit/brave_components_strings.h" +#include "components/strings/grit/components_strings.h" +#include "content/public/browser/web_ui.h" +#include "content/public/browser/web_ui_data_source.h" +#include "ui/webui/webui_util.h" + +BraveNewTabPageUI::BraveNewTabPageUI(content::WebUI* web_ui) + : ui::MojoWebUIController(web_ui) { + auto* profile = Profile::FromWebUI(web_ui); + + auto* source = content::WebUIDataSource::CreateAndAdd( + profile, chrome::kChromeUINewTabHost); + + if (brave::ShouldNewTabShowBlankpage(profile)) { + source->SetDefaultResource(IDR_BRAVE_BLANK_NEW_TAB_HTML); + } else { + webui::SetupWebUIDataSource(source, kBraveNewTabPageRefreshGenerated, + IDR_BRAVE_NEW_TAB_PAGE_HTML); + } + + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ImgSrc, "img-src chrome://favicon2;"); + + AddBackgroundColorToSource(source, web_ui->GetWebContents()); + + content::URLDataSource::Add( + profile, std::make_unique( + profile, chrome::FaviconUrlFormat::kFavicon2)); + + web_ui->OverrideTitle( + brave_l10n::GetLocalizedResourceUTF16String(IDS_NEW_TAB_TITLE)); +} + +BraveNewTabPageUI::~BraveNewTabPageUI() = default; + +void BraveNewTabPageUI::BindInterface( + mojo::PendingReceiver + receiver) { + page_handler_ = + std::make_unique(std::move(receiver)); +} + +WEB_UI_CONTROLLER_TYPE_IMPL(BraveNewTabPageUI) diff --git a/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_ui.h b/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_ui.h new file mode 100644 index 00000000000..141472420cf --- /dev/null +++ b/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_ui.h @@ -0,0 +1,32 @@ +// Copyright (c) 2025 The Brave Authors. All rights reserved. +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at https://mozilla.org/MPL/2.0/. + +#ifndef BRAVE_BROWSER_UI_WEBUI_BRAVE_NEW_TAB_PAGE_REFRESH_BRAVE_NEW_TAB_PAGE_UI_H_ +#define BRAVE_BROWSER_UI_WEBUI_BRAVE_NEW_TAB_PAGE_REFRESH_BRAVE_NEW_TAB_PAGE_UI_H_ + +#include + +#include "brave/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "ui/webui/mojo_web_ui_controller.h" + +// The Web UI controller for the Brave new tab page. +class BraveNewTabPageUI : public ui::MojoWebUIController { + public: + explicit BraveNewTabPageUI(content::WebUI* web_ui); + ~BraveNewTabPageUI() override; + + void BindInterface( + mojo::PendingReceiver< + brave_new_tab_page_refresh::mojom::NewTabPageHandler> receiver); + + private: + std::unique_ptr + page_handler_; + + WEB_UI_CONTROLLER_TYPE_DECL(); +}; + +#endif // BRAVE_BROWSER_UI_WEBUI_BRAVE_NEW_TAB_PAGE_REFRESH_BRAVE_NEW_TAB_PAGE_UI_H_ diff --git a/browser/ui/webui/brave_web_ui_controller_factory.cc b/browser/ui/webui/brave_web_ui_controller_factory.cc index 2e325a04e90..f28bb4041d4 100644 --- a/browser/ui/webui/brave_web_ui_controller_factory.cc +++ b/browser/ui/webui/brave_web_ui_controller_factory.cc @@ -12,6 +12,7 @@ #include "base/memory/ptr_util.h" #include "base/no_destructor.h" #include "brave/browser/brave_ads/ads_service_factory.h" +#include "brave/browser/brave_browser_features.h" #include "brave/browser/brave_browser_process.h" #include "brave/browser/brave_news/brave_news_controller_factory.h" #include "brave/browser/brave_rewards/rewards_util.h" @@ -43,6 +44,7 @@ #if !BUILDFLAG(IS_ANDROID) #include "brave/browser/brave_wallet/brave_wallet_context_utils.h" +#include "brave/browser/ui/webui/brave_new_tab_page_refresh/brave_new_tab_page_ui.h" #include "brave/browser/ui/webui/brave_news_internals/brave_news_internals_ui.h" #include "brave/browser/ui/webui/brave_wallet/wallet_page_ui.h" #include "brave/browser/ui/webui/new_tab_page/brave_new_tab_ui.h" @@ -153,6 +155,10 @@ WebUIController* NewWebUI(WebUI* web_ui, const GURL& url) { // WebUIConfig. Currently, we can't add both BravePrivateNewTabUI and // BraveNewTabUI configs in RegisterChromeWebUIConfigs because they use the // same origin (content::kChromeUIScheme + chrome::kChromeUINewTabHost). + if (base::FeatureList::IsEnabled( + features::kBraveNewTabPageRefreshEnabled)) { + return new BraveNewTabPageUI(web_ui); + } return new BraveNewTabUI( web_ui, url.host(), brave_ads::AdsServiceFactory::GetForProfile(profile), diff --git a/components/resources/BUILD.gn b/components/resources/BUILD.gn index b7082674da6..4fdc86c6486 100644 --- a/components/resources/BUILD.gn +++ b/components/resources/BUILD.gn @@ -88,6 +88,7 @@ repack("resources") { if (!is_android && !is_ios) { deps += [ + "//brave/browser/resources/brave_new_tab_page_refresh:generated_resources", "//brave/components/brave_new_tab_ui:generated_resources", "//brave/components/brave_news/browser/resources:generated_resources", "//brave/components/brave_news/browser/resources:generated_resources", @@ -100,6 +101,7 @@ repack("resources") { ] sources += [ + "$root_gen_dir/brave/browser/resources/brave_new_tab_page_refresh/brave_new_tab_page_refresh_generated.pak", "$root_gen_dir/brave/components/brave_new_tab/resources/brave_new_tab_generated.pak", "$root_gen_dir/brave/components/brave_news/browser/resources/brave_news_internals_generated.pak", "$root_gen_dir/brave/components/brave_private_new_tab/resources/page/brave_private_new_tab_generated.pak", diff --git a/components/resources/brave_components_resources.grd b/components/resources/brave_components_resources.grd index 68ef155a012..57ace2aa585 100644 --- a/components/resources/brave_components_resources.grd +++ b/components/resources/brave_components_resources.grd @@ -88,6 +88,7 @@ + diff --git a/components/resources/brave_components_strings.grd b/components/resources/brave_components_strings.grd index 1e34a348ec9..a11c939747e 100644 --- a/components/resources/brave_components_strings.grd +++ b/components/resources/brave_components_strings.grd @@ -805,6 +805,7 @@ + diff --git a/components/resources/brave_new_tab_page_resources.grdp b/components/resources/brave_new_tab_page_resources.grdp new file mode 100644 index 00000000000..a88af38d169 --- /dev/null +++ b/components/resources/brave_new_tab_page_resources.grdp @@ -0,0 +1,6 @@ + + + + + + diff --git a/components/resources/brave_new_tab_page_strings.grdp b/components/resources/brave_new_tab_page_strings.grdp new file mode 100644 index 00000000000..4746dfbfc0e --- /dev/null +++ b/components/resources/brave_new_tab_page_strings.grdp @@ -0,0 +1,4 @@ + + + + diff --git a/resources/resource_ids.spec b/resources/resource_ids.spec index d24c52c7352..e3ca8038317 100644 --- a/resources/resource_ids.spec +++ b/resources/resource_ids.spec @@ -245,6 +245,10 @@ "META": {"sizes": {"includes": [10]}}, "includes": [34780], }, + "<(SHARED_INTERMEDIATE_DIR)/brave/web-ui-brave_new_tab_page_refresh/brave_new_tab_page_refresh.grd": { + "META": {"sizes": {"includes": [20]}}, + "includes": [34790], + }, # WARNING: The upstream ChromeOS/Ash strings currently run through 36930. We # must be careful not to exceed that maximum when adding new strings here. }