1// Copyright (c) 2012 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_BROWSER_PROCESS_SUB_THREAD_H_
6#define CONTENT_BROWSER_BROWSER_PROCESS_SUB_THREAD_H_
7
8#include "base/basictypes.h"
9#include "content/browser/browser_thread_impl.h"
10#include "content/common/content_export.h"
11
12#if defined(OS_WIN)
13namespace base {
14namespace win {
15class ScopedCOMInitializer;
16}
17}
18#endif
19
20namespace content {
21class NotificationService;
22}
23
24namespace content {
25
26// ----------------------------------------------------------------------------
27// BrowserProcessSubThread
28//
29// This simple thread object is used for the specialized threads that the
30// BrowserProcess spins up.
31//
32// Applications must initialize the COM library before they can call
33// COM library functions other than CoGetMalloc and memory allocation
34// functions, so this class initializes COM for those users.
35class CONTENT_EXPORT BrowserProcessSubThread : public BrowserThreadImpl {
36 public:
37  explicit BrowserProcessSubThread(BrowserThread::ID identifier);
38  virtual ~BrowserProcessSubThread();
39
40 protected:
41  virtual void Init() OVERRIDE;
42  virtual void CleanUp() OVERRIDE;
43
44 private:
45  // These methods encapsulate cleanup that needs to happen on the IO thread
46  // before we call the embedder's CleanUp function.
47  void IOThreadPreCleanUp();
48
49#if defined (OS_WIN)
50  scoped_ptr<base::win::ScopedCOMInitializer> com_initializer_;
51#endif
52
53  // Each specialized thread has its own notification service.
54  scoped_ptr<NotificationService> notification_service_;
55
56  DISALLOW_COPY_AND_ASSIGN(BrowserProcessSubThread);
57};
58
59}  // namespace content
60
61#endif  // CONTENT_BROWSER_BROWSER_PROCESS_SUB_THREAD_H_
62