// 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_THEMES_BROWSER_THEME_PACK_H_ #define CHROME_BROWSER_THEMES_BROWSER_THEME_PACK_H_ #include <stdint.h> #include <map> #include <memory> #include <string> #include <string_view> #include <vector> #include "base/containers/flat_map.h" #include "base/memory/raw_ptr.h" #include "base/task/sequenced_task_runner_helpers.h" #include "base/values.h" #include "chrome/browser/themes/custom_theme_supplier.h" #include "chrome/common/themes/autogenerated_theme_util.h" #include "extensions/common/extension.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/base/resource/resource_scale_factor.h" #include "ui/gfx/color_utils.h" namespace base { class FilePath; class RefCountedMemory; } // namespace base namespace gfx { class Image; } namespace ui { class ColorProvider; class DataPack; } // An optimized representation of a theme, backed by a mmapped DataPack. // // The idea is to pre-process all images (tinting, compositing, etc) at theme // install time, save all the PNG-ified data into an mmappable file so we don't // suffer multiple file system access times, therefore solving two of the // problems with the previous implementation. // // A note on const-ness. All public, non-static methods are const. We do this // because once we've constructed a BrowserThemePack through the // BuildFromExtension() interface, we WriteToDisk() on a thread other than the // UI thread that consumes a BrowserThemePack. There is no locking; thread // safety between the writing thread and the UI thread is ensured by having the // data be immutable. // // BrowserThemePacks are always deleted on a sequence with I/O allowed because // in the common case, they are backed by mmapped data and the unmmapping // operation will trip our IO on the UI thread detector. // See CustomThemeSupplier constructor more more details. class BrowserThemePack : public CustomThemeSupplier { … }; #endif // CHROME_BROWSER_THEMES_BROWSER_THEME_PACK_H_