blob: e14a93cc2839d295976b47c19ab1f5b88116ecb2 [file] [log] [blame]
// Copyright (c) 2012 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.
#include "remoting/client/plugin/pepper_plugin_thread_delegate.h"
#include "ppapi/cpp/completion_callback.h"
#include "ppapi/cpp/module.h"
namespace remoting {
PepperPluginThreadDelegate::PepperPluginThreadDelegate()
: core_(pp::Module::Get()->core()) {
}
PepperPluginThreadDelegate::~PepperPluginThreadDelegate() { }
bool PepperPluginThreadDelegate::RunOnPluginThread(
base::TimeDelta delay, void(CDECL function)(void*), void* data) {
// It is safe to cast |function| to PP_CompletionCallback_Func,
// which is defined as void(*)(void*, int). The callee will just
// ignore the last argument. The only case when it may be unsafe is
// with VS when default calling convention is set to __stdcall, but
// this code will not typecheck in that case.
core_->CallOnMainThread(
delay.InMilliseconds(), pp::CompletionCallback(
reinterpret_cast<PP_CompletionCallback_Func>(function), data), 0);
return true;
}
} // namespace remoting