blob: 066b50fc861622a60d4072988d9c79976998d84d [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.
*/
#ifndef PPAPI_C_DEV_PPB_TESTING_DEV_H_
#define PPAPI_C_DEV_PPB_TESTING_DEV_H_
#include "ppapi/c/pp_bool.h"
#include "ppapi/c/pp_instance.h"
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_stdint.h"
struct PP_Point;
// TODO(dmichael): Delete support for 0.6.
#define PPB_TESTING_DEV_INTERFACE_0_6 "PPB_Testing(Dev);0.6"
#define PPB_TESTING_DEV_INTERFACE_0_7 "PPB_Testing(Dev);0.7"
#define PPB_TESTING_DEV_INTERFACE PPB_TESTING_DEV_INTERFACE_0_7
// This interface contains functions used for unit testing. Do not use in
// production code. They are not guaranteed to be available in normal plugin
// environments so you should not depend on them.
struct PPB_Testing_Dev {
// Reads the bitmap data out of the backing store for the given
// DeviceContext2D and into the given image. If the data was successfully
// read, it will return PP_TRUE.
//
// This function should not generally be necessary for normal plugin
// operation. If you want to update portions of a device, the expectation is
// that you will either regenerate the data, or maintain a backing store
// pushing updates to the device from your backing store via PaintImageData.
// Using this function will introduce an extra copy which will make your
// plugin slower. In some cases, this may be a very expensive operation (it
// may require slow cross-process transitions or graphics card readbacks).
//
// Data will be read into the image starting at |top_left| in the device
// context, and proceeding down and to the right for as many pixels as the
// image is large. If any part of the image bound would fall outside of the
// backing store of the device if positioned at |top_left|, this function
// will fail and return PP_FALSE.
//
// The image format must be of the format
// PPB_ImageData.GetNativeImageDataFormat() or this function will fail and
// return PP_FALSE.
//
// The returned image data will represent the current status of the backing
// store. This will not include any paint, scroll, or replace operations
// that have not yet been flushed; these operations are only reflected in
// the backing store (and hence ReadImageData) until after a Flush()
// operation has completed.
PP_Bool (*ReadImageData)(PP_Resource device_context_2d,
PP_Resource image,
const struct PP_Point* top_left);
// Runs a nested message loop. The plugin will be reentered from this call.
// This function is used for unit testing the API. The normal pattern is to
// issue some asynchronous call that has a callback. Then you call
// RunMessageLoop which will suspend the plugin and go back to processing
// messages, giving the asynchronous operation time to complete. In your
// callback, you save the data and call QuitMessageLoop, which will then
// pop back up and continue with the test. This avoids having to write a
// complicated state machine for simple tests for asynchronous APIs.
void (*RunMessageLoop)(PP_Instance instance);
// Posts a quit message for the outermost nested message loop. Use this to
// exit and return back to the caller after you call RunMessageLoop.
void (*QuitMessageLoop)(PP_Instance instance);
// Returns the number of live objects (resources + strings + objects)
// associated with this plugin instance. Used for detecting leaks. Returns
// (uint32_t)-1 on failure.
uint32_t (*GetLiveObjectsForInstance)(PP_Instance instance);
// Returns PP_TRUE if the plugin is running out-of-process, PP_FALSE
// otherwise.
PP_Bool (*IsOutOfProcess)();
};
#endif /* PPAPI_C_DEV_PPB_TESTING_DEV_H_ */