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_PLUGIN_PLUGIN_THREAD_H_
6#define CONTENT_PLUGIN_PLUGIN_THREAD_H_
7
8#include "base/files/file_path.h"
9#include "base/native_library.h"
10#include "build/build_config.h"
11#include "content/child/child_thread.h"
12#include "content/child/npapi/plugin_lib.h"
13#include "content/plugin/plugin_channel.h"
14
15#if defined(OS_POSIX)
16#include "base/file_descriptor_posix.h"
17#endif
18
19namespace content {
20
21// The PluginThread class represents a background thread where plugin instances
22// live.  Communication occurs between WebPluginDelegateProxy in the renderer
23// process and WebPluginDelegateStub in this thread through IPC messages.
24class PluginThread : public ChildThread {
25 public:
26  PluginThread();
27  virtual ~PluginThread();
28  virtual void Shutdown() OVERRIDE;
29
30  // Returns the one plugin thread.
31  static PluginThread* current();
32
33  // Tells the plugin thread to terminate the process forcefully instead of
34  // exiting cleanly.
35  void SetForcefullyTerminatePluginProcess();
36
37 private:
38  virtual bool OnControlMessageReceived(const IPC::Message& msg) OVERRIDE;
39
40  // Callback for when a channel has been created.
41  void OnCreateChannel(int renderer_id, bool incognito);
42  void OnPluginMessage(const std::vector<uint8> &data);
43  void OnNotifyRenderersOfPendingShutdown();
44#if defined(OS_MACOSX)
45  void OnAppActivated();
46  void OnPluginFocusNotify(uint32 instance_id);
47#endif
48
49  // The plugin module which is preloaded in Init
50  base::NativeLibrary preloaded_plugin_module_;
51
52  bool forcefully_terminate_plugin_process_;
53
54  DISALLOW_COPY_AND_ASSIGN(PluginThread);
55};
56
57}  // namespace content
58
59#endif  // CONTENT_PLUGIN_PLUGIN_THREAD_H_
60