1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
/* Copyright (c) 2011 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/* This file defines the PPP_Instance structure - a series of points to methods
* that you must implement in your model.
*/
/* The PPP_Instance interface contains series of functions that you must
* implement in your module. These functions can be trivial (simply return the
* default return value) unless you want your module to handle events such as
* change of focus or input events (keyboard/mouse) events.
*/
interface PPP_Instance_0_4 {
/* Function that is called when a new module is instantiated on the web
* page. The identifier of the new instance will be passed in as the first
* argument (this value is generated by the browser and is an opaque
* handle). This is called for each instantiation of the NaCl module, which
* is each time the <embed> tag for this module is encountered.
*
* It's possible for more than one module instance to be created
* (i.e. you may get more than one OnCreate without an OnDestroy
* in between).
*
* If this function reports a failure (by returning @a PP_FALSE), the NaCl
* module will be deleted and DidDestroy will be called.
*
* Returns PP_TRUE on success.
*/
PP_Bool DidCreate(
/* A PP_Instance indentifying one instance of a module. */
[in] PP_Instance instance,
/* The number of arguments contained in argn and argv. */
[in] uint32_t argc,
/* An array of argument names. These argument names are
* supplied in the <embed> tag, for example:
* <embed id="nacl_module" dimensions="2"> will produce two argument
* names: "id" and "dimensions."
*/
[in, size_is(argc)] str_t[] argn,
/* An array of argument values. These are the values of the
* arguments listed in the <embed> tag, for example
* <embed id="nacl_module" dimensions="2"> will produce two argument
* values: "nacl_module" and "2." The indices of these values match the
* indices of the corresponding names in argn.
*/
[in, size_is(argc)] str_t[] argv);
/* Function that is called when the module instance is destroyed. This
* function will always be called, even if DidCreate returned failure.
* The function should deallocate any data associated with the instance.
*/
void DidDestroy(
/* A PP_Instance indentifying one instance of a module. */
[in] PP_Instance instance);
/* Function that is called when the position, the size, or the clip
* rectangle of the element in the browser that corresponds to this instance
* has changed.
*/
void DidChangeView(
/* A PP_Instance indentifying the instance whose view changed. */
[in] PP_Instance instance,
/* The new location on the page of this instance. This is relative to
* the top left corner of the viewport, which changes as the
* page is scrolled.
*/
[in] PP_Rect position,
/* The visible region of the NaCl module. This is relative to the top
* left of the plugin's coordinate system (not the page) If the plugin
* is invisible, clip will be (0, 0, 0, 0).
*/
[in] PP_Rect clip);
/* Function to handle when your instance has gained or lost focus. Having
* focus means that keyboard events will be sent to the module. An
* instance's default condition is that it will not have focus.
*
* Note: clicks on modules will give focus only if you handle the
* click event. Return true from HandleInputEvent to signal that the click
* event was handled. Otherwise the browser will bubble the event and give
* focus to the element on the page that actually did end up consuming it.
* If you're not getting focus, check to make sure you're returning true
* from the mouse click in HandleInputEvent.
*/
void DidChangeFocus(
/* A PP_Instance indentifying one instance of a module. */
[in] PP_Instance instance,
/* Indicates whether this NaCl module gained or lost event focus. */
[in] PP_Bool has_focus);
/* Function to handle input events.
*
* Returns true if the event was handled or false if it was not. If the
* event was handled, it will not be forwarded to the web page or browser.
* If it was not handled, it will bubble according to the normal rules. So
* it is important that a module respond accurately with whether event
* propogation should continue.
*
* Event propogation also controls focus. If you handle an event like a
* mouse event, typically your module will be given focus. Returning false
* means that the click will be given to a lower part of the page and your
* module will not receive focus. This allows a module to be partially
* transparent, where clicks on the transparent areas will behave like
* clicks to the underlying page.
*
* Returns PP_TRUE if event was handled, PP_FALSE otherwise.
*/
PP_Bool HandleInputEvent(
/* A PP_Instance indentifying one instance of a module. */
[in] PP_Instance instance,
/* The event. */
[in] PP_InputEvent event);
/* This value represents a pointer to a function that is called after
* initialize for a full-frame plugin that was instantiated based on the MIME
* type of a DOMWindow navigation. This only applies to modules that are
* registered to handle certain MIME types (not current Native Client
* modules).
*
* The given url_loader corresponds to a PPB_URLLoader instance that is
* already opened. Its response headers may be queried using
* PPB_URLLoader::GetResponseInfo. The url loader is not addrefed on behalf
* of the module, if you're going to keep a reference to it, you need to
* addref it yourself.
*
* This method returns PP_FALSE if the module cannot handle the data. In
* response to this method, the module should call ReadResponseBody to read
* the incoming data.
*
* Returns PP_TRUE if the data was handled, PP_FALSE otherwise.
*/
PP_Bool HandleDocumentLoad(
/* A PP_Instance indentifying one instance of a module. */
[in] PP_Instance instance,
/* A PP_Resource an open PPB_URLLoader instance. */
[in] PP_Resource url_loader);
/* This value represents a pointer to a function that returns a Var
* representing the scriptable object for the given instance. Normally
* this will be a PPP_Class object that exposes certain methods the page
* may want to call.
*
* On Failure, the returned var should be a "void" var.
*
* The returned PP_Var should have a reference added for the caller, which
* will be responsible for Release()ing that reference.
*
* Returns a PP_Var containing scriptable object.
*/
PP_Var GetInstanceObject(
/* A PP_Instance indentifying one instance of a module. */
[in] PP_Instance instance);
};
|