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_UTILITY_UTILITY_THREAD_IMPL_H_
6#define CONTENT_UTILITY_UTILITY_THREAD_IMPL_H_
7
8#include <string>
9#include <vector>
10
11#include "base/basictypes.h"
12#include "base/compiler_specific.h"
13#include "content/child/child_thread.h"
14#include "content/common/content_export.h"
15#include "content/public/utility/utility_thread.h"
16
17namespace base {
18class FilePath;
19}
20
21namespace content {
22class WebKitPlatformSupportImpl;
23
24// This class represents the background thread where the utility task runs.
25class UtilityThreadImpl : public UtilityThread,
26                          public ChildThread {
27 public:
28  UtilityThreadImpl();
29  // Constructor that's used when running in single process mode.
30  explicit UtilityThreadImpl(const std::string& channel_name);
31  virtual ~UtilityThreadImpl();
32  virtual void Shutdown() OVERRIDE;
33
34  virtual bool Send(IPC::Message* msg) OVERRIDE;
35  virtual void ReleaseProcessIfNeeded() OVERRIDE;
36#if defined(OS_WIN)
37  virtual void PreCacheFont(const LOGFONT& log_font) OVERRIDE;
38  virtual void ReleaseCachedFonts() OVERRIDE;
39#endif
40
41 private:
42  void Init();
43
44  // ChildThread implementation.
45  virtual bool OnControlMessageReceived(const IPC::Message& msg) OVERRIDE;
46
47  // IPC message handlers.
48  void OnBatchModeStarted();
49  void OnBatchModeFinished();
50
51#if defined(OS_POSIX)
52  void OnLoadPlugins(const std::vector<base::FilePath>& plugin_paths);
53#endif  // OS_POSIX
54
55  // True when we're running in batch mode.
56  bool batch_mode_;
57
58  // True if running in single process mode.
59  bool single_process_;
60
61  scoped_ptr<WebKitPlatformSupportImpl> webkit_platform_support_;
62
63  DISALLOW_COPY_AND_ASSIGN(UtilityThreadImpl);
64};
65
66}  // namespace content
67
68#endif  // CONTENT_UTILITY_UTILITY_THREAD_IMPL_H_
69