diff --git a/brave_paks.gni b/brave_paks.gni
index 9aabbda8905..470b084f184 100644
--- a/brave_paks.gni
+++ b/brave_paks.gni
@@ -36,11 +36,13 @@ template("brave_repack_percent") {
sources = [
"$root_gen_dir/brave/brave_theme_resources_${percent}_percent.pak",
"$root_gen_dir/brave/browser/resources/bookmark_icon/bookmark_icon_resources_${percent}_percent.pak",
+ "$root_gen_dir/components/brave_components_resources_${percent}_percent.pak",
]
deps = [
"//brave/app/theme:brave_theme_resources",
"//brave/browser/resources/bookmark_icon:bookmark_icon_resources",
+ "//brave/components/resources:scaled_resources",
]
if (defined(invoker.deps)) {
diff --git a/browser/ui/BUILD.gn b/browser/ui/BUILD.gn
index 9b88cc1b3e9..97fc93e6cd6 100644
--- a/browser/ui/BUILD.gn
+++ b/browser/ui/BUILD.gn
@@ -869,6 +869,7 @@ source_set("ui") {
"//brave/components/p3a_utils",
"//brave/components/playlist/core/common",
"//brave/components/query_filter",
+ "//brave/components/resources:scaled_resources",
"//brave/components/resources:static_resources",
"//brave/components/services/bat_ads/public/interfaces",
"//brave/components/skus/browser",
diff --git a/build/chromium/resources/chrome/app/theme/default_100_percent/common/favicon_ntp.png b/build/chromium/resources/chrome/app/theme/default_100_percent/common/favicon_ntp.png
index 422cc0056de..bfdfcfd5fc2 100644
Binary files a/build/chromium/resources/chrome/app/theme/default_100_percent/common/favicon_ntp.png and b/build/chromium/resources/chrome/app/theme/default_100_percent/common/favicon_ntp.png differ
diff --git a/build/chromium/resources/chrome/app/theme/default_200_percent/common/favicon_ntp.png b/build/chromium/resources/chrome/app/theme/default_200_percent/common/favicon_ntp.png
index c581156b90d..8387793d0f0 100644
Binary files a/build/chromium/resources/chrome/app/theme/default_200_percent/common/favicon_ntp.png and b/build/chromium/resources/chrome/app/theme/default_200_percent/common/favicon_ntp.png differ
diff --git a/chromium_src/chrome/browser/ui/tabs/tab_renderer_data.cc b/chromium_src/chrome/browser/ui/tabs/tab_renderer_data.cc
index 883caf772a1..50599cf97f3 100644
--- a/chromium_src/chrome/browser/ui/tabs/tab_renderer_data.cc
+++ b/chromium_src/chrome/browser/ui/tabs/tab_renderer_data.cc
@@ -16,9 +16,31 @@
#include "brave/browser/ui/tabs/shared_pinned_tab_service_factory.h"
#include "brave/components/constants/webui_url_constants.h"
#include "chrome/browser/resource_coordinator/tab_load_tracker.h"
+#include "chrome/browser/ui/color/chrome_color_id.h"
#include "chrome/browser/ui/tabs/features.h"
+#include "chrome/common/webui_url_constants.h"
+#include "components/grit/brave_components_scaled_resources.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/color/color_provider.h"
+#include "ui/gfx/color_utils.h"
#include "url/gurl.h"
+namespace {
+
+// Returns the appropriate favicon for the NTP based on the current theme.
+ui::ImageModel GetThemedNTPFavicon(content::WebContents* contents) {
+ const auto& color_provider = contents->GetColorProvider();
+ const SkColor background_color =
+ color_provider.GetColor(kColorTabBackgroundActiveFrameActive);
+ const bool is_dark = color_utils::IsDark(background_color);
+ const int resource_id =
+ is_dark ? IDR_FAVICON_NTP_DARK : IDR_FAVICON_NTP_LIGHT;
+ return ui::ImageModel::FromImage(
+ ui::ResourceBundle::GetSharedInstance().GetImageNamed(resource_id));
+}
+
+} // namespace
+
TabRendererData TabRendererData::FromTabInModel(const TabStripModel* model,
int index) {
if (base::FeatureList::IsEnabled(tabs::kBraveSharedPinnedTabs)) {
@@ -39,18 +61,22 @@ TabRendererData TabRendererData::FromTabInModel(const TabStripModel* model,
}
auto data = FromTabInModel_ChromiumImpl(model, index);
- if (data.should_themify_favicon) {
- content::WebContents* const contents = model->GetWebContentsAt(index);
- const GURL& url = contents->GetVisibleURL();
- if (url.SchemeIs(content::kChromeUIScheme) &&
- (url.host() == kWelcomeHost || url.host() == kRewardsPageHost)) {
+
+ content::WebContents* const contents = model->GetWebContentsAt(index);
+ const GURL& url = contents->GetVisibleURL();
+
+ // Override favicon theming for some WebUIs.
+ if (url.SchemeIs(content::kChromeUIScheme)) {
+ if (url.host() == chrome::kChromeUINewTabHost) {
+ data.favicon = GetThemedNTPFavicon(contents);
+ data.should_themify_favicon = false;
+ } else if (url.host() == kWelcomeHost || url.host() == kRewardsPageHost) {
data.should_themify_favicon = false;
}
}
// Show which tabs are unloaded.
if (!data.should_show_discard_status) {
- content::WebContents* const contents = model->GetWebContentsAt(index);
using resource_coordinator::TabLoadTracker;
const auto loading_state = TabLoadTracker::Get()->GetLoadingState(contents);
if (loading_state == TabLoadTracker::LoadingState::UNLOADED) {
diff --git a/components/resources/BUILD.gn b/components/resources/BUILD.gn
index 534634ae92a..c75c3e3fd55 100644
--- a/components/resources/BUILD.gn
+++ b/components/resources/BUILD.gn
@@ -17,6 +17,20 @@ import("//build/config/locales.gni")
import("//extensions/buildflags/buildflags.gni")
import("//tools/grit/repack.gni")
+brave_grit("scaled_resources") {
+ source = "brave_components_scaled_resources.grd"
+
+ outputs = [
+ "grit/brave_components_scaled_resources.h",
+ "grit/brave_components_scaled_resources_map.cc",
+ "grit/brave_components_scaled_resources_map.h",
+ "brave_components_resources_100_percent.pak",
+ "brave_components_resources_200_percent.pak",
+ ]
+
+ output_dir = "$root_gen_dir/components"
+}
+
brave_grit("static_resources") {
source = "brave_components_resources.grd"
@@ -66,6 +80,7 @@ brave_grit("static_resources") {
repack("resources") {
deps = [
+ ":scaled_resources",
":static_resources",
"//brave/components/ai_rewriter/common/buildflags",
"//brave/components/brave_account/resources",
diff --git a/components/resources/brave_components_scaled_resources.grd b/components/resources/brave_components_scaled_resources.grd
new file mode 100644
index 00000000000..d2f18d0c7fb
--- /dev/null
+++ b/components/resources/brave_components_scaled_resources.grd
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/resources/brave_new_tab_page_scaled_resources.grdp b/components/resources/brave_new_tab_page_scaled_resources.grdp
new file mode 100644
index 00000000000..abdcf800134
--- /dev/null
+++ b/components/resources/brave_new_tab_page_scaled_resources.grdp
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/components/resources/default_100_percent/favicon_ntp_dark.png b/components/resources/default_100_percent/favicon_ntp_dark.png
new file mode 100644
index 00000000000..944a69fdc5a
Binary files /dev/null and b/components/resources/default_100_percent/favicon_ntp_dark.png differ
diff --git a/components/resources/default_100_percent/favicon_ntp_light.png b/components/resources/default_100_percent/favicon_ntp_light.png
new file mode 100644
index 00000000000..422cc0056de
Binary files /dev/null and b/components/resources/default_100_percent/favicon_ntp_light.png differ
diff --git a/components/resources/default_200_percent/favicon_ntp_dark.png b/components/resources/default_200_percent/favicon_ntp_dark.png
new file mode 100644
index 00000000000..88d5c7dde6e
Binary files /dev/null and b/components/resources/default_200_percent/favicon_ntp_dark.png differ
diff --git a/components/resources/default_200_percent/favicon_ntp_light.png b/components/resources/default_200_percent/favicon_ntp_light.png
new file mode 100644
index 00000000000..c581156b90d
Binary files /dev/null and b/components/resources/default_200_percent/favicon_ntp_light.png differ
diff --git a/resources/resource_ids.spec b/resources/resource_ids.spec
index 26654d772ad..5da7d376f12 100644
--- a/resources/resource_ids.spec
+++ b/resources/resource_ids.spec
@@ -237,6 +237,9 @@
"META": {"sizes": {"includes": [20]}},
"includes": [54080],
},
+ "brave/components/resources/brave_components_scaled_resources.grd": {
+ "structures": [54100],
+ },
# WARNING: The IDs range is 2^16-1. Check
# out//gen/brave/resources/brave_resource_ids for how much the
# ids got expanded for the build.