15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef CONTENT_TEST_PLUGIN_PLUGIN_SCHEDULE_TIMER_TEST_H
6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define CONTENT_TEST_PLUGIN_PLUGIN_SCHEDULE_TIMER_TEST_H
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/test/plugin/plugin_test.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace NPAPIClient {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class tests scheduling and unscheduling of timers using
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NPN_ScheduleTimer and NPN_UnscheduleTimer.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScheduleTimerTest : public PluginTest {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScheduleTimerTest(NPP id, NPNetscapeFuncs *host_functions);
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual NPError New(uint16 mode, int16 argc, const char* argn[],
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* argv[], NPSavedData* saved) OVERRIDE;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnTimer(uint32 timer_id);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Table mapping timer index (as used in event schedule) to timer id.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const int kNumTimers = 3;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 timer_ids_[kNumTimers];
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Schedule of events for test.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const int kNumEvents = 11;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct Event {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int time;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The index of the timer that triggered the event or -1 for the first
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // event.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int received_index;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The index of the timer to schedule on this event or -1.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int scheduled_index;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Info about the timer to be scheduled (if any).
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint32 scheduled_interval;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool schedule_repeated;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The index of the timer to unschedule on this event or -1.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int unscheduled_index;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static Event schedule_[kNumEvents];
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int num_received_events_;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set of events that have been received (by index).
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool received_events_[kNumEvents];
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Time of initial event.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time start_time_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns index of matching unreceived event or -1 if not found.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int FindUnreceivedEvent(int time, uint32 timer_id);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void HandleEventIndex(int event_index);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace NPAPIClient
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif  // CONTENT_TEST_PLUGIN_PLUGIN_SCHEDULE_TIMER_TEST_H
66