Chromium Code Reviews| Index: components/nacl/browser/pnacl_host.h |
| diff --git a/components/nacl/browser/pnacl_host.h b/components/nacl/browser/pnacl_host.h |
| index 268efeb0de2a5b71ae5440a1b780746cb1f1526a..34414b73671d2fe0ee3e5fc93ddb9b635a0751e3 100644 |
| --- a/components/nacl/browser/pnacl_host.h |
| +++ b/components/nacl/browser/pnacl_host.h |
| @@ -10,11 +10,9 @@ |
| #include <map> |
| #include <memory> |
| -#include "base/callback_forward.h" |
| +#include "base/callback.h" |
| #include "base/files/file.h" |
| #include "base/macros.h" |
| -#include "base/memory/singleton.h" |
| -#include "base/memory/weak_ptr.h" |
| #include "base/threading/thread_checker.h" |
| #include "components/nacl/browser/nacl_file_host.h" |
| #include "components/nacl/common/pnacl_types.h" |
| @@ -38,10 +36,17 @@ class PnaclHost { |
| typedef base::Callback<void(base::File)> TempFileCallback; |
| typedef base::Callback<void(const base::File&, bool is_hit)> NexeFdCallback; |
| + // Gets the PnaclHost singleton instance (creating it if necessary). |
| + // PnaclHost is a singleton because there is only one translation cache, and |
| + // so that the BrowsingDataRemover can clear it even if no translation has |
| + // ever been started. |
| static PnaclHost* GetInstance(); |
| - PnaclHost(); |
| - ~PnaclHost(); |
| + // The PnaclHost instance is intentionally leaked on shutdown. DeInitIfSafe() |
| + // attempts to cleanup |disk_cache_| earlier, but if it fails to do so in |
| + // time, it will be too late when AtExitManager kicks in anways so subscribing |
|
Mark Seaborn
2016/08/02 21:47:31
Typo: "anyway"
gab
2016/08/02 21:57:42
Done.
|
| + // to it is useless. |
| + ~PnaclHost() = delete; |
| // Initialize cache backend. GetNexeFd will also initialize the backend if |
| // necessary, but calling Init ahead of time will minimize the latency. |
| @@ -99,16 +104,15 @@ class PnaclHost { |
| const base::Closure& callback); |
| // Return the number of tracked translations or FD requests currently pending. |
| - size_t pending_translations() { return pending_translations_.size(); } |
| + size_t pending_translations() { |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| + return pending_translations_.size(); |
| + } |
| private: |
| - // PnaclHost is a singleton because there is only one translation cache, and |
| - // so that the BrowsingDataRemover can clear it even if no translation has |
| - // ever been started. |
| - friend struct base::DefaultSingletonTraits<PnaclHost>; |
| friend class FileProxy; |
| - friend class pnacl::PnaclHostTest; |
| - friend class pnacl::PnaclHostTestDisk; |
| + friend class PnaclHostTest; |
| + friend class PnaclHostTestDisk; |
| enum CacheState { |
| CacheUninitialized, |
| CacheInitializing, |
| @@ -134,6 +138,9 @@ class PnaclHost { |
| typedef std::pair<int, int> TranslationID; |
| typedef std::map<TranslationID, PendingTranslation> PendingTranslationMap; |
| + |
| + PnaclHost(); |
| + |
| static bool TranslationMayBeCached( |
| const PendingTranslationMap::iterator& entry); |
| @@ -172,13 +179,12 @@ class PnaclHost { |
| // Operations which are pending with the cache backend, which we should |
| // wait for before destroying it (see comment on DeInitIfSafe). |
| - int pending_backend_operations_; |
| - CacheState cache_state_; |
| + int pending_backend_operations_ = 0; |
| + CacheState cache_state_ = CacheUninitialized; |
| base::FilePath temp_dir_; |
| - std::unique_ptr<pnacl::PnaclTranslationCache> disk_cache_; |
| + std::unique_ptr<PnaclTranslationCache> disk_cache_; |
| PendingTranslationMap pending_translations_; |
| base::ThreadChecker thread_checker_; |
| - base::WeakPtrFactory<PnaclHost> weak_factory_; |
| DISALLOW_COPY_AND_ASSIGN(PnaclHost); |
| }; |