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 #include "remoting/client/plugin/pepper_plugin_thread_delegate.h" 6 7 #include "ppapi/cpp/completion_callback.h" 8 #include "ppapi/cpp/module.h" 9 10 namespace remoting { 11 12 PepperPluginThreadDelegate::PepperPluginThreadDelegate() 13 : core_(pp::Module::Get()->core()) { 14 } 15 16 PepperPluginThreadDelegate::~PepperPluginThreadDelegate() { } 17 18 bool PepperPluginThreadDelegate::RunOnPluginThread( 19 base::TimeDelta delay, void(CDECL function)(void*), void* data) { 20 // It is safe to cast |function| to PP_CompletionCallback_Func, 21 // which is defined as void(*)(void*, int). The callee will just 22 // ignore the last argument. The only case when it may be unsafe is 23 // with VS when default calling convention is set to __stdcall, but 24 // this code will not typecheck in that case. 25 core_->CallOnMainThread( 26 delay.InMilliseconds(), pp::CompletionCallback( 27 reinterpret_cast<PP_CompletionCallback_Func>(function), data), 0); 28 return true; 29 } 30 31 } // namespace remoting 32