blob: 4bc0ef10c0a8de07482bcc53a2e6c47d5e851e5a [file] [log] [blame]
/* 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);
};