1// Copyright (c) 2011 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 CONTENT_TEST_PLUGIN_PLUGIN_SCHEDULE_TIMER_TEST_H
6#define CONTENT_TEST_PLUGIN_PLUGIN_SCHEDULE_TIMER_TEST_H
7
8#include "base/compiler_specific.h"
9#include "base/time/time.h"
10#include "content/test/plugin/plugin_test.h"
11
12namespace NPAPIClient {
13
14// This class tests scheduling and unscheduling of timers using
15// NPN_ScheduleTimer and NPN_UnscheduleTimer.
16class ScheduleTimerTest : public PluginTest {
17 public:
18  ScheduleTimerTest(NPP id, NPNetscapeFuncs *host_functions);
19
20  virtual NPError New(uint16 mode, int16 argc, const char* argn[],
21                      const char* argv[], NPSavedData* saved) OVERRIDE;
22
23  void OnTimer(uint32 timer_id);
24
25 private:
26  // Table mapping timer index (as used in event schedule) to timer id.
27  static const int kNumTimers = 3;
28  uint32 timer_ids_[kNumTimers];
29
30  // Schedule of events for test.
31  static const int kNumEvents = 11;
32  struct Event {
33    int time;
34
35    // The index of the timer that triggered the event or -1 for the first
36    // event.
37    int received_index;
38
39    // The index of the timer to schedule on this event or -1.
40    int scheduled_index;
41
42    // Info about the timer to be scheduled (if any).
43    uint32 scheduled_interval;
44    bool schedule_repeated;
45
46    // The index of the timer to unschedule on this event or -1.
47    int unscheduled_index;
48  };
49  static Event schedule_[kNumEvents];
50  int num_received_events_;
51
52  // Set of events that have been received (by index).
53  bool received_events_[kNumEvents];
54
55  // Time of initial event.
56  base::Time start_time_;
57
58  // Returns index of matching unreceived event or -1 if not found.
59  int FindUnreceivedEvent(int time, uint32 timer_id);
60  void HandleEventIndex(int event_index);
61};
62
63}  // namespace NPAPIClient
64
65#endif  // CONTENT_TEST_PLUGIN_PLUGIN_SCHEDULE_TIMER_TEST_H
66