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