Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / test / remoting / waiter.h
1 // Copyright 2013 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 CHROME_TEST_REMOTING_WAITER_H_
6 #define CHROME_TEST_REMOTING_WAITER_H_
7
8 #include "base/timer/timer.h"
9
10 namespace content {
11 class MessageLoopRunner;
12 }
13
14 namespace remoting {
15
16 // Block the execution of the test code for the specified number of
17 // milliseconds while keeping the message loop running. The browser instance
18 // will be responsive during the wait and test actions initiated before
19 // the wait will keep running.
20 class TimeoutWaiter {
21  public:
22   explicit TimeoutWaiter(base::TimeDelta timeout);
23   virtual ~TimeoutWaiter();
24
25   // Returns true in case of success.
26   // For TimeoutWaiter it should always be true.
27   virtual bool Wait();
28
29  protected:
30   virtual void CancelWait();
31
32  private:
33   // Callback used to cancel the TimeoutWaiter::Wait.
34   void CancelWaitCallback();
35
36   base::OneShotTimer<TimeoutWaiter> timeout_timer_;
37   base::TimeDelta timeout_;
38   scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
39
40   DISALLOW_COPY_AND_ASSIGN(TimeoutWaiter);
41 };
42
43 // With a message loop running, keep calling callback in the specified
44 // interval until true is returned.
45 class ConditionalTimeoutWaiter : public TimeoutWaiter {
46  public:
47   typedef base::Callback<bool(void)> Predicate;
48
49   ConditionalTimeoutWaiter(base::TimeDelta timeout,
50                            base::TimeDelta interval,
51                            const Predicate& callback);
52   ~ConditionalTimeoutWaiter() override;
53
54   // Returns true if |callback_| returned true and false in case of timeout.
55   bool Wait() override;
56
57  protected:
58   void CancelWait() override;
59
60  private:
61   // Callback used to cancel the ConditionalTimeoutWaiter::Wait.
62   void CancelWaitCallback();
63
64   base::TimeDelta interval_;
65   Predicate callback_;
66   base::RepeatingTimer<ConditionalTimeoutWaiter> condition_timer_;
67   bool success_;
68
69   DISALLOW_COPY_AND_ASSIGN(ConditionalTimeoutWaiter);
70 };
71
72 }  // namespace remoting
73
74 #endif  // CHROME_TEST_REMOTING_WAITER_H_