remove_stale_cache_files.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/remove_stale_cache_files.h"
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <string>
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <vector>
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/bind.h"
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/logging.h"
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/drive.pb.h"
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_cache.h"
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/resource_metadata.h"
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace drive {
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace internal {
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void RemoveStaleCacheFiles(FileCache* cache,
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                           ResourceMetadata* resource_metadata) {
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  std::vector<std::string> resource_ids_to_be_removed;
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<FileCache::Iterator> it = cache->GetIterator();
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  for (; !it->IsAtEnd(); it->Advance()) {
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ResourceEntry entry;
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FileError error = resource_metadata->GetResourceEntryById(it->GetID(),
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                              &entry);
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    // The entry is not found or the MD5 does not match.
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    if (error != FILE_ERROR_OK ||
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        it->GetValue().md5() != entry.file_specific_info().md5()) {
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      FileError error = cache->Remove(it->GetID());
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      LOG_IF(WARNING, error != FILE_ERROR_OK)
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          << "Failed to remove a stale cache file. resource_id: "
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          << it->GetID();
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    }
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace internal
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace drive
41