PluginQuirks.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /*
  2. * Copyright (C) 2010 Apple Inc. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * 1. Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * 2. Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. *
  13. * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
  14. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  15. * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  16. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
  17. * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  18. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  19. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  20. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  21. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  22. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  23. * THE POSSIBILITY OF SUCH DAMAGE.
  24. */
  25. #ifndef PluginQuirks_h
  26. #define PluginQuirks_h
  27. namespace WebKit {
  28. class PluginQuirks {
  29. public:
  30. enum PluginQuirk {
  31. // Mac specific quirks:
  32. #if PLUGIN_ARCHITECTURE(MAC)
  33. // The plug-in wants the call to getprogname() to return "WebKitPluginHost".
  34. // Adobe Flash Will not handle key down events otherwise.
  35. PrognameShouldBeWebKitPluginHost,
  36. // Supports receiving a paint event, even when using CoreAnimation rendering.
  37. SupportsSnapshotting,
  38. // Make the plug-in opaque unless it has a "background" attribute set to a transparent color
  39. // according to http://msdn.microsoft.com/en-us/library/cc838148(VS.95).aspx
  40. // A non-existent "background" attribute is interpreted as the named color White which is opaque.
  41. // Microsoft Silverlight doesn't opt into transparency using NPN_SetValue and
  42. // NPPVpluginTransparentBool, so we'll always force it unless the plug-in has a "background"
  43. // attribute that specifies a opaque color.
  44. MakeOpaqueUnlessTransparentSilverlightBackgroundAttributeExists,
  45. // Whether calling NPP_GetValue with NPPVpluginCoreAnimationLayer returns a retained Core Animation
  46. // layer or not. According to the NPAPI specifications, plug-in shouldn't return a retained layer but
  47. // WebKit1 expects a retained plug-in layer. We use this for Flash to avoid leaking OpenGL layers.
  48. ReturnsRetainedCoreAnimationLayer,
  49. // Whether NPP_GetValue with NPPVpluginScriptableNPObject returns a non-retained NPObject or not.
  50. // Versions of Silverlight prior to 4 never retained the returned NPObject.
  51. ReturnsNonRetainedScriptableNPObject,
  52. // Whether the plug-in wants parameter names to be lowercase.
  53. // <rdar://problem/8440903>: AppleConnect has a bug where it does not
  54. // understand the parameter names specified in the <object> element that
  55. // embeds its plug-in.
  56. WantsLowercaseParameterNames,
  57. // Whether to append Version/3.2.1 to the user-agent passed to the plugin
  58. // This is necessary to disable Silverlight's workaround for a Safari 2 leak
  59. // which is enabled if it doesn't find Version/3 in the user-agent.
  60. AppendVersion3UserAgent,
  61. // Whether all thrown NSExceptions should be leaked.
  62. // <rdar://problem/13003470> Adobe Flash has a bug where exceptions are released too early.
  63. LeakAllThrownNSExceptions,
  64. #ifndef NP_NO_QUICKDRAW
  65. // Allow the plug-in to use the QuickDraw drawing model, since we know that the plug-in
  66. // will never paint or receive events. Used by the AppleConnect plug-in.
  67. AllowHalfBakedQuickDrawSupport,
  68. #endif
  69. // X11 specific quirks:
  70. #elif PLUGIN_ARCHITECTURE(X11)
  71. // Flash and npwrapper ask the browser about which GTK version does it use
  72. // and refuse to load and work if it is not GTK 2 so we need to fake it in
  73. // NPN_GetValue even when it is a lie.
  74. RequiresGTKToolKit,
  75. // Some version 10 releases of Flash run under nspluginwrapper will completely
  76. // freeze when sending right click events to them in windowed mode.
  77. IgnoreRightClickInWindowlessMode,
  78. // Windows specific quirks:
  79. #elif PLUGIN_ARCHITECTURE(WIN)
  80. // Whether NPN_UserAgent should always return a Mozilla user agent.
  81. // Flash on Windows prior to version 10 only requests windowless plugins
  82. // if we return a Mozilla user agent.
  83. WantsMozillaUserAgent,
  84. #endif
  85. // This isn't really a quirk as much as the opposite of a quirk. By default, we don't send wheel events
  86. // to plug-ins unless we know that they handle them correctly. Adobe Reader on Mac handles wheel events correctly.
  87. WantsWheelEvents,
  88. NumPluginQuirks
  89. };
  90. PluginQuirks()
  91. : m_quirks(0)
  92. {
  93. COMPILE_ASSERT(sizeof(m_quirks) * 8 >= NumPluginQuirks, not_enough_room_for_quirks);
  94. }
  95. void add(PluginQuirk quirk)
  96. {
  97. ASSERT(quirk >= 0);
  98. ASSERT(quirk < NumPluginQuirks);
  99. m_quirks |= (1 << quirk);
  100. }
  101. bool contains(PluginQuirk quirk) const
  102. {
  103. return m_quirks & (1 << quirk);
  104. }
  105. private:
  106. uint32_t m_quirks;
  107. };
  108. } // namespace WebKit
  109. #endif // PluginQuirkSet_h