1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_PARSERS_METADATA_PARSER_MANAGER_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_PARSERS_METADATA_PARSER_MANAGER_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_vector.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MetadataParserFactory;
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass FilePath;
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MetadataParser;
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Metadata Parser manager is used to find the correct parser for a
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// given file.  Allows parsers to register themselves.
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MetadataParserManager {
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Creates a new MetadataParserManager.
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MetadataParserManager();
22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ~MetadataParserManager();
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Gets the singleton
2521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  static MetadataParserManager* GetInstance();
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Adds a new Parser to the manager, when requests come in for a parser
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the manager will loop through the list of parsers, and query each.
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool RegisterParserFactory(MetadataParserFactory* parser);
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns a new metadata parser for a given file.
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MetadataParser* GetParserForFile(const FilePath& path);
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ScopedVector<MetadataParserFactory> factories_;
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(MetadataParserManager);
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_PARSERS_METADATA_PARSER_MANAGER_H_
41