* 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 NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_DELAYED_CALLBACK_H_
#define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_DELAYED_CALLBACK_H_
#include "native_client/src/include/portability.h"
#include "native_client/src/include/nacl_macros.h"
#include "native_client/src/shared/platform/nacl_check.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/cpp/completion_callback.h"
namespace plugin {
class DelayedCallback {
public:
DelayedCallback(pp::CompletionCallback continuation,
uint32_t initial_requirement)
: required_ticks_(initial_requirement),
continuation_(continuation),
started_(false) {
}
~DelayedCallback() { }
void RunIfTime() {
CHECK(required_ticks_ > 0);
started_ = true;
--required_ticks_;
if (0 == required_ticks_) {
continuation_.Run(PP_OK);
}
}
void IncrRequirements(uint32_t additional_requirements) {
CHECK(started_ == false);
required_ticks_ += additional_requirements;
}
private:
NACL_DISALLOW_COPY_AND_ASSIGN(DelayedCallback);
uint32_t required_ticks_;
pp::CompletionCallback continuation_;
bool started_;
};
}
#endif