source: trunk/icedtea-web/plugin/icedteanp/IcedTeaNPPlugin.h@ 384

Last change on this file since 384 was 369, checked in by dmik, 13 years ago

icedtea-web: Replace pthread_cancel() with old good flag variable.

This is because the whole pthreads cancellation machinery (cancellation
points, cleanup routines, etc.) is not implemented on OS/2.

File size: 5.1 KB
Line 
1/* IcedTeaNPPlugin.h
2
3 Copyright (C) 2009, 2010 Red Hat
4
5This file is part of IcedTea.
6
7IcedTea is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12IcedTea is distributed in the hope that it will be useful, but
13WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with IcedTea; see the file COPYING. If not, write to the
19Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
2002110-1301 USA.
21
22Linking this library statically or dynamically with other modules is
23making a combined work based on this library. Thus, the terms and
24conditions of the GNU General Public License cover the whole
25combination.
26
27As a special exception, the copyright holders of this library give you
28permission to link this library with independent modules to produce an
29executable, regardless of the license terms of these independent
30modules, and to copy and distribute the resulting executable under
31terms of your choice, provided that you also meet, for each linked
32independent module, the terms and conditions of the license of that
33module. An independent module is a module which is not derived from
34or based on this library. If you modify this library, you may extend
35this exception to your version of the library, but you are not
36obligated to do so. If you do not wish to do so, delete this
37exception statement from your version. */
38
39#ifndef __ICEDTEANPPLUGIN_H__
40#define __ICEDTEANPPLUGIN_H__
41
42#if MOZILLA_VERSION_COLLAPSED < 1090100
43#include <nsThreadUtils.h>
44#else
45#include <npapi.h>
46#include <npruntime.h>
47#include <npfunctions.h>
48#endif
49
50// GLib includes.
51#include <glib.h>
52#include <glib/gstdio.h>
53
54#ifndef __OS2__
55// GTK includes.
56#include <gtk/gtk.h>
57#endif
58
59#include "IcedTeaPluginUtils.h"
60#include "IcedTeaPluginRequestProcessor.h"
61
62// ITNPPluginData stores all the data associated with a single plugin
63// instance. A separate plugin instance is created for each <APPLET>
64// tag. For now, each plugin instance spawns its own applet viewer
65// process but this may need to change if we find pages containing
66// multiple applets that expect to be running in the same VM.
67struct ITNPPluginData
68{
69 // A unique identifier for this plugin window.
70 gchar* instance_id;
71 // The applet tag sent to Java side
72 gchar* applet_tag;
73 // Mutex to protect appletviewer_alive.
74 GMutex* appletviewer_mutex;
75 // Back-pointer to the plugin instance to which this data belongs.
76 // This should not be freed but instead simply set to NULL.
77 NPP owner;
78 // The address of the plugin window. This should not be freed but
79 // instead simply set to NULL.
80 gpointer window_handle;
81 // The last plugin window width sent to us by the browser.
82 guint32 window_width;
83 // The last plugin window height sent to us by the browser.
84 guint32 window_height;
85 // The source location for this instance
86 gchar* source;
87 // If this is an actual applet instance, or a dummy instance for static calls
88 bool is_applet_instance;
89};
90
91// Queue processing threads
92static pthread_t plugin_request_processor_thread1;
93static pthread_t plugin_request_processor_thread2;
94static pthread_t plugin_request_processor_thread3;
95
96#ifdef __OS2__
97struct QueueProcessorData
98{
99 PluginRequestProcessor *processor;
100 bool stopRequested;
101};
102
103static QueueProcessorData queue_processor_data1 = { NULL, false };
104static QueueProcessorData queue_processor_data2 = { NULL, false };
105static QueueProcessorData queue_processor_data3 = { NULL, false };
106#endif
107
108// Condition on which the queue processor waits
109extern pthread_cond_t cond_message_available;
110
111// ID of plug-in thread
112extern pthread_t itnp_plugin_thread_id;
113
114/* Mutex around plugin async call queue ops */
115extern pthread_mutex_t pluginAsyncCallMutex;
116
117// debug switch
118extern int plugin_debug;
119
120// Browser function table.
121extern NPNetscapeFuncs browser_functions;
122
123// messages to the java side
124extern MessageBus* plugin_to_java_bus;
125
126// messages from the java side
127extern MessageBus* java_to_plugin_bus;
128
129// internal messages (e.g ones that need processing in main thread)
130//extern MessageBus* internal_bus;
131
132// subscribes to plugin_to_java_bus and sends messages over the link
133extern JavaMessageSender java_request_processor;
134
135// processes requests made to the plugin
136extern PluginRequestProcessor plugin_request_processor;
137
138/* Given an instance pointer, return its id */
139void get_instance_from_id(int id, NPP& instance);
140
141/* Given an instance id, return its pointer */
142int get_id_from_instance(NPP instance);
143
144/* Sends a message to the appletviewer */
145void plugin_send_message_to_appletviewer(gchar const* message);
146
147/* Returns an appropriate (package/object) scriptable npobject */
148NPObject* get_scriptable_object(NPP instance);
149
150/* Creates a new scriptable plugin object and returns it */
151NPObject* allocate_scriptable_object(NPP npp, NPClass *aClass);
152
153#endif /* __ICEDTEANPPLUGIN_H__ */
Note: See TracBrowser for help on using the repository browser.