| Index: Source/web/WebFrameWidgetImpl.cpp | 
| diff --git a/Source/web/WebFrameWidgetImpl.cpp b/Source/web/WebFrameWidgetImpl.cpp | 
| index d4e90c8b30d050b6ce2109000e1b14aebe79f2ba..f4dcf27bac2c4f47252f5070b616636e005960f7 100644 | 
| --- a/Source/web/WebFrameWidgetImpl.cpp | 
| +++ b/Source/web/WebFrameWidgetImpl.cpp | 
| @@ -47,6 +47,7 @@ | 
| #include "platform/NotImplemented.h" | 
| #include "public/web/WebBeginFrameArgs.h" | 
| #include "public/web/WebWidgetClient.h" | 
| +#include "web/WebDevToolsAgentImpl.h" | 
| #include "web/WebInputEventConversion.h" | 
| #include "web/WebLocalFrameImpl.h" | 
| #include "web/WebPluginContainerImpl.h" | 
| @@ -69,6 +70,13 @@ WebFrameWidgetImpl* WebFrameWidgetImpl::create(WebWidgetClient* client, WebLocal | 
| return adoptRef(new WebFrameWidgetImpl(client, localRoot)).leakRef(); | 
| } | 
|  | 
| +// static | 
| +HashSet<WebFrameWidgetImpl*>& WebFrameWidgetImpl::allInstances() | 
| +{ | 
| +    DEFINE_STATIC_LOCAL(HashSet<WebFrameWidgetImpl*>, allInstances, ()); | 
| +    return allInstances; | 
| +} | 
| + | 
| WebFrameWidgetImpl::WebFrameWidgetImpl(WebWidgetClient* client, WebLocalFrame* localRoot) | 
| : m_client(client) | 
| , m_localRoot(toWebLocalFrameImpl(localRoot)) | 
| @@ -85,6 +93,7 @@ WebFrameWidgetImpl::WebFrameWidgetImpl(WebWidgetClient* client, WebLocalFrame* l | 
| ASSERT(m_localRoot->frame()->isLocalRoot()); | 
| initializeLayerTreeView(); | 
| m_localRoot->setFrameWidget(this); | 
| +    allInstances().add(this); | 
| } | 
|  | 
| WebFrameWidgetImpl::~WebFrameWidgetImpl() | 
| @@ -95,6 +104,10 @@ WebFrameWidgetImpl::~WebFrameWidgetImpl() | 
|  | 
| void WebFrameWidgetImpl::close() | 
| { | 
| +    WebDevToolsAgentImpl::webFrameWidgetImplClosed(this); | 
| +    ASSERT(allInstances().contains(this)); | 
| +    allInstances().remove(this); | 
| + | 
| // Reset the delegate to prevent notifications being sent as we're being | 
| // deleted. | 
| m_client = nullptr; | 
| @@ -182,6 +195,12 @@ void WebFrameWidgetImpl::updateMainFrameLayoutSize() | 
| view->setLayoutSize(layoutSize); | 
| } | 
|  | 
| +void WebFrameWidgetImpl::setIgnoreInputEvents(bool newValue) | 
| +{ | 
| +    ASSERT(m_ignoreInputEvents != newValue); | 
| +    m_ignoreInputEvents = newValue; | 
| +} | 
| + | 
| void WebFrameWidgetImpl::willEndLiveResize() | 
| { | 
| if (m_localRoot->frameView()) | 
| @@ -352,6 +371,8 @@ bool WebFrameWidgetImpl::handleInputEvent(const WebInputEvent& inputEvent) | 
| if (m_ignoreInputEvents) | 
| return false; | 
|  | 
| +    // FIXME: pass event to m_localRoot's WebDevToolsAgentImpl once available. | 
| + | 
| TemporaryChange<const WebInputEvent*> currentEventChange(m_currentInputEvent, &inputEvent); | 
|  | 
| if (m_mouseCaptureNode && WebInputEvent::isMouseEventType(inputEvent.type)) { | 
|  |