Home | History | Annotate | Download | only in dev
      1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  */
      5 
      6 /**
      7  * This file contains interface functions used for unit testing. Do not use in
      8  * production code. They are not guaranteed to be available in normal plugin
      9  * environments so you should not depend on them.
     10  */
     11 
     12 label Chrome {
     13   M14 = 0.7,
     14   M15 = 0.8,
     15   M17 = 0.9,
     16   M18 = 0.91,
     17   M28 = 0.92
     18 };
     19 
     20 interface PPB_Testing_Dev {
     21   /**
     22    * Reads the bitmap data out of the backing store for the given
     23    * DeviceContext2D and into the given image. If the data was successfully
     24    * read, it will return PP_TRUE.
     25    *
     26    * This function should not generally be necessary for normal plugin
     27    * operation. If you want to update portions of a device, the expectation is
     28    * that you will either regenerate the data, or maintain a backing store
     29    * pushing updates to the device from your backing store via PaintImageData.
     30    * Using this function will introduce an extra copy which will make your
     31    * plugin slower. In some cases, this may be a very expensive operation (it
     32    * may require slow cross-process transitions or graphics card readbacks).
     33    *
     34    * Data will be read into the image starting at |top_left| in the device
     35    * context, and proceeding down and to the right for as many pixels as the
     36    * image is large. If any part of the image bound would fall outside of the
     37    * backing store of the device if positioned at |top_left|, this function
     38    * will fail and return PP_FALSE.
     39    *
     40    * The image format must be of the format
     41    * PPB_ImageData.GetNativeImageDataFormat() or this function will fail and
     42    * return PP_FALSE.
     43    *
     44    * The returned image data will represent the current status of the backing
     45    * store. This will not include any paint, scroll, or replace operations
     46    * that have not yet been flushed; these operations are only reflected in
     47    * the backing store (and hence ReadImageData) until after a Flush()
     48    * operation has completed.
     49    */
     50   PP_Bool ReadImageData([in] PP_Resource device_context_2d,
     51                         [in] PP_Resource image,
     52                         [in] PP_Point top_left);
     53 
     54   /**
     55    * Runs a nested message loop. The plugin will be reentered from this call.
     56    * This function is used for unit testing the API. The normal pattern is to
     57    * issue some asynchronous call that has a callback. Then you call
     58    * RunMessageLoop which will suspend the plugin and go back to processing
     59    * messages, giving the asynchronous operation time to complete. In your
     60    * callback, you save the data and call QuitMessageLoop, which will then
     61    * pop back up and continue with the test. This avoids having to write a
     62    * complicated state machine for simple tests for asynchronous APIs.
     63    */
     64   void RunMessageLoop([in] PP_Instance instance);
     65 
     66   /**
     67    * Posts a quit message for the outermost nested message loop. Use this to
     68    * exit and return back to the caller after you call RunMessageLoop.
     69    */
     70   void QuitMessageLoop([in] PP_Instance instance);
     71 
     72   /**
     73    * Returns the number of live objects (resources + strings + objects)
     74    * associated with this plugin instance. Used for detecting leaks. Returns
     75    * (uint32_t)-1 on failure.
     76    */
     77   uint32_t GetLiveObjectsForInstance([in] PP_Instance instance);
     78 
     79   /**
     80    * Returns PP_TRUE if the plugin is running out-of-process, PP_FALSE
     81    * otherwise.
     82    */
     83   PP_Bool IsOutOfProcess();
     84 
     85   /**
     86    * Passes the input event to the browser, which sends it back to the
     87    * plugin. The plugin should implement PPP_InputEvent and register for
     88    * the input event type.
     89    *
     90    * This method sends an input event through the browser just as if it had
     91    * come from the user. If the browser determines that it is an event for the
     92    * plugin, it will be sent to be handled by the plugin's PPP_InputEvent
     93    * interface. When generating mouse events, make sure the position is within
     94    * the plugin's area on the page. When generating a keyboard event, make sure
     95    * the plugin is focused.
     96    *
     97    * Note that the browser may generate extra input events in order to
     98    * maintain certain invariants, such as always having a "mouse enter" event
     99    * before any other mouse event. Furthermore, the event the plugin receives
    100    * after sending a simulated event will be slightly different from the
    101    * original event. The browser may change the timestamp, add modifiers, and
    102    * slightly alter the mouse position, due to coordinate transforms it
    103    * performs.
    104    */
    105   [version=0.8]
    106   void SimulateInputEvent([in] PP_Instance instance,
    107                           [in] PP_Resource input_event);
    108 
    109   /**
    110    * Returns the URL for the document. This is a safe way to retrieve
    111    * window.location.href.
    112    * If the canonicalized URL is valid, the method will parse the URL
    113    * and fill in the components structure. This pointer may be NULL
    114    * to specify that no component information is necessary.
    115    */
    116   [version=0.9]
    117   PP_Var GetDocumentURL([in] PP_Instance instance,
    118                         [out] PP_URLComponents_Dev components);
    119 
    120   /**
    121    * Fetches up to |array_size| active PP_Vars in the tracker. Returns the
    122    * number of vars in the tracker. The active vars are written to |live_vars|
    123    * contiguously starting at index 0. The vars are not in any particular order.
    124    * If the number of live vars is greater than |array_size|, then an arbitrary
    125    * subset of |array_size| vars is written to |live_vars|. The reference count
    126    * of the returned PP_Vars will *not* be affected by this call.
    127    */
    128   [version=0.91]
    129   uint32_t GetLiveVars([size_as=array_size] PP_Var[] live_vars,
    130                        [in] uint32_t array_size);
    131 
    132   /**
    133    * Sets the threshold size at which point we switch from transmitting
    134    * array buffers in IPC messages to using shared memory. This is only used
    135    * for testing purposes where we need to transmit small buffers using shmem
    136    * (in order to have fast tests). Passing a value of 0 resets the threshold
    137    * to its default. The threshold is in bytes.
    138    */
    139   [version=0.92]
    140   void SetMinimumArrayBufferSizeForShmem([in] PP_Instance instance,
    141                                          [in] uint32_t threshold);
    142 };
    143