WebCore/ChangeLog

22
33 Reviewed by NOBODY (OOPS!).
44
 5 [Qt] Make "disallow multiple calls to SetWindow" on windowed plugins a quirk
 6 https://bugs.webkit.org/show_bug.cgi?id=41407
 7
 8 Only disallow calling SetWindow more than once if we're using Flash 9 or older.
 9 This fixes resizing of YouTube videos via the player's own button.
 10
 11 Removed copy-pasted logic in PluginViewGtk since the issue only exists
 12 when running Flash with a non-Gtk toolkit.
 13
 14 * plugins/PluginPackage.cpp:
 15 (WebCore::PluginPackage::determineQuirks):
 16 * plugins/PluginQuirkSet.h:
 17 (WebCore::):
 18 * plugins/gtk/PluginViewGtk.cpp:
 19 (WebCore::PluginView::setNPWindowIfNeeded): Remove unnecessary logic copy-pasted from PluginViewQt.
 20 * plugins/qt/PluginViewQt.cpp:
 21 (WebCore::PluginView::setNPWindowIfNeeded):
 22
 232010-06-30 Andreas Kling <andreas.kling@nokia.com>
 24
 25 Reviewed by NOBODY (OOPS!).
 26
527 [Qt, Gtk, Symbian] Mind the semantics of NPRect for windowed plugin clip rects
628 https://bugs.webkit.org/show_bug.cgi?id=41406
729

WebCore/plugins/PluginPackage.cpp

@@void PluginPackage::determineQuirks(const String& mimeType)
189189 } else {
190190 // Flash 9 and older requests windowless plugins if we return a mozilla user agent
191191 m_quirks.add(PluginQuirkWantsMozillaUserAgent);
 192#if PLATFORM(QT)
 193 // Flash 9 and older would crash on repeated calls to SetWindow in windowed mode
 194 m_quirks.add(PluginQuirkDontCallSetWindowMoreThanOnce);
 195#endif
192196 }
193197
194198 m_quirks.add(PluginQuirkThrottleInvalidate);

WebCore/plugins/PluginQuirkSet.h

@@namespace WebCore {
4646 PluginQuirkDontSetNullWindowHandleOnDestroy = 1 << 10,
4747 PluginQuirkDontAllowMultipleInstances = 1 << 11,
4848 PluginQuirkRequiresGtkToolKit = 1 << 12,
49  PluginQuirkRequiresDefaultScreenDepth = 1 << 13
 49 PluginQuirkRequiresDefaultScreenDepth = 1 << 13,
 50 PluginQuirkDontCallSetWindowMoreThanOnce = 1 << 14
5051 };
5152
5253 class PluginQuirkSet {

WebCore/plugins/gtk/PluginViewGtk.cpp

@@void PluginView::setNPWindowIfNeeded()
522522 } else {
523523 m_npWindow.x = 0;
524524 m_npWindow.y = 0;
 525 m_npWindow.width = m_windowRect.width();
 526 m_npWindow.height = m_windowRect.height();
525527
526528 m_npWindow.clipRect.left = 0;
527529 m_npWindow.clipRect.top = 0;

@@void PluginView::setNPWindowIfNeeded()
529531 m_npWindow.clipRect.bottom = 0;
530532 }
531533
532  // FLASH WORKAROUND: Only set initially. Multiple calls to
533  // setNPWindow() cause the plugin to crash in windowed mode.
534  if (!m_isWindowed || m_npWindow.width == (unsigned int)-1 || m_npWindow.height == (unsigned int)-1) {
535  m_npWindow.width = m_windowRect.width();
536  m_npWindow.height = m_windowRect.height();
537  }
538 
539534 PluginView::setCurrentPluginView(this);
540535 JSC::JSLock::DropAllLocks dropAllLocks(JSC::SilenceAssertionsOnly);
541536 setCallingPlugin(true);

WebCore/plugins/qt/PluginViewQt.cpp

@@void PluginView::setNPWindowIfNeeded()
507507 m_npWindow.clipRect.bottom = 0;
508508 }
509509
510  // FLASH WORKAROUND: Only set initially. Multiple calls to
511  // setNPWindow() cause the plugin to crash in windowed mode.
512  if (!m_isWindowed || m_npWindow.width == -1 || m_npWindow.height == -1) {
 510 if (m_plugin->quirks().contains(PluginQuirkDontCallSetWindowMoreThanOnce)) {
 511 // FLASH WORKAROUND: Only set initially. Multiple calls to
 512 // setNPWindow() cause the plugin to crash in windowed mode.
 513 if (!m_isWindowed || m_npWindow.width == -1 || m_npWindow.height == -1) {
 514 m_npWindow.width = m_windowRect.width();
 515 m_npWindow.height = m_windowRect.height();
 516 }
 517 } else {
513518 m_npWindow.width = m_windowRect.width();
514519 m_npWindow.height = m_windowRect.height();
515520 }