1// Copyright (c) 2010 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#ifndef NET_SOCKET_STREAM_SOCKET_STREAM_JOB_MANAGER_H_
6#define NET_SOCKET_STREAM_SOCKET_STREAM_JOB_MANAGER_H_
7
8#include <map>
9#include <string>
10
11#include "net/socket_stream/socket_stream.h"
12#include "net/socket_stream/socket_stream_job.h"
13
14template <typename T> struct DefaultSingletonTraits;
15class GURL;
16
17namespace net {
18
19class SocketStreamJobManager {
20 public:
21  // Returns the singleton instance.
22  static SocketStreamJobManager* GetInstance();
23
24  SocketStreamJob* CreateJob(
25      const GURL& url, SocketStream::Delegate* delegate,
26      URLRequestContext* context, CookieStore* cookie_store) const;
27
28  SocketStreamJob::ProtocolFactory* RegisterProtocolFactory(
29      const std::string& scheme, SocketStreamJob::ProtocolFactory* factory);
30
31 private:
32  friend struct DefaultSingletonTraits<SocketStreamJobManager>;
33  typedef std::map<std::string, SocketStreamJob::ProtocolFactory*> FactoryMap;
34
35  SocketStreamJobManager();
36  ~SocketStreamJobManager();
37
38  mutable base::Lock lock_;
39  FactoryMap factories_;
40
41  DISALLOW_COPY_AND_ASSIGN(SocketStreamJobManager);
42};
43
44}  // namespace net
45
46#endif  // NET_SOCKET_STREAM_SOCKET_STREAM_JOB_MANAGER_H_
47