
Review URL: http://codereview.chromium.org/6047008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70229 0039d316-1c4b-4281-b951-d872f2087c98
160 lines
4.4 KiB
C++
160 lines
4.4 KiB
C++
// Copyright (c) 2010 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.
|
|
|
|
#ifndef PPAPI_CPP_INSTANCE_H_
|
|
#define PPAPI_CPP_INSTANCE_H_
|
|
|
|
/**
|
|
* @file
|
|
* Defines the API ...
|
|
*
|
|
* @addtogroup CPP
|
|
* @{
|
|
*/
|
|
|
|
#include <map>
|
|
#include <string>
|
|
|
|
#include "ppapi/c/pp_instance.h"
|
|
#include "ppapi/c/pp_resource.h"
|
|
#include "ppapi/c/pp_stdint.h"
|
|
|
|
struct PP_InputEvent;
|
|
|
|
/** The C++ interface to the Pepper API. */
|
|
namespace pp {
|
|
|
|
class Graphics2D;
|
|
class ImageData;
|
|
class Point;
|
|
class Rect;
|
|
class Rect;
|
|
class Resource;
|
|
class Surface3D_Dev;
|
|
class URLLoader;
|
|
class Var;
|
|
class Widget_Dev;
|
|
|
|
class Instance {
|
|
public:
|
|
explicit Instance(PP_Instance instance);
|
|
virtual ~Instance();
|
|
|
|
PP_Instance pp_instance() const { return pp_instance_; }
|
|
|
|
/**
|
|
* Initializes this plugin with the given arguments.
|
|
* @param argc The argument count
|
|
* @param argn The argument names
|
|
* @param argv The argument values
|
|
* @return True on success. Returning false causes the plugin
|
|
* instance to be deleted and no other functions to be called.
|
|
*/
|
|
virtual bool Init(uint32_t argc, const char* argn[], const char* argv[]);
|
|
|
|
|
|
// @{
|
|
/** @name PPP_Instance methods for the plugin to override: */
|
|
|
|
/** See PPP_Instance.DidChangeView. */
|
|
virtual void DidChangeView(const Rect& position, const Rect& clip);
|
|
|
|
/** See PPP_Instance.DidChangeFocus. */
|
|
virtual void DidChangeFocus(bool has_focus);
|
|
|
|
/** See PPP_Instance.HandleInputEvent. */
|
|
virtual bool HandleInputEvent(const PP_InputEvent& event);
|
|
|
|
/** See PPP_Instance.HandleDocumentLoad. */
|
|
virtual bool HandleDocumentLoad(const URLLoader& url_loader);
|
|
|
|
/** See PPP_Instance.GetInstanceObject. */
|
|
virtual Var GetInstanceObject();
|
|
|
|
/** See PPP_Instance.GetSelectedText. */
|
|
virtual Var GetSelectedText(bool html);
|
|
// @}
|
|
|
|
// @{
|
|
/** @name PPB_Instance methods for querying the browser: */
|
|
|
|
/** See PPB_Instance.GetWindowObject. */
|
|
Var GetWindowObject();
|
|
|
|
/** See PPB_Instance.GetOwnerElementObject. */
|
|
Var GetOwnerElementObject();
|
|
|
|
/** See PPB_Instance.BindGraphics. */
|
|
bool BindGraphics(const Graphics2D& graphics);
|
|
|
|
/** See PPB_Instance.BindGraphics. */
|
|
bool BindGraphics(const Surface3D_Dev& graphics);
|
|
|
|
/** See PPB_Instance.IsFullFrame. */
|
|
bool IsFullFrame();
|
|
|
|
/** See PPB_Instance.ExecuteScript. */
|
|
Var ExecuteScript(const Var& script, Var* exception = NULL);
|
|
// @}
|
|
|
|
/**
|
|
* Associates a plugin instance with an interface,
|
|
* creating an object... {PENDING: clarify!}
|
|
*
|
|
* Many optional interfaces are associated with a plugin instance. For
|
|
* example, the find in PPP_Find interface receives updates on a per-instance
|
|
* basis. This "per-instance" tracking allows such objects to associate
|
|
* themselves with an instance as "the" handler for that interface name.
|
|
*
|
|
* In the case of the find example, the find object registers with its
|
|
* associated instance in its constructor and unregisters in its destructor.
|
|
* Then whenever it gets updates with a PP_Instance parameter, it can
|
|
* map back to the find object corresponding to that given PP_Instance by
|
|
* calling GetPerInstanceObject.
|
|
*
|
|
* This lookup is done on a per-interface-name basis. This means you can
|
|
* only have one object of a given interface name associated with an
|
|
* instance.
|
|
*
|
|
* If you are adding a handler for an additional interface, be sure to
|
|
* register with the module (AddPluginInterface) for your interface name to
|
|
* get the C calls in the first place.
|
|
*
|
|
* @see RemovePerInstanceObject
|
|
* @see GetPerInstanceObject
|
|
*/
|
|
void AddPerInstanceObject(const std::string& interface_name, void* object);
|
|
|
|
/**
|
|
* {PENDING: summarize Remove method here}
|
|
*
|
|
* @see AddPerInstanceObject
|
|
*/
|
|
void RemovePerInstanceObject(const std::string& interface_name, void* object);
|
|
|
|
/**
|
|
* Look up an object previously associated with an instance. Returns NULL
|
|
* if the instance is invalid or there is no object for the given interface
|
|
* name on the instance.
|
|
*
|
|
* @see AddPerInstanceObject
|
|
*/
|
|
static void* GetPerInstanceObject(PP_Instance instance,
|
|
const std::string& interface_name);
|
|
|
|
private:
|
|
PP_Instance pp_instance_;
|
|
|
|
typedef std::map<std::string, void*> InterfaceNameToObjectMap;
|
|
InterfaceNameToObjectMap interface_name_to_objects_;
|
|
};
|
|
|
|
} // namespace pp
|
|
|
|
/**
|
|
* @}
|
|
* End addtogroup CPP
|
|
*/
|
|
#endif // PPAPI_CPP_INSTANCE_H_
|