1 // Copyright (c) 2011 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/memory/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 15 static const int kAmountToRead = 256; 16 17 // Gets the singleton 18 MetadataParserManager* MetadataParserManager::GetInstance() { 19 // Uses the LeakySingletonTrait because cleanup is optional. 20 return Singleton<MetadataParserManager, 21 LeakySingletonTraits<MetadataParserManager> >::get(); 22 } 23 24 bool MetadataParserManager::RegisterParserFactory( 25 MetadataParserFactory* parser) { 26 factories_.push_back(parser); 27 return true; 28 } 29 30 MetadataParserManager::MetadataParserManager() { 31 MetadataParserJpegFactory *factory = new MetadataParserJpegFactory(); 32 RegisterParserFactory(factory); 33 } 34 35 MetadataParserManager::~MetadataParserManager() {} 36 37 MetadataParser* MetadataParserManager::GetParserForFile(const FilePath& path) { 38 39 char buffer[kAmountToRead]; 40 int amount_read = 0; 41 DLOG(ERROR) << path.value(); 42 amount_read = file_util::ReadFile(path, buffer, sizeof(buffer)); 43 if (amount_read <= 0) { 44 DLOG(ERROR) << "Unable to read file"; 45 return NULL; 46 } 47 for (size_t x = 0; x < factories_.size(); ++x) { 48 if (factories_[x]->CanParse(path, buffer, amount_read)) { 49 return factories_[x]->CreateParser(path); 50 } 51 } 52 return NULL; 53 } 54