Fix <rdar://
5346832> Infinite recursion when opening Web Inspector on more than one tab
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: https://svn.webkit.org/repository/webkit/trunk@27765
268f45cc-cd09-0410-ab3c-
d52691b4dbfc