testable_callback.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright (c) 2011 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#ifndef NATIVE_CLIENT_TESTS_PPAPI_TEST_LIB_TESTABLE_CALLBACK_H 6#define NATIVE_CLIENT_TESTS_PPAPI_TEST_LIB_TESTABLE_CALLBACK_H 7 8#include "ppapi/c/pp_completion_callback.h" 9#include "ppapi/c/pp_instance.h" 10#include "ppapi/c/pp_stdint.h" 11 12// NOTE: if you use you TestableCallback you will need to enable 13// testing interfaces in PPAPIBrowserTester(), e.g. 14// "--enable-pepper-testing", c.f. 15// tests/ppapi_browser/ppb_graphics2d/nacl.scons 16// 17// Example Usage: 18// 19// void TestProgressSimple() { 20// TestableCallback callback(pp_instance(), true); 21// ... 22// rv = PPBURLLoader()->Open(loader, request, callback.GetCallback()); 23// EXPECT(rv == PP_OK_COMPLETIONPENDING); 24 25// rv = callback.WaitForResult(); 26// EXPECT(rv == PP_OK); 27// ... 28// } 29 30class TestableCallback { 31 public: 32 TestableCallback(PP_Instance instance, bool force_async); 33 34 // Get the callback to be passed to an asynchronous PPAPI call 35 PP_CompletionCallback GetCallback(); 36 37 // Waits for the callback to be called and returns the 38 // result. Returns immediately if the callback was previously called 39 // and the result wasn't returned (i.e. each result value received 40 // by the callback is returned by WaitForResult() once and only 41 // once). 42 int32_t WaitForResult(); 43 44 bool HasRun() const { return run_count_ != 0; } 45 46 // Make instance runnable again. 47 void Reset() { 48 run_count_ = 0; 49 have_result_ = false; 50 } 51 52 int32_t Result() const { return result_; } 53 54 private: 55 static void Handler(void* user_data, int32_t result); 56 57 bool have_result_; // is a result available? 58 int32_t result_; // value of the result 59 bool force_async_; // force callback to be always called 60 bool post_quit_task_; // has cleanup beem performed 61 unsigned run_count_; // number of times the callback has been called 62 PP_Instance instance_; 63}; 64 65#endif // NATIVE_CLIENT_TESTS_PPAPI_TEST_LIB_TESTABLE_CALLBACK_H 66