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 "base/logging.h" 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/drive.pb.h" 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_cache.h" 1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/resource_metadata.h" 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace drive { 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace internal { 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void RemoveStaleCacheFiles(FileCache* cache, 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ResourceMetadata* resource_metadata) { 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<ResourceMetadata::Iterator> it = resource_metadata->GetIterator(); 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (; !it->IsAtEnd(); it->Advance()) { 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const ResourceEntry& entry = it->GetValue(); 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const FileCacheEntry& cache_state = 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) entry.file_specific_info().cache_state(); 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Stale = not dirty but the MD5 does not match. 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!cache_state.is_dirty() && 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) cache_state.md5() != entry.file_specific_info().md5()) { 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FileError error = cache->Remove(it->GetID()); 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch LOG_IF(WARNING, error != FILE_ERROR_OK) 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch << "Failed to remove a stale cache file. resource_id: " 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch << it->GetID(); 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace internal 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace drive 35