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_NPOBJECT_LIFETIME_TEST_H_
6#define CONTENT_TEST_PLUGIN_PLUGIN_NPOBJECT_LIFETIME_TEST_H_
7
8#include "base/compiler_specific.h"
9#include "build/build_config.h"
10#include "content/test/plugin/plugin_test.h"
11
12namespace NPAPIClient {
13
14// The NPObjectLifeTime class tests the case where a plugin has an NPObject
15// which points to a different plugin instance on a different frame in the
16// page and whether refcounts on this npobject are valid when the source frame
17// is destroyed.
18class NPObjectLifetimeTest : public PluginTest {
19 public:
20  // Constructor.
21  NPObjectLifetimeTest(NPP id, NPNetscapeFuncs *host_functions);
22
23  // NPAPI SetWindow handler.
24  virtual NPError SetWindow(NPWindow* pNPWindow) OVERRIDE;
25
26  virtual void  URLNotify(const char* url,
27                          NPReason reason,
28                          void* data) OVERRIDE;
29
30 protected:
31  NPObject* other_plugin_instance_object_;
32
33#if defined(OS_WIN)
34  static void CALLBACK TimerProc(HWND window, UINT message, UINT_PTR timer_id,
35                                 DWORD elapsed_milli_seconds);
36  UINT_PTR timer_id_;
37#endif
38  DISALLOW_IMPLICIT_CONSTRUCTORS(NPObjectLifetimeTest);
39};
40
41// The NPObjectLifetimeTestInstance2 class represents the plugin instance
42// which is deleted by the NPObjectLifeTime class via a javascript function.
43class NPObjectLifetimeTestInstance2 : public PluginTest {
44 public:
45  // Constructor.
46  NPObjectLifetimeTestInstance2(NPP id, NPNetscapeFuncs *host_functions);
47  virtual ~NPObjectLifetimeTestInstance2();
48
49  // NPAPI SetWindow handler.
50  virtual NPError SetWindow(NPWindow* pNPWindow) OVERRIDE;
51 protected:
52  static NPObject* plugin_instance_object_;
53  friend class NPObjectLifetimeTest;
54
55  DISALLOW_IMPLICIT_CONSTRUCTORS(NPObjectLifetimeTestInstance2);
56};
57
58// The NPObjectLifeTime class tests the case where a plugin instance is
59// destroyed in NPN_Evaluate
60class NPObjectDeletePluginInNPN_Evaluate : public PluginTest {
61 public:
62  // Constructor.
63  NPObjectDeletePluginInNPN_Evaluate(NPP id, NPNetscapeFuncs *host_functions);
64  virtual ~NPObjectDeletePluginInNPN_Evaluate();
65
66  // NPAPI SetWindow handler.
67  virtual NPError SetWindow(NPWindow* pNPWindow) OVERRIDE;
68
69 protected:
70  NPObject* plugin_instance_object_;
71#if defined(OS_WIN)
72  static void CALLBACK TimerProc(HWND window, UINT message, UINT_PTR timer_id,
73                                 DWORD elapsed_milli_seconds);
74  UINT_PTR timer_id_;
75#endif
76
77 private:
78  static NPObjectDeletePluginInNPN_Evaluate* g_npn_evaluate_test_instance_;
79
80  DISALLOW_IMPLICIT_CONSTRUCTORS(NPObjectDeletePluginInNPN_Evaluate);
81};
82
83}  // namespace NPAPIClient
84
85#endif  // CONTENT_TEST_PLUGIN_PLUGIN_NPOBJECT_LIFETIME_TEST_H_
86