| Index: ui/base/resource/resource_bundle.h
|
| ===================================================================
|
| --- ui/base/resource/resource_bundle.h (revision 135347)
|
| +++ ui/base/resource/resource_bundle.h (working copy)
|
| @@ -19,6 +19,8 @@
|
| #include "base/string16.h"
|
| #include "base/string_piece.h"
|
| #include "ui/base/ui_export.h"
|
| +#include "ui/gfx/font.h"
|
| +#include "ui/gfx/image/image.h"
|
| #include "ui/gfx/native_widget_types.h"
|
|
|
| class SkBitmap;
|
| @@ -28,11 +30,6 @@
|
| class RefCountedStaticMemory;
|
| }
|
|
|
| -namespace gfx {
|
| -class Font;
|
| -class Image;
|
| -}
|
| -
|
| namespace ui {
|
|
|
| class ResourceHandle;
|
| @@ -63,12 +60,60 @@
|
| RTL_DISABLED,
|
| };
|
|
|
| - // Initialize the ResourceBundle for this process. Returns the language
|
| - // selected.
|
| + // Delegate class that allows interception of pack file loading and resource
|
| + // requests. The methods of this class may be called on multiple threads.
|
| + class Delegate {
|
| + public:
|
| + // Called before a resource pack file is loaded. Return the full path for
|
| + // the pack file to continue loading or an empty value to cancel loading.
|
| + // |pack_path| will contain the complete default path for the pack file if
|
| + // known or just the pack file name otherwise.
|
| + virtual FilePath GetPathForResourcePack(const FilePath& pack_path,
|
| + float scale_factor) = 0;
|
| +
|
| + // Called before a locale pack file is loaded. Return the full path for
|
| + // the pack file to continue loading or an empty value to cancel loading.
|
| + // |pack_path| will contain the complete default path for the pack file if
|
| + // known or just the pack file name otherwise.
|
| + virtual FilePath GetPathForLocalePack(const FilePath& pack_path,
|
| + const std::string& locale) = 0;
|
| +
|
| + // Return an image resource or an empty value to attempt retrieval of the
|
| + // default resource.
|
| + virtual gfx::Image GetImageNamed(int resource_id) = 0;
|
| +
|
| + // Return an image resource or an empty value to attempt retrieval of the
|
| + // default resource.
|
| + virtual gfx::Image GetNativeImageNamed(int resource_id, ImageRTL rtl) = 0;
|
| +
|
| + // Return a static memory resource or NULL to attempt retrieval of the
|
| + // default resource.
|
| + virtual base::RefCountedStaticMemory* LoadDataResourceBytes(
|
| + int resource_id) = 0;
|
| +
|
| + // Retrieve a raw data resource. Return true if a resource was provided or
|
| + // false to attempt retrieval of the default resource.
|
| + virtual bool GetRawDataResource(int resource_id,
|
| + base::StringPiece* value) = 0;
|
| +
|
| + // Retrieve a localized string. Return true if a string was provided or
|
| + // false to attempt retrieval of the default string.
|
| + virtual bool GetLocalizedString(int message_id, string16* value) = 0;
|
| +
|
| + // Return a font resource or NULL to attempt retrieval of the default
|
| + // resource.
|
| + virtual scoped_ptr<gfx::Font> GetFont(FontStyle style) = 0;
|
| +
|
| + protected:
|
| + virtual ~Delegate() {}
|
| + };
|
| +
|
| + // Initialize the ResourceBundle for this process. Does not take ownership of
|
| + // the |delegate| value. Returns the language selected.
|
| // NOTE: Mac ignores this and always loads up resources for the language
|
| // defined by the Cocoa UI (i.e., NSBundle does the language work).
|
| static std::string InitSharedInstanceWithLocale(
|
| - const std::string& pref_locale);
|
| + const std::string& pref_locale, Delegate* delegate);
|
|
|
| // Initialize the ResourceBundle using given data pack path for testing.
|
| static void InitSharedInstanceWithPakFile(const FilePath& path);
|
| @@ -83,11 +128,13 @@
|
| static ResourceBundle& GetSharedInstance();
|
|
|
| // Check if the .pak for the given locale exists.
|
| - static bool LocaleDataPakExists(const std::string& locale);
|
| + bool LocaleDataPakExists(const std::string& locale);
|
|
|
| - // Registers additional data pack files with the global ResourceBundle. When
|
| + // Registers additional data pack files with this ResourceBundle. When
|
| // looking for a DataResource, we will search these files after searching the
|
| - // main module. |scale_factor| is the scale of images in this resource pak
|
| + // main module. |path| should be the complete path to the pack file if known
|
| + // or just the pack file name otherwise (the delegate may optionally override
|
| + // this value). |scale_factor| is the scale of images in this resource pak
|
| // relative to the images in the 1x resource pak. This method is not thread
|
| // safe! You should call it immediately after calling InitSharedInstance.
|
| void AddDataPack(const FilePath& path, float scale_factor);
|
| @@ -149,10 +196,19 @@
|
| void OverrideLocalePakForTest(const FilePath& pak_path);
|
|
|
| private:
|
| + FRIEND_TEST_ALL_PREFIXES(ResourceBundle, DelegateGetPathForResourcePack);
|
| + FRIEND_TEST_ALL_PREFIXES(ResourceBundle, DelegateGetPathForLocalePack);
|
| + FRIEND_TEST_ALL_PREFIXES(ResourceBundle, DelegateGetImageNamed);
|
| + FRIEND_TEST_ALL_PREFIXES(ResourceBundle, DelegateGetNativeImageNamed);
|
| + FRIEND_TEST_ALL_PREFIXES(ResourceBundle, DelegateLoadDataResourceBytes);
|
| + FRIEND_TEST_ALL_PREFIXES(ResourceBundle, DelegateGetRawDataResource);
|
| + FRIEND_TEST_ALL_PREFIXES(ResourceBundle, DelegateGetLocalizedString);
|
| + FRIEND_TEST_ALL_PREFIXES(ResourceBundle, DelegateGetFont);
|
| FRIEND_TEST_ALL_PREFIXES(ResourceBundle, LoadDataResourceBytes);
|
| + FRIEND_TEST_ALL_PREFIXES(ResourceBundle, LocaleDataPakExists);
|
|
|
| // Ctor/dtor are private, since we're a singleton.
|
| - ResourceBundle();
|
| + explicit ResourceBundle(Delegate* delegate);
|
| ~ResourceBundle();
|
|
|
| // Free skia_images_.
|
| @@ -177,7 +233,7 @@
|
|
|
| // Returns the full pathname of the locale file to load. May return an empty
|
| // string if no locale data files are found.
|
| - static FilePath GetLocaleFilePath(const std::string& app_locale);
|
| + FilePath GetLocaleFilePath(const std::string& app_locale);
|
|
|
| // Creates and returns a new SkBitmap given the data file to look in and the
|
| // resource id. It's up to the caller to free the returned bitmap when
|
| @@ -186,10 +242,14 @@
|
|
|
| // Returns an empty image for when a resource cannot be loaded. This is a
|
| // bright red bitmap.
|
| - gfx::Image* GetEmptyImage();
|
| + gfx::Image& GetEmptyImage();
|
|
|
| const FilePath& GetOverriddenPakPath();
|
|
|
| + // This pointer is guaranteed to outlive the ResourceBundle instance and may
|
| + // be NULL.
|
| + Delegate* delegate_;
|
| +
|
| // Protects |images_| and font-related members.
|
| scoped_ptr<base::Lock> images_and_fonts_lock_;
|
|
|
| @@ -202,9 +262,11 @@
|
|
|
| // Cached images. The ResourceBundle caches all retrieved images and keeps
|
| // ownership of the pointers.
|
| - typedef std::map<int, gfx::Image*> ImageMap;
|
| + typedef std::map<int, gfx::Image> ImageMap;
|
| ImageMap images_;
|
|
|
| + gfx::Image empty_image_;
|
| +
|
| // The various fonts used. Cached to avoid repeated GDI creation/destruction.
|
| scoped_ptr<gfx::Font> base_font_;
|
| scoped_ptr<gfx::Font> bold_font_;
|
|
|