- add sources.
[platform/framework/web/crosswalk.git] / src / content / browser / streams / stream_context.h
1 // Copyright (c) 2013 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 CONTENT_BROWSER_STREAMS_STREAM_CONTEXT_H_
6 #define CONTENT_BROWSER_STREAMS_STREAM_CONTEXT_H_
7
8 #include "base/memory/ref_counted.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/sequenced_task_runner_helpers.h"
11 #include "content/common/content_export.h"
12 #include "content/public/browser/browser_thread.h"
13
14 namespace content {
15 class BrowserContext;
16 class StreamRegistry;
17 struct StreamContextDeleter;
18
19 // A context class that keeps track of StreamRegistry used by the chrome.
20 // There is an instance associated with each BrowserContext. There could be
21 // multiple URLRequestContexts in the same browser context that refers to the
22 // same instance.
23 //
24 // All methods, except the ctor, are expected to be called on
25 // the IO thread (unless specifically called out in doc comments).
26 class StreamContext
27     : public base::RefCountedThreadSafe<StreamContext,
28                                         StreamContextDeleter> {
29  public:
30   StreamContext();
31
32   CONTENT_EXPORT static StreamContext* GetFor(BrowserContext* browser_context);
33
34   void InitializeOnIOThread();
35
36   StreamRegistry* registry() const { return registry_.get(); }
37
38  protected:
39   virtual ~StreamContext();
40
41  private:
42   friend class base::DeleteHelper<StreamContext>;
43   friend class base::RefCountedThreadSafe<StreamContext,
44                                           StreamContextDeleter>;
45   friend struct StreamContextDeleter;
46
47   void DeleteOnCorrectThread() const;
48
49   scoped_ptr<StreamRegistry> registry_;
50 };
51
52 struct StreamContextDeleter {
53   static void Destruct(const StreamContext* context) {
54     context->DeleteOnCorrectThread();
55   }
56 };
57
58 }  // namespace content
59
60 #endif  // CONTENT_BROWSER_STREAMS_STREAM_CONTEXT_H_