• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 The Chromium Embedded Framework Authors. All rights
2 // reserved. Use of this source code is governed by a BSD-style license that
3 // can be found in the LICENSE file.
4 
5 #include "tests/ceftests/thread_helper.h"
6 
7 #include "include/wrapper/cef_closure_task.h"
8 
SignalEvent(CefRefPtr<CefWaitableEvent> event)9 void SignalEvent(CefRefPtr<CefWaitableEvent> event) {
10   event->Signal();
11 }
12 
WaitForThread(CefThreadId thread_id,int64 delay_ms)13 void WaitForThread(CefThreadId thread_id, int64 delay_ms) {
14   CefRefPtr<CefWaitableEvent> event =
15       CefWaitableEvent::CreateWaitableEvent(true, false);
16   CefPostDelayedTask(thread_id, base::Bind(SignalEvent, event), delay_ms);
17   event->Wait();
18 }
19 
WaitForThread(CefRefPtr<CefTaskRunner> task_runner,int64 delay_ms)20 void WaitForThread(CefRefPtr<CefTaskRunner> task_runner, int64 delay_ms) {
21   CefRefPtr<CefWaitableEvent> event =
22       CefWaitableEvent::CreateWaitableEvent(true, false);
23   task_runner->PostDelayedTask(
24       CefCreateClosureTask(base::Bind(SignalEvent, event)), delay_ms);
25   event->Wait();
26 }
27 
RunOnThread(CefThreadId thread_id,const base::Callback<void (void)> & test_impl,CefRefPtr<CefWaitableEvent> event)28 void RunOnThread(CefThreadId thread_id,
29                  const base::Callback<void(void)>& test_impl,
30                  CefRefPtr<CefWaitableEvent> event) {
31   if (!CefCurrentlyOn(thread_id)) {
32     CefPostTask(thread_id,
33                 base::Bind(RunOnThread, thread_id, test_impl, event));
34     return;
35   }
36 
37   test_impl.Run();
38   SignalEvent(event);
39 }
40 
RunOnThreadAsync(CefThreadId thread_id,const base::Callback<void (CefRefPtr<CefWaitableEvent>)> & test_impl,CefRefPtr<CefWaitableEvent> event)41 void RunOnThreadAsync(
42     CefThreadId thread_id,
43     const base::Callback<void(CefRefPtr<CefWaitableEvent>)>& test_impl,
44     CefRefPtr<CefWaitableEvent> event) {
45   if (!CefCurrentlyOn(thread_id)) {
46     CefPostTask(thread_id,
47                 base::Bind(RunOnThreadAsync, thread_id, test_impl, event));
48     return;
49   }
50 
51   test_impl.Run(event);
52 }
53