Index: content/common/child_process_host.h |
diff --git a/content/common/child_process_host.h b/content/common/child_process_host.h |
index 20708c254ca7acb6f48a51a0dfd902695ced6b69..28b9d670c646c033baaa05f10c3ffc0d15ddee8a 100644 |
--- a/content/common/child_process_host.h |
+++ b/content/common/child_process_host.h |
@@ -8,6 +8,7 @@ |
#include <string> |
#include <vector> |
+#include <map> |
#include "build/build_config.h" |
@@ -17,6 +18,7 @@ |
#include "base/basictypes.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/memory/singleton.h" |
#include "content/common/content_notification_types.h" |
#include "ipc/ipc_channel_proxy.h" |
@@ -86,7 +88,8 @@ class ChildProcessHost : public IPC::Channel::Listener, |
#if defined(OS_WIN) |
// See comments in the cc file. This is a common hack needed for a process |
// hosting a sandboxed child process. Hence it lives in this file. |
- static void PreCacheFont(LOGFONT font); |
+ static void PreCacheFont(LOGFONT font, int pid); |
+ static void ReleaseCachedFonts(int pid); |
#endif // defined(OS_WIN) |
// IPC::Message::Sender implementation. |
@@ -148,6 +151,35 @@ class ChildProcessHost : public IPC::Channel::Listener, |
ListenerHook listener_; |
+#if defined (OS_WIN) |
+ class FontCache { |
+ public: |
+ static FontCache* GetInstance(); |
+ void PreCacheFont(LOGFONT font, int pid); |
+ void ReleaseCachedFonts(int pid); |
+ |
+ private: |
+ struct CacheElement { |
+ CacheElement(); |
+ ~CacheElement(); |
+ |
+ HFONT font_; |
+ HDC dc_; |
+ int ref_count_; |
+ }; |
+ |
+ FontCache(); |
+ ~FontCache(); |
+ |
+ std::map<std::wstring, CacheElement> cache_; |
+ std::map<int, std::vector<std::wstring> > pid_font_map_; |
+ base::Lock mutex_; |
+ |
+ friend struct DefaultSingletonTraits<FontCache>; |
rvargas (doing something else)
2011/09/14 21:21:36
Sorry I was not clear, struct declarations go befo
arthurhsu
2011/09/15 05:52:47
Done.
|
+ DISALLOW_COPY_AND_ASSIGN(FontCache); |
+ }; |
+#endif |
+ |
bool opening_channel_; // True while we're waiting the channel to be opened. |
scoped_ptr<IPC::Channel> channel_; |
std::string channel_id_; |