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 26#ifndef PluginQuirks_h 27#define PluginQuirks_h 28 29namespace WebKit { 30 31class PluginQuirks { 32public: 33 enum PluginQuirk { 34 // Mac specific quirks: 35#if PLUGIN_ARCHITECTURE(MAC) 36 // The plug-in wants the call to getprogname() to return "WebKitPluginHost". 37 // Adobe Flash Will not handle key down events otherwise. 38 PrognameShouldBeWebKitPluginHost, 39 40 // Supports receiving a paint event, even when using CoreAnimation rendering. 41 SupportsSnapshotting, 42 43 // Make the plug-in opaque unless it has a "background" attribute set to a transparent color 44 // according to http://msdn.microsoft.com/en-us/library/cc838148(VS.95).aspx 45 // A non-existent "background" attribute is interpreted as the named color White which is opaque. 46 // Microsoft Silverlight doesn't opt into transparency using NPN_SetValue and 47 // NPPVpluginTransparentBool, so we'll always force it unless the plug-in has a "background" 48 // attribute that specifies a opaque color. 49 MakeOpaqueUnlessTransparentSilverlightBackgroundAttributeExists, 50 51 // Whether calling NPP_GetValue with NPPVpluginCoreAnimationLayer returns a retained Core Animation 52 // layer or not. According to the NPAPI specifications, plug-in shouldn't return a retained layer but 53 // WebKit1 expects a retained plug-in layer. We use this for Flash to avoid leaking OpenGL layers. 54 ReturnsRetainedCoreAnimationLayer, 55 56 // Whether NPP_GetValue with NPPVpluginScriptableNPObject returns a non-retained NPObject or not. 57 // Versions of Silverlight prior to 4 never retained the returned NPObject. 58 ReturnsNonRetainedScriptableNPObject, 59 60 // Whether the plug-in wants parameter names to be lowercase. 61 // <rdar://problem/8440903>: AppleConnect has a bug where it does not 62 // understand the parameter names specified in the <object> element that 63 // embeds its plug-in. 64 WantsLowercaseParameterNames, 65 66 // Whether to append Version/3.2.1 to the user-agent passed to the plugin 67 // This is necessary to disable Silverlight's workaround for a Safari 2 leak 68 // which is enabled if it doesn't find Version/3 in the user-agent. 69 AppendVersion3UserAgent, 70 71 // Whether all thrown NSExceptions should be leaked. 72 // <rdar://problem/13003470> Adobe Flash has a bug where exceptions are released too early. 73 LeakAllThrownNSExceptions, 74 75#ifndef NP_NO_QUICKDRAW 76 // Allow the plug-in to use the QuickDraw drawing model, since we know that the plug-in 77 // will never paint or receive events. Used by the AppleConnect plug-in. 78 AllowHalfBakedQuickDrawSupport, 79#endif 80 81 // X11 specific quirks: 82#elif PLUGIN_ARCHITECTURE(X11) 83 // Flash and npwrapper ask the browser about which GTK version does it use 84 // and refuse to load and work if it is not GTK 2 so we need to fake it in 85 // NPN_GetValue even when it is a lie. 86 RequiresGTKToolKit, 87 88 // Some version 10 releases of Flash run under nspluginwrapper will completely 89 // freeze when sending right click events to them in windowed mode. 90 IgnoreRightClickInWindowlessMode, 91 92 // Windows specific quirks: 93#elif PLUGIN_ARCHITECTURE(WIN) 94 // Whether NPN_UserAgent should always return a Mozilla user agent. 95 // Flash on Windows prior to version 10 only requests windowless plugins 96 // if we return a Mozilla user agent. 97 WantsMozillaUserAgent, 98#endif 99 100 // This isn't really a quirk as much as the opposite of a quirk. By default, we don't send wheel events 101 // to plug-ins unless we know that they handle them correctly. Adobe Reader on Mac handles wheel events correctly. 102 WantsWheelEvents, 103 104 NumPluginQuirks 105 }; 106 107 PluginQuirks() 108 : m_quirks(0) 109 { 110 COMPILE_ASSERT(sizeof(m_quirks) * 8 >= NumPluginQuirks, not_enough_room_for_quirks); 111 } 112 113 void add(PluginQuirk quirk) 114 { 115 ASSERT(quirk >= 0); 116 ASSERT(quirk < NumPluginQuirks); 117 118 m_quirks |= (1 << quirk); 119 } 120 121 bool contains(PluginQuirk quirk) const 122 { 123 return m_quirks & (1 << quirk); 124 } 125 126private: 127 uint32_t m_quirks; 128}; 129 130} // namespace WebKit 131 132#endif // PluginQuirkSet_h 133