15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Functions and constants for test registration and setup.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NOTE: These must be implemented by the tester:
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - SetupTests()
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - SetupPluginInterfaces()
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sample Usage:
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   void MyCallback(void* user_data, int32_t result) { ... }
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   void TestPPBFoo() {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     // sync test case
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     PP_Resource my_resource = PPBFoo()->Create(kInvalidInstance);
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     EXPECT(my_resource == kInvalidResource);
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     // async test case
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     PP_CompletionCallback testable_callback =
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//         MakeTestableCompletionCallback("MyCallback", MyCallback, NULL);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     int32_t pp_error = PPBFoo()->AsyncFunction(testable_callback);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     EXPECT(pp_error == PP_OK_COMPLETIONPENDING);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     TEST_PASSED;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   }
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   void SetupTests() {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     RegisterTest("TestPPBFoo", TestPPBFoo);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   }
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   const PPP_Bar ppp_bar_interface = { ... };
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   void SetupPluginInterface() {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     RegisterPluginInterface(PPP_BAR_INTERFACE, &ppp_bar_interface);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NATIVE_CLIENT_TESTS_PPAPI_TEST_PPB_TEMPLATE_TEST_INTERFACE_H
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NATIVE_CLIENT_TESTS_PPAPI_TEST_PPB_TEMPLATE_TEST_INTERFACE_H
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h>
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <limits>
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sstream>
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/include/nacl_string.h"
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_completion_callback.h"
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_instance.h"
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_module.h"
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_point.h"
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_resource.h"
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_var.h"
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_image_data.h"
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PP_Rect;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PP_Size;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These must be implemented by the tester
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use RegisterTest() to register each TestFunction.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetupTests();
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use RegisterPluginInterface() to register custom PPP_ interfaces other than
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PPP_Instance that is required and provided by default.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetupPluginInterfaces();
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test helpers
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Registers test_function, so it is callable from JS using
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// plugin.postMessage(test_name);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void (*TestFunction)();
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RegisterTest(nacl::string test_name, TestFunction test_function);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Registers ppp_interface, so it is returned by PPP_GetInterface().
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RegisterPluginInterface(const char* interface_name,
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const void* ppp_interface);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper for creating user callbacks whose invocation will be reported to JS.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Callback setting allows for synchronous completion to make it easier to
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test error conditions.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WARNING: Do not reuse this callback if the operation that took it as an arg
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// returned PP_OK_COMPLETIONPENDING. The wrapper allocates data on creation
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and then deallocates it when the callback is invoked.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_CompletionCallback MakeTestableCompletionCallback(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* callback_name,  // will be postmessage'ed to JS
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PP_CompletionCallback_Func func,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void* user_data);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_CompletionCallback MakeTestableCompletionCallback(
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* callback_name,  // will be postmessage'ed to JS
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PP_CompletionCallback_Func func);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Uses PPB_Messaging interface to post "test_name:message".
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PostTestMessage(nacl::string test_name, nacl::string message);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make a STRING var.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Var PP_MakeString(const char* s);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert var into printable string (for debuggin)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)nacl::string StringifyVar(const PP_Var& var);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use to verify the result of a test and report failures.
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EXPECT(expr) do { \
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!(expr)) { \
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    char error[1024]; \
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    snprintf(error, sizeof(error), \
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             "ERROR at %s:%d: %s\n", __FILE__, __LINE__, #expr); \
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(stderr, "%s", error); \
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PostTestMessage(__FUNCTION__, error); \
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } \
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} while (0)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Check expected value of INT32 var.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EXPECT_VAR_INT(var, val) \
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT(var.type == PP_VARTYPE_INT32 && var.value.as_int == val)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Check expected value of STRING var (val is 'char*')
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EXPECT_VAR_STRING(var, val) \
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  do { \
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT(var.type == PP_VARTYPE_STRING); \
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint32_t dummy_size; \
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* expected = PPBVar()->VarToUtf8(var, &dummy_size); \
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT(0 == strcmp(expected, val)); \
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } while (0)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Check expected value of BOOL var.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define EXPECT_VAR_BOOL(var, val) \
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT(var.type == PP_VARTYPE_BOOL && var.value.as_bool == val)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use to report success.
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_PASSED PostTestMessage(__FUNCTION__, "PASSED");
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Or failure.
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TEST_FAILED EXPECT(false)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Handy for use with LOG_TO_BROWSER() convert arbitrary objects into strings.
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> nacl::string toString(T v) {
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::stringstream s;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  s << v;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return s.str();
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Log message for debugging or progress reporting purposes.
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If you use this with  nacltest.js::expectMessageSequence
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// it will not interfere with output used for correctness checking.
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LOG_TO_BROWSER(message) PostTestMessage("@", message)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Cause a crash in a way that is guaranteed not to get optimized out by LLVM.
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CRASH *(volatile int *) 0 = 0;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use this constant for stress testing
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (i.e. creating and using a large number of resources).
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kManyResources = 1000;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PPAPI Helpers
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PP_Instance kInvalidInstance = 0;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PP_Module kInvalidModule = 0;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PP_Resource kInvalidResource = 0;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These should not exist.
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Chrome uses the bottom 2 bits to differentiate between different id types.
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 00 - module, 01 - instance, 10 - resource, 11 - var.
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PP_Instance kNotAnInstance = 0xFFFFF0;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PP_Resource kNotAResource = 0xAAAAA0;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PP_Point kOrigin = PP_MakePoint(0, 0);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Interface pointers and ids corresponding to this plugin;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// set at initialization/creation.
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Instance pp_instance();
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Module pp_module();
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If you are providing your own version of PPP_Instance::DidCreate
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// call this function to ensure proper test set-up.
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool DidCreateDefault(PP_Instance instance,
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         uint32_t argc, const char* argn[], const char* argv[]);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Other default implementations of the required PPP_Instance functions.
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DidDestroyDefault(PP_Instance instance);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DidChangeViewDefault(PP_Instance instance, PP_Resource view);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DidChangeFocusDefault(PP_Instance instance, PP_Bool has_focus);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Bool HandleDocumentLoadDefault(PP_Instance instance, PP_Resource url_loader);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsSizeInRange(PP_Size size, PP_Size min_size, PP_Size max_size);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsSizeEqual(PP_Size size, PP_Size expected);
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsRectEqual(PP_Rect position, PP_Rect expected);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(polina, nfullagar): allow specification of non-premultipled colors
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and provide alpha premultiplcation in FormatColor(). This will be required
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// when future PPAPI pixel formats are extended to include non-premultipled
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// or ignored alpha.
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ColorPremul { uint32_t A, R, G, B; };  // Use premultipled Alpha.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kSheerRed = { 0x88, 0x88, 0x00, 0x00 };
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kSheerBlue = { 0x88, 0x00, 0x00, 0x88 };
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kSheerGray = { 0x77, 0x55, 0x55, 0x55 };
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kOpaqueGreen = { 0xFF, 0x00, 0xFF, 0x00 };
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kOpaqueBlack = { 0xFF, 0x00, 0x00, 0x00 };
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kOpaqueWhite = { 0xFF, 0xFF, 0xFF, 0xFF };
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ColorPremul kOpaqueYellow = { 0xFF, 0xFF, 0xFF, 0x00 };
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kBytesPerPixel = sizeof(uint32_t);  // 4 bytes for BGRA or RGBA.
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Assumes premultipled Alpha.
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t FormatColor(PP_ImageDataFormat format, ColorPremul color);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates image data resource and bitmap for a rectangular region of |size|
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and |pixel_color|.
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PP_Resource CreateImageData(PP_Size size, ColorPremul pixel_color, void** bmp);
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Checks if the image rect of |color| and |size| is on the screen at |origin|.
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsImageRectOnScreen(PP_Resource graphics2d,
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         PP_Point origin,
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         PP_Size size,
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         ColorPremul color);
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // NATIVE_CLIENT_TESTS_PPAPI_TEST_PPB_TEMPLATE_TEST_INTERFACE_H
225