gdata: Move GDataCache::CacheEntry out of GDataCache

Along the way, rename it to GDataCacheEntry to be consistent
with other classes, and put it in a separate header file.

FWIW, nested classes are usually avoided.
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Nested_Classes

BUG=136625
TEST=out/Release/unit_tests --gtest_filter=GData*

Review URL: https://chromiumcodereview.appspot.com/10690149

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@146236 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/chromeos/gdata/gdata_cache.h b/chrome/browser/chromeos/gdata/gdata_cache.h
index 9ad39eda..dd29b26 100644
--- a/chrome/browser/chromeos/gdata/gdata_cache.h
+++ b/chrome/browser/chromeos/gdata/gdata_cache.h
@@ -14,6 +14,7 @@
 #include "base/observer_list.h"
 #include "base/platform_file.h"
 #include "base/threading/sequenced_worker_pool.h"
+#include "chrome/browser/chromeos/gdata/gdata_cache_entry.h"
 
 class Profile;
 
@@ -48,6 +49,13 @@
 typedef base::Callback<void(const std::vector<std::string>& resource_ids)>
     GetResourceIdsCallback;
 
+// Callback for GetCacheEntryOnUIThread.
+// |success| indicates if the operation was successful.
+// |cache_entry| is the obtained cache entry. On failure, |cache_state| is
+// set to CACHE_STATE_NONE.
+typedef base::Callback<void(bool success, const GDataCacheEntry& cache_entry)>
+    GetCacheEntryCallback;
+
 // GDataCache is used to maintain cache states of GDataFileSystem.
 //
 // All non-static public member functions, unless mentioned otherwise (see
@@ -77,16 +85,6 @@
     NUM_CACHE_TYPES,           // This must be at the end.
   };
 
-  // This is used as a bitmask for the cache state.
-  enum CacheState {
-    CACHE_STATE_NONE       = 0x0,
-    CACHE_STATE_PINNED     = 0x1 << 0,
-    CACHE_STATE_PRESENT    = 0x1 << 1,
-    CACHE_STATE_DIRTY      = 0x1 << 2,
-    CACHE_STATE_MOUNTED    = 0x1 << 3,
-    CACHE_STATE_PERSISTENT = 0x1 << 4,
-  };
-
   // Enum defining origin of a cached file.
   enum CachedFileOrigin {
     CACHED_FILE_FROM_SERVER = 0,
@@ -118,98 +116,6 @@
     virtual ~Observer() {}
   };
 
-  // Structure to store information of an existing cache file.
-  class CacheEntry {
-   public:
-    CacheEntry() : cache_state_(CACHE_STATE_NONE) {}
-
-    CacheEntry(const std::string& md5,
-               int cache_state)
-        : md5_(md5),
-          cache_state_(cache_state) {
-    }
-
-    // The MD5 of the cache file. This can be "local" if the file is
-    // locally modified.
-    const std::string& md5() const { return md5_; }
-
-    // The cache state represented as a bitmask of GDataCacheState.
-    int cache_state() const { return cache_state_; }
-
-    void set_md5(const std::string& md5) { md5_ = md5; }
-    void set_cache_state(int cache_state) { cache_state_ = cache_state; }
-
-    // Returns true if the file is present locally.
-    bool IsPresent() const { return cache_state_ & CACHE_STATE_PRESENT; }
-
-    // Returns true if the file is pinned (i.e. available offline).
-    bool IsPinned() const { return cache_state_ & CACHE_STATE_PINNED; }
-
-    // Returns true if the file is dirty (i.e. modified locally).
-    bool IsDirty() const { return cache_state_ & CACHE_STATE_DIRTY; }
-
-    // Returns true if the file is a mounted archive file.
-    bool IsMounted() const { return cache_state_ & CACHE_STATE_MOUNTED; }
-
-    // Returns true if the file is in the persistent directory.
-    bool IsPersistent() const { return cache_state_ & CACHE_STATE_PERSISTENT; }
-
-    // Setters for the states describe above.
-    void SetPresent(bool value) {
-      if (value)
-        cache_state_ |= CACHE_STATE_PRESENT;
-      else
-        cache_state_ &= ~CACHE_STATE_PRESENT;
-    }
-    void SetPinned(bool value) {
-      if (value)
-        cache_state_ |= CACHE_STATE_PINNED;
-      else
-        cache_state_ &= ~CACHE_STATE_PINNED;
-    }
-    void SetDirty(bool value) {
-      if (value)
-        cache_state_ |= CACHE_STATE_DIRTY;
-      else
-        cache_state_ &= ~CACHE_STATE_DIRTY;
-    }
-    void SetMounted(bool value) {
-      if (value)
-        cache_state_ |= CACHE_STATE_MOUNTED;
-      else
-        cache_state_ &= ~CACHE_STATE_MOUNTED;
-    }
-    void SetPersistent(bool value) {
-      if (value)
-        cache_state_ |= CACHE_STATE_PERSISTENT;
-      else
-        cache_state_ &= ~CACHE_STATE_PERSISTENT;
-    }
-
-    // Returns the type of the sub directory where the cache file is stored.
-    CacheSubDirectoryType GetSubDirectoryType() const {
-      return IsPersistent() ? CACHE_TYPE_PERSISTENT : CACHE_TYPE_TMP;
-    }
-
-    // For debugging purposes.
-    std::string ToString() const;
-
-   private:
-    std::string md5_;
-    int cache_state_;
-  };
-
-  // Callback for GetCacheEntryOnUIThread.
-  // |success| indicates if the operation was successful.
-  // |cache_entry| is the obtained cache entry. On failure, |cache_state| is
-  // set to CACHE_STATE_NONE.
-  //
-  // TODO(satorux): Unlike other callback types, this has to be defined
-  // inside GDataCache as CacheEntry is inside GDataCache. We should get them
-  // outside of GDataCache.
-  typedef base::Callback<void(bool success, const CacheEntry& cache_entry)>
-      GetCacheEntryCallback;
-
   // Returns the sub-directory under gdata cache directory for the given sub
   // directory type. Example:  <user_profile_dir>/GCache/v1/tmp
   //
@@ -350,8 +256,8 @@
   // |md5| can be empty if only matching |resource_id| is desired, which may
   // happen when looking for pinned entries where symlinks' filenames have no
   // extension and hence no md5.
-  scoped_ptr<CacheEntry> GetCacheEntry(const std::string& resource_id,
-                                       const std::string& md5);
+  scoped_ptr<GDataCacheEntry> GetCacheEntry(const std::string& resource_id,
+                                            const std::string& md5);
 
   // Factory methods for GDataCache.
   // |pool| and |sequence_token| are used to assert that the functions are
@@ -383,6 +289,10 @@
   static bool CreateCacheDirectories(
       const std::vector<FilePath>& paths_to_create);
 
+  // Returns the type of the sub directory where the cache file is stored.
+  static CacheSubDirectoryType GetSubDirectoryType(
+      const GDataCacheEntry& cache_entry);
+
  private:
   GDataCache(
       const FilePath& cache_root_path,
@@ -485,7 +395,7 @@
   void GetCacheEntryHelper(const std::string& resource_id,
                            const std::string& md5,
                            bool* success,
-                           GDataCache::CacheEntry* cache_entry);
+                           GDataCacheEntry* cache_entry);
 
   // The root directory of the cache (i.e. <user_profile_dir>/GCache/v1).
   const FilePath cache_root_path_;