blob: ae5af79153605882ed9f3ddec27efdf6bd5f722a [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_WEBUI_NTP_NTP_RESOURCE_CACHE_H_
#define CHROME_BROWSER_UI_WEBUI_NTP_NTP_RESOURCE_CACHE_H_
#include <memory>
#include <string>
#include "base/memory/raw_ptr.h"
#include "base/memory/ref_counted.h"
#include "base/memory/ref_counted_memory.h"
#include "base/scoped_observation.h"
#include "chrome/browser/themes/theme_service_observer.h"
#include "components/keyed_service/core/keyed_service.h"
#include "content/public/browser/web_contents.h"
#include "ui/native_theme/native_theme.h"
#include "ui/native_theme/native_theme_observer.h"
class Profile;
namespace base {
class RefCountedMemory;
} // namespace base
namespace ui {
class ColorProvider;
class ThemeProvider;
} // namespace ui
SkColor GetThemeColor(const ui::NativeTheme* native_theme,
const ui::ColorProvider& cp,
int id);
std::string GetNewTabBackgroundPositionCSS(
const ui::ThemeProvider& theme_provider);
std::string GetNewTabBackgroundTilingCSS(
const ui::ThemeProvider& theme_provider);
// This class keeps a cache of NTP resources (HTML and CSS) so we don't have to
// regenerate them all the time.
// Note: This is only used for incognito and guest mode NTPs (NewTabUI), as well
// as for (non-incognito) app launcher pages (AppLauncherPageUI).
class NTPResourceCache : public ThemeServiceObserver,
public KeyedService,
public ui::NativeThemeObserver {
public:
enum WindowType {
NORMAL,
INCOGNITO,
GUEST,
// The OTR profile that is not used for Incognito or Guest windows.
NON_PRIMARY_OTR,
};
explicit NTPResourceCache(Profile* profile);
NTPResourceCache(const NTPResourceCache&) = delete;
NTPResourceCache& operator=(const NTPResourceCache&) = delete;
~NTPResourceCache() override;
base::RefCountedMemory* GetNewTabGuestHTML();
base::RefCountedMemory* GetNewTabHTML(
WindowType win_type,
const content::WebContents::Getter& wc_getter);
base::RefCountedMemory* GetNewTabCSS(
WindowType win_type,
const content::WebContents::Getter& wc_getter);
// ThemeServiceObserver:
void OnThemeChanged() override;
static WindowType GetWindowType(Profile* profile);
private:
// KeyedService:
void Shutdown() override;
// ui::NativeThemeObserver:
void OnNativeThemeUpdated(ui::NativeTheme* updated_theme) override;
// Invalidates the NTPResourceCache.
void Invalidate();
void CreateNewTabCSS(const content::WebContents::Getter& wc_getter);
void CreateNewTabIncognitoHTML(const content::WebContents::Getter& wc_getter);
void CreateNewTabIncognitoCSS(const content::WebContents::Getter& wc_getter);
void CreateNewTabGuestHTML();
raw_ptr<Profile> profile_;
scoped_refptr<base::RefCountedMemory> new_tab_css_;
scoped_refptr<base::RefCountedMemory> new_tab_guest_html_;
scoped_refptr<base::RefCountedMemory> new_tab_incognito_html_;
scoped_refptr<base::RefCountedMemory> new_tab_incognito_css_;
scoped_refptr<base::RefCountedMemory> new_tab_non_primary_otr_html_;
base::ScopedObservation<ui::NativeTheme, ui::NativeThemeObserver>
theme_observation_{this};
};
#endif // CHROME_BROWSER_UI_WEBUI_NTP_NTP_RESOURCE_CACHE_H_