| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/parsers/metadata_parser_manager.h" |
| |
| #include "base/logging.h" |
| #include "base/file_util.h" |
| #include "base/memory/singleton.h" |
| #include "base/stl_util.h" |
| #include "build/build_config.h" |
| #include "chrome/browser/parsers/metadata_parser_factory.h" |
| #include "chrome/browser/parsers/metadata_parser_jpeg_factory.h" |
| |
| static const int kAmountToRead = 256; |
| |
| // Gets the singleton |
| MetadataParserManager* MetadataParserManager::GetInstance() { |
| // Uses the LeakySingletonTrait because cleanup is optional. |
| return Singleton<MetadataParserManager, |
| LeakySingletonTraits<MetadataParserManager> >::get(); |
| } |
| |
| bool MetadataParserManager::RegisterParserFactory( |
| MetadataParserFactory* parser) { |
| factories_.push_back(parser); |
| return true; |
| } |
| |
| MetadataParserManager::MetadataParserManager() { |
| MetadataParserJpegFactory *factory = new MetadataParserJpegFactory(); |
| RegisterParserFactory(factory); |
| } |
| |
| MetadataParserManager::~MetadataParserManager() {} |
| |
| MetadataParser* MetadataParserManager::GetParserForFile( |
| const base::FilePath& path) { |
| char buffer[kAmountToRead]; |
| int amount_read = 0; |
| DLOG(ERROR) << path.value(); |
| amount_read = base::ReadFile(path, buffer, sizeof(buffer)); |
| if (amount_read <= 0) { |
| DLOG(ERROR) << "Unable to read file"; |
| return NULL; |
| } |
| for (size_t x = 0; x < factories_.size(); ++x) { |
| if (factories_[x]->CanParse(path, buffer, amount_read)) { |
| return factories_[x]->CreateParser(path); |
| } |
| } |
| return NULL; |
| } |