metadata_parser_manager.cc revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/parsers/metadata_parser_manager.h" 6 7#include "base/logging.h" 8#include "base/file_util.h" 9#include "base/singleton.h" 10#include "base/stl_util-inl.h" 11#include "build/build_config.h" 12#include "chrome/browser/parsers/metadata_parser_factory.h" 13#include "chrome/browser/parsers/metadata_parser_jpeg_factory.h" 14 15static const int kAmountToRead = 256; 16 17// Gets the singleton 18MetadataParserManager* MetadataParserManager::Get() { 19 // Uses the LeakySingletonTrait because cleanup is optional. 20 return 21 Singleton<MetadataParserManager, 22 LeakySingletonTraits<MetadataParserManager> >::get(); 23 } 24 25bool MetadataParserManager::RegisterParserFactory( 26 MetadataParserFactory* parser) { 27 factories_.push_back(parser); 28 return true; 29} 30 31MetadataParserManager::MetadataParserManager() { 32 MetadataParserJpegFactory *factory = new MetadataParserJpegFactory(); 33 RegisterParserFactory(factory); 34} 35 36MetadataParser* MetadataParserManager::GetParserForFile(const FilePath& path) { 37 38 char buffer[kAmountToRead]; 39 int amount_read = 0; 40 DLOG(ERROR) << path.value(); 41 amount_read = file_util::ReadFile(path, buffer, sizeof(buffer)); 42 if (amount_read <= 0) { 43 DLOG(ERROR) << "Unable to read file"; 44 return NULL; 45 } 46 for (size_t x = 0; x < factories_.size(); ++x) { 47 if (factories_[x]->CanParse(path, buffer, amount_read)) { 48 return factories_[x]->CreateParser(path); 49 } 50 } 51 return NULL; 52} 53