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