-
rdar://5346832aroben@apple.com authored
WebCore: Add WindowMessageBroadcaster This class is used to listen in on messages sent to HWNDs. Multiple WindowMessageListeners can be notified about messages sent to a single HWND, and one WindowMessageListener can listen to messages from multiple HWNDs. Reviewed by Ada. * WebCore.vcproj/WebCore.vcproj: Added new files to project. * platform/win/WindowMessageBroadcaster.cpp: Added. (WebCore::instancesMap): Static helper. (WebCore::WindowMessageBroadcaster::addListener): Registers a listener for a particular HWND. (WebCore::WindowMessageBroadcaster::removeListener): Removes a listener for a particular HWND. (WebCore::WindowMessageBroadcaster::WindowMessageBroadcaster): (WebCore::WindowMessageBroadcaster::~WindowMessageBroadcaster): (WebCore::WindowMessageBroadcaster::destroy): Removes this broadcaster from the instancesMap, removes all of its listeners, unsubclasses the window, and deletes the broadcaster. (WebCore::WindowMessageBroadcaster::unsubclassWindow): Unsubclasses the window (which means that SubclassedWndProc won't be called again for this window). (WebCore::WindowMessageBroadcaster::SubclassedWndProc): Notifies all the listeners about every message sent to the HWND * platform/win/WindowMessageBroadcaster.h: Added. (WebCore::WindowMessageBroadcaster::listeners): (WebCore::WindowMessageBroadcaster::originalWndProc): * platform/win/WindowMessageListener.h: Added. WebKit/win: Fix <rdar://5346832> Infinite recursion when opening Web Inspector on more than one tab The bug was that multiple WebNodeHighlights would subclass the same browser window, leading to infinite recursion within SubclassedWndProc. WebNodeHighlight is now a WindowMessageListener, and lets WindowMessageBroadcaster handle subclassing the window. Reviewed by Ada. * WebNodeHighlight.cpp: (WebNodeHighlight::WebNodeHighlight): Initialize m_observedWindow member. (WebNodeHighlight::~WebNodeHighlight): Unregister as a listener for m_observedWindow. (WebNodeHighlight::highlight): Register as a listener. (WebNodeHighlight::windowReceivedMessage): Do the work that used to be done in SubclassedWndProc. * WebNodeHighlight.h: Made WebNodeHighlight a WindowMessageListener, and renamed m_subclassedWindow to m_observedWindow. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@27765 268f45cc-cd09-0410-ab3c-d52691b4dbfc
bf5d850e