// Copyright (c) 2011 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.

#ifndef CONTENT_TEST_PLUGIN_PLUGIN_SCHEDULE_TIMER_TEST_H_
#define CONTENT_TEST_PLUGIN_PLUGIN_SCHEDULE_TIMER_TEST_H_

#include "base/compiler_specific.h"
#include "base/time/time.h"
#include "content/test/plugin/plugin_test.h"

namespace NPAPIClient {

// This class tests scheduling and unscheduling of timers using
// NPN_ScheduleTimer and NPN_UnscheduleTimer.
class ScheduleTimerTest : public PluginTest {
 public:
  ScheduleTimerTest(NPP id, NPNetscapeFuncs *host_functions);

  NPError New(uint16 mode,
              int16 argc,
              const char* argn[],
              const char* argv[],
              NPSavedData* saved) override;

  void OnTimer(uint32 timer_id);

 private:
  // Table mapping timer index (as used in event schedule) to timer id.
  static const int kNumTimers = 3;
  uint32 timer_ids_[kNumTimers];

  // Schedule of events for test.
  static const int kNumEvents = 11;
  struct Event {
    int time;

    // The index of the timer that triggered the event or -1 for the first
    // event.
    int received_index;

    // The index of the timer to schedule on this event or -1.
    int scheduled_index;

    // Info about the timer to be scheduled (if any).
    uint32 scheduled_interval;
    bool schedule_repeated;

    // The index of the timer to unschedule on this event or -1.
    int unscheduled_index;
  };
  static Event schedule_[kNumEvents];
  int num_received_events_;

  // Set of events that have been received (by index).
  bool received_events_[kNumEvents];

  // Time of initial event.
  base::Time start_time_;

  // Returns index of matching unreceived event or -1 if not found.
  int FindUnreceivedEvent(int time, uint32 timer_id);
  void HandleEventIndex(int event_index);
};

}  // namespace NPAPIClient

#endif  // CONTENT_TEST_PLUGIN_PLUGIN_SCHEDULE_TIMER_TEST_H_
