Title: [174506] trunk/Source
Revision
174506
Author
[email protected]
Date
2014-10-09 09:45:32 -0700 (Thu, 09 Oct 2014)

Log Message

Use is<>() / downcast<>() for Widget subclasses
https://bugs.webkit.org/show_bug.cgi?id=137549

Reviewed by Darin Adler.

Use is<>() / downcast<>() for Widget subclasses and clean up the
surrounding code.

Source/WebCore:

No new tests, no behavior change.

* accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::getOrCreate):
* accessibility/AccessibilityObject.cpp:
(WebCore::appendAccessibilityObject):
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::visiblePositionForPoint):
* accessibility/AccessibilityScrollView.cpp:
(WebCore::AccessibilityScrollView::webAreaObject):
(WebCore::AccessibilityScrollView::documentFrameView):
(WebCore::AccessibilityScrollView::parentObject):
(WebCore::AccessibilityScrollView::parentObjectIfExists):
* bindings/js/JSPluginElementFunctions.cpp:
(WebCore::pluginScriptObjectFromPluginViewBase):
* html/HTMLObjectElement.cpp:
(WebCore::HTMLObjectElement::appendFormData):
* html/HTMLPlugInElement.cpp:
(WebCore::HTMLPlugInElement::canProcessDrag):
(WebCore::HTMLPlugInElement::isKeyboardFocusable):
(WebCore::HTMLPlugInElement::isUserObservable):
* html/HTMLPlugInImageElement.cpp:
(WebCore::HTMLPlugInImageElement::checkSizeChangeForSnapshotting):
(WebCore::HTMLPlugInImageElement::subframeLoaderDidCreatePlugIn):
* html/HTMLPlugInImageElement.h:
* loader/SubframeLoader.cpp:
(WebCore::SubframeLoader::loadPlugin):
* page/DragController.cpp:
(WebCore::DragController::operationForLoad):
* page/EventHandler.cpp:
(WebCore::EventHandler::subframeForTargetNode):
(WebCore::EventHandler::handleWheelEvent):
* page/EventHandler.h:
* page/Frame.cpp:
(WebCore::Frame::frameForWidget):
* page/FrameView.cpp:
(WebCore::FrameView::hasCustomScrollbars):
(WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):
(WebCore::FrameView::convertToContainingView):
(WebCore::FrameView::convertFromContainingView):
(WebCore::FrameView::removeChild):
* page/FrameView.h:
* page/Page.cpp:
(WebCore::Page::pluginViews):
* page/efl/EventHandlerEfl.cpp:
(WebCore::EventHandler::passWheelEventToWidget):
* page/gtk/EventHandlerGtk.cpp:
(WebCore::EventHandler::passWheelEventToWidget):
* page/ios/EventHandlerIOS.mm:
(WebCore::EventHandler::passWheelEventToWidget):
* page/mac/EventHandlerMac.mm:
(WebCore::EventHandler::passWheelEventToWidget):
* page/scrolling/ScrollingCoordinator.cpp:
(WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
* page/win/EventHandlerWin.cpp:
(WebCore::EventHandler::passWheelEventToWidget):
* platform/ScrollView.cpp:
(WebCore::ScrollView::removeChild):
(WebCore::ScrollView::setHasHorizontalScrollbar):
(WebCore::ScrollView::setHasVerticalScrollbar):
* platform/ScrollView.h:
* platform/Scrollbar.cpp:
(WebCore::Scrollbar::root):
Uninline as root() because Widget::root() returns a FrameView now and
it is impossible to include FrameView.h in Scrollbar.h without causing
a cycle.

* platform/Scrollbar.h:
* platform/Widget.cpp:
(WebCore::Widget::root):
Use tighter typing and return a FrameView instead of a ScrollView.

(WebCore::Widget::removeFromParent):
* platform/Widget.h:
* platform/efl/WidgetEfl.cpp:
(WebCore::Widget::setCursor):
* platform/gtk/PlatformScreenGtk.cpp:
* platform/gtk/WidgetGtk.cpp:
(WebCore::Widget::setCursor):
* platform/mac/PlatformScreenMac.mm:
(WebCore::displayFromWidget):
* platform/mac/WidgetMac.mm:
(WebCore::Widget::setCursor):
* platform/win/WidgetWin.cpp:
(WebCore::Widget::setCursor):
* plugins/PluginViewBase.h:
* plugins/win/PluginViewWin.cpp:
(WebCore::PluginView::updatePluginWidget):
(WebCore::PluginView::paintIntoTransformedContext):
(WebCore::PluginView::paintWindowedPluginIntoContext):
(WebCore::PluginView::paint):
(WebCore::PluginView::handleMouseEvent):
(WebCore::PluginView::setNPWindowRect):
(WebCore::PluginView::snapshot):
* rendering/RenderEmbeddedObject.cpp:
(WebCore::RenderEmbeddedObject::allowsAcceleratedCompositing):
(WebCore::RenderEmbeddedObject::nodeAtPoint):
(WebCore::RenderEmbeddedObject::scroll):
* rendering/RenderFrameBase.h:
(WebCore::RenderFrameBase::childView):
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::layerWillBeDestroyed):
(WebCore::RenderLayerBacking::updateConfiguration):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingFrame):
* rendering/RenderTreeAsText.cpp:
(WebCore::write):
* rendering/RenderWidget.cpp:
(WebCore::WidgetHierarchyUpdatesSuspensionScope::moveWidgets):
(WebCore::RenderWidget::paintContents):
(WebCore::RenderWidget::setOverlapTestResult):
(WebCore::RenderWidget::updateWidgetPosition):
(WebCore::RenderWidget::nodeAtPoint):
(WebCore::RenderWidget::embeddedContentBox):

Source/WebKit/mac:

* WebView/WebRenderNode.mm:
(copyRenderNode):
* WebView/WebView.mm:
(-[WebView _addScrollerDashboardRegionsForFrameView:dashboardRegions:]):

Source/WebKit/win:

* WebCoreSupport/EmbeddedWidget.cpp:
(EmbeddedWidget::frameRectsChanged):

Source/WebKit2:

* Shared/WebRenderObject.cpp:
(WebKit::WebRenderObject::WebRenderObject):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (174505 => 174506)


--- trunk/Source/WebCore/ChangeLog	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/ChangeLog	2014-10-09 16:45:32 UTC (rev 174506)
@@ -1,3 +1,128 @@
+2014-10-09  Chris Dumez  <[email protected]>
+
+        Use is<>() / downcast<>() for Widget subclasses
+        https://bugs.webkit.org/show_bug.cgi?id=137549
+
+        Reviewed by Darin Adler.
+
+        Use is<>() / downcast<>() for Widget subclasses and clean up the
+        surrounding code.
+
+        No new tests, no behavior change.
+
+        * accessibility/AXObjectCache.cpp:
+        (WebCore::AXObjectCache::getOrCreate):
+        * accessibility/AccessibilityObject.cpp:
+        (WebCore::appendAccessibilityObject):
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
+        * accessibility/AccessibilityScrollView.cpp:
+        (WebCore::AccessibilityScrollView::webAreaObject):
+        (WebCore::AccessibilityScrollView::documentFrameView):
+        (WebCore::AccessibilityScrollView::parentObject):
+        (WebCore::AccessibilityScrollView::parentObjectIfExists):
+        * bindings/js/JSPluginElementFunctions.cpp:
+        (WebCore::pluginScriptObjectFromPluginViewBase):
+        * html/HTMLObjectElement.cpp:
+        (WebCore::HTMLObjectElement::appendFormData):
+        * html/HTMLPlugInElement.cpp:
+        (WebCore::HTMLPlugInElement::canProcessDrag):
+        (WebCore::HTMLPlugInElement::isKeyboardFocusable):
+        (WebCore::HTMLPlugInElement::isUserObservable):
+        * html/HTMLPlugInImageElement.cpp:
+        (WebCore::HTMLPlugInImageElement::checkSizeChangeForSnapshotting):
+        (WebCore::HTMLPlugInImageElement::subframeLoaderDidCreatePlugIn):
+        * html/HTMLPlugInImageElement.h:
+        * loader/SubframeLoader.cpp:
+        (WebCore::SubframeLoader::loadPlugin):
+        * page/DragController.cpp:
+        (WebCore::DragController::operationForLoad):
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::subframeForTargetNode):
+        (WebCore::EventHandler::handleWheelEvent):
+        * page/EventHandler.h:
+        * page/Frame.cpp:
+        (WebCore::Frame::frameForWidget):
+        * page/FrameView.cpp:
+        (WebCore::FrameView::hasCustomScrollbars):
+        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):
+        (WebCore::FrameView::convertToContainingView):
+        (WebCore::FrameView::convertFromContainingView):
+        (WebCore::FrameView::removeChild):
+        * page/FrameView.h:
+        * page/Page.cpp:
+        (WebCore::Page::pluginViews):
+        * page/efl/EventHandlerEfl.cpp:
+        (WebCore::EventHandler::passWheelEventToWidget):
+        * page/gtk/EventHandlerGtk.cpp:
+        (WebCore::EventHandler::passWheelEventToWidget):
+        * page/ios/EventHandlerIOS.mm:
+        (WebCore::EventHandler::passWheelEventToWidget):
+        * page/mac/EventHandlerMac.mm:
+        (WebCore::EventHandler::passWheelEventToWidget):
+        * page/scrolling/ScrollingCoordinator.cpp:
+        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
+        * page/win/EventHandlerWin.cpp:
+        (WebCore::EventHandler::passWheelEventToWidget):
+        * platform/ScrollView.cpp:
+        (WebCore::ScrollView::removeChild):
+        (WebCore::ScrollView::setHasHorizontalScrollbar):
+        (WebCore::ScrollView::setHasVerticalScrollbar):
+        * platform/ScrollView.h:
+        * platform/Scrollbar.cpp:
+        (WebCore::Scrollbar::root):
+        Uninline as root() because Widget::root() returns a FrameView now and
+        it is impossible to include FrameView.h in Scrollbar.h without causing
+        a cycle.
+
+        * platform/Scrollbar.h:
+        * platform/Widget.cpp:
+        (WebCore::Widget::root):
+        Use tighter typing and return a FrameView instead of a ScrollView.
+
+        (WebCore::Widget::removeFromParent):
+        * platform/Widget.h:
+        * platform/efl/WidgetEfl.cpp:
+        (WebCore::Widget::setCursor):
+        * platform/gtk/PlatformScreenGtk.cpp:
+        * platform/gtk/WidgetGtk.cpp:
+        (WebCore::Widget::setCursor):
+        * platform/mac/PlatformScreenMac.mm:
+        (WebCore::displayFromWidget):
+        * platform/mac/WidgetMac.mm:
+        (WebCore::Widget::setCursor):
+        * platform/win/WidgetWin.cpp:
+        (WebCore::Widget::setCursor):
+        * plugins/PluginViewBase.h:
+        * plugins/win/PluginViewWin.cpp:
+        (WebCore::PluginView::updatePluginWidget):
+        (WebCore::PluginView::paintIntoTransformedContext):
+        (WebCore::PluginView::paintWindowedPluginIntoContext):
+        (WebCore::PluginView::paint):
+        (WebCore::PluginView::handleMouseEvent):
+        (WebCore::PluginView::setNPWindowRect):
+        (WebCore::PluginView::snapshot):
+        * rendering/RenderEmbeddedObject.cpp:
+        (WebCore::RenderEmbeddedObject::allowsAcceleratedCompositing):
+        (WebCore::RenderEmbeddedObject::nodeAtPoint):
+        (WebCore::RenderEmbeddedObject::scroll):
+        * rendering/RenderFrameBase.h:
+        (WebCore::RenderFrameBase::childView):
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::layerWillBeDestroyed):
+        (WebCore::RenderLayerBacking::updateConfiguration):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingFrame):
+        * rendering/RenderTreeAsText.cpp:
+        (WebCore::write):
+        * rendering/RenderWidget.cpp:
+        (WebCore::WidgetHierarchyUpdatesSuspensionScope::moveWidgets):
+        (WebCore::RenderWidget::paintContents):
+        (WebCore::RenderWidget::setOverlapTestResult):
+        (WebCore::RenderWidget::updateWidgetPosition):
+        (WebCore::RenderWidget::nodeAtPoint):
+        (WebCore::RenderWidget::embeddedContentBox):
+
 2014-10-09  Carlos Garcia Campos  <[email protected]>
 
         Layering violation: MediaPlayer should not reference/use FrameView

Modified: trunk/Source/WebCore/accessibility/AXObjectCache.cpp (174505 => 174506)


--- trunk/Source/WebCore/accessibility/AXObjectCache.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/accessibility/AXObjectCache.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -342,11 +342,11 @@
     if (AccessibilityObject* obj = get(widget))
         return obj;
     
-    RefPtr<AccessibilityObject> newObj = nullptr;
-    if (widget->isFrameView())
-        newObj = AccessibilityScrollView::create(toScrollView(widget));
-    else if (widget->isScrollbar())
-        newObj = AccessibilityScrollbar::create(toScrollbar(widget));
+    RefPtr<AccessibilityObject> newObj;
+    if (is<ScrollView>(*widget))
+        newObj = AccessibilityScrollView::create(downcast<ScrollView>(widget));
+    else if (is<Scrollbar>(*widget))
+        newObj = AccessibilityScrollbar::create(downcast<Scrollbar>(widget));
 
     // Will crash later if we have two objects for the same widget.
     ASSERT(!get(widget));

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (174505 => 174506)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -484,14 +484,14 @@
     // Find the next descendant of this attachment object so search can continue through frames.
     if (object->isAttachment()) {
         Widget* widget = object->widgetForAttachmentView();
-        if (!widget || !widget->isFrameView())
+        if (!is<FrameView>(widget))
             return;
         
-        Document* doc = toFrameView(widget)->frame().document();
-        if (!doc || !doc->hasLivingRenderTree())
+        Document* document = downcast<FrameView>(*widget).frame().document();
+        if (!document || !document->hasLivingRenderTree())
             return;
         
-        object = object->axObjectCache()->getOrCreate(doc);
+        object = object->axObjectCache()->getOrCreate(document);
     }
 
     if (object)

Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (174505 => 174506)


--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -2007,12 +2007,12 @@
 
         // descend into widget (FRAME, IFRAME, OBJECT...)
         Widget* widget = toRenderWidget(renderer)->widget();
-        if (!widget || !widget->isFrameView())
+        if (!is<FrameView>(widget))
             break;
-        Frame& frame = toFrameView(widget)->frame();
+        Frame& frame = downcast<FrameView>(*widget).frame();
         renderView = frame.document()->renderView();
 #if PLATFORM(COCOA)
-        frameView = toFrameView(widget);
+        frameView = downcast<FrameView>(widget);
 #endif
     }
     

Modified: trunk/Source/WebCore/accessibility/AccessibilityScrollView.cpp (174505 => 174506)


--- trunk/Source/WebCore/accessibility/AccessibilityScrollView.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/accessibility/AccessibilityScrollView.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -189,15 +189,15 @@
 
 AccessibilityObject* AccessibilityScrollView::webAreaObject() const
 {
-    if (!m_scrollView || !m_scrollView->isFrameView())
+    if (!is<FrameView>(m_scrollView))
         return nullptr;
     
-    Document* doc = toFrameView(m_scrollView)->frame().document();
-    if (!doc || !doc->hasLivingRenderTree())
+    Document* document = downcast<FrameView>(*m_scrollView).frame().document();
+    if (!document || !document->hasLivingRenderTree())
         return nullptr;
 
     if (AXObjectCache* cache = axObjectCache())
-        return cache->getOrCreate(doc);
+        return cache->getOrCreate(document);
     
     return nullptr;
 }
@@ -231,22 +231,22 @@
 
 FrameView* AccessibilityScrollView::documentFrameView() const
 {
-    if (!m_scrollView || !m_scrollView->isFrameView())
+    if (!is<FrameView>(m_scrollView))
         return nullptr;
     
-    return toFrameView(m_scrollView);
+    return downcast<FrameView>(m_scrollView);
 }    
 
 AccessibilityObject* AccessibilityScrollView::parentObject() const
 {
-    if (!m_scrollView || !m_scrollView->isFrameView())
+    if (!is<FrameView>(m_scrollView))
         return nullptr;
 
     AXObjectCache* cache = axObjectCache();
     if (!cache)
         return nullptr;
 
-    HTMLFrameOwnerElement* owner = toFrameView(m_scrollView)->frame().ownerElement();
+    HTMLFrameOwnerElement* owner = downcast<FrameView>(*m_scrollView).frame().ownerElement();
     if (owner && owner->renderer())
         return cache->getOrCreate(owner);
 
@@ -255,14 +255,14 @@
     
 AccessibilityObject* AccessibilityScrollView::parentObjectIfExists() const
 {
-    if (!m_scrollView || !m_scrollView->isFrameView())
+    if (!is<FrameView>(m_scrollView))
         return nullptr;
     
     AXObjectCache* cache = axObjectCache();
     if (!cache)
         return nullptr;
 
-    HTMLFrameOwnerElement* owner = toFrameView(m_scrollView)->frame().ownerElement();
+    HTMLFrameOwnerElement* owner = downcast<FrameView>(m_scrollView)->frame().ownerElement();
     if (owner && owner->renderer())
         return cache->get(owner);
     

Modified: trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.cpp (174505 => 174506)


--- trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -49,14 +49,10 @@
 static JSObject* pluginScriptObjectFromPluginViewBase(HTMLPlugInElement& pluginElement, JSGlobalObject* globalObject)
 {
     Widget* pluginWidget = pluginElement.pluginWidget();
-    if (!pluginWidget)
+    if (!is<PluginViewBase>(pluginWidget))
         return nullptr;
-    
-    if (!pluginWidget->isPluginViewBase())
-        return nullptr;
 
-    PluginViewBase* pluginViewBase = toPluginViewBase(pluginWidget);
-    return pluginViewBase->scriptObject(globalObject);
+    return downcast<PluginViewBase>(*pluginWidget).scriptObject(globalObject);
 }
 
 static JSObject* pluginScriptObjectFromPluginViewBase(JSHTMLElement* jsHTMLElement)

Modified: trunk/Source/WebCore/html/HTMLObjectElement.cpp (174505 => 174506)


--- trunk/Source/WebCore/html/HTMLObjectElement.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/html/HTMLObjectElement.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -500,10 +500,10 @@
         return false;
 
     Widget* widget = pluginWidget();
-    if (!widget || !widget->isPluginViewBase())
+    if (!is<PluginViewBase>(widget))
         return false;
     String value;
-    if (!toPluginViewBase(widget)->getFormValue(value))
+    if (!downcast<PluginViewBase>(*widget).getFormValue(value))
         return false;
     encoding.appendData(name(), value);
     return true;

Modified: trunk/Source/WebCore/html/HTMLPlugInElement.cpp (174505 => 174506)


--- trunk/Source/WebCore/html/HTMLPlugInElement.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/html/HTMLPlugInElement.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -91,7 +91,7 @@
 
 bool HTMLPlugInElement::canProcessDrag() const
 {
-    const PluginViewBase* plugin = pluginWidget() && pluginWidget()->isPluginViewBase() ? toPluginViewBase(pluginWidget()) : nullptr;
+    const PluginViewBase* plugin = is<PluginViewBase>(pluginWidget()) ? downcast<PluginViewBase>(pluginWidget()) : nullptr;
     return plugin ? plugin->canProcessDrag() : false;
 }
 
@@ -242,10 +242,10 @@
         return false;
 
     Widget* widget = pluginWidget();
-    if (!widget || !widget->isPluginViewBase())
+    if (!is<PluginViewBase>(widget))
         return false;
 
-    return toPluginViewBase(widget)->supportsKeyboardFocus();
+    return downcast<PluginViewBase>(*widget).supportsKeyboardFocus();
 }
 
 bool HTMLPlugInElement::isPluginElement() const
@@ -257,17 +257,17 @@
 {
     // No widget - can't be anything to see or hear here.
     Widget* widget = pluginWidget(PluginLoadingPolicy::DoNotLoad);
-    if (!widget || !widget->isPluginViewBase())
+    if (!is<PluginViewBase>(widget))
         return false;
 
-    PluginViewBase* pluginView = toPluginViewBase(widget);
+    PluginViewBase& pluginView = downcast<PluginViewBase>(*widget);
 
     // If audio is playing (or might be) then the plugin is detectable.
-    if (pluginView->audioHardwareActivity() != AudioHardwareActivityType::IsInactive)
+    if (pluginView.audioHardwareActivity() != AudioHardwareActivityType::IsInactive)
         return true;
 
     // If the plugin is visible and not vanishingly small in either dimension it is detectable.
-    return pluginView->isVisible() && widget->width() > 2 && widget->height() > 2;
+    return pluginView.isVisible() && pluginView.width() > 2 && pluginView.height() > 2;
 }
 
 bool HTMLPlugInElement::supportsFocus() const

Modified: trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp (174505 => 174506)


--- trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -551,8 +551,8 @@
     setDisplayState(WaitingForSnapshot);
     m_snapshotDecision = Snapshotted;
     Widget* widget = pluginWidget();
-    if (widget && widget->isPluginViewBase())
-        toPluginViewBase(widget)->beginSnapshottingRunningPlugin();
+    if (is<PluginViewBase>(widget))
+        downcast<PluginViewBase>(*widget).beginSnapshottingRunningPlugin();
 }
 
 static inline bool is100Percent(Length length)
@@ -725,11 +725,11 @@
     setDisplayState(WaitingForSnapshot);
 }
 
-void HTMLPlugInImageElement::subframeLoaderDidCreatePlugIn(const Widget* widget)
+void HTMLPlugInImageElement::subframeLoaderDidCreatePlugIn(const Widget& widget)
 {
     m_plugInWasCreated = true;
 
-    if (widget->isPluginViewBase() && toPluginViewBase(widget)->shouldAlwaysAutoStart()) {
+    if (is<PluginViewBase>(widget) && downcast<PluginViewBase>(widget).shouldAlwaysAutoStart()) {
         LOG(Plugins, "%p Plug-in should auto-start, set to play", this);
         m_snapshotDecision = NeverSnapshot;
         setDisplayState(Playing);

Modified: trunk/Source/WebCore/html/HTMLPlugInImageElement.h (174505 => 174506)


--- trunk/Source/WebCore/html/HTMLPlugInImageElement.h	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/html/HTMLPlugInImageElement.h	2014-10-09 16:45:32 UTC (rev 174506)
@@ -74,7 +74,7 @@
 
     // Plug-in URL might not be the same as url() with overriding parameters.
     void subframeLoaderWillCreatePlugIn(const URL& plugInURL);
-    void subframeLoaderDidCreatePlugIn(const Widget*);
+    void subframeLoaderDidCreatePlugIn(const Widget&);
 
     WEBCORE_EXPORT void setIsPrimarySnapshottedPlugIn(bool);
     bool partOfSnapshotOverlay(Node*);

Modified: trunk/Source/WebCore/loader/SubframeLoader.cpp (174505 => 174506)


--- trunk/Source/WebCore/loader/SubframeLoader.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/loader/SubframeLoader.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -409,7 +409,7 @@
         return false;
     }
 
-    pluginElement.subframeLoaderDidCreatePlugIn(widget.get());
+    pluginElement.subframeLoaderDidCreatePlugIn(*widget);
     renderer->setWidget(widget);
     m_containsPlugins = true;
     return true;

Modified: trunk/Source/WebCore/page/DragController.cpp (174505 => 174506)


--- trunk/Source/WebCore/page/DragController.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/page/DragController.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -393,19 +393,19 @@
 
 DragOperation DragController::operationForLoad(DragData& dragData)
 {
-    Document* doc = m_page.mainFrame().documentAtPoint(dragData.clientPosition());
+    Document* document = m_page.mainFrame().documentAtPoint(dragData.clientPosition());
 
     bool pluginDocumentAcceptsDrags = false;
 
-    if (is<PluginDocument>(doc)) {
-        const Widget* widget = downcast<PluginDocument>(*doc).pluginWidget();
-        const PluginViewBase* pluginView = (widget && widget->isPluginViewBase()) ? toPluginViewBase(widget) : nullptr;
+    if (is<PluginDocument>(document)) {
+        const Widget* widget = downcast<PluginDocument>(*document).pluginWidget();
+        const PluginViewBase* pluginView = is<PluginViewBase>(widget) ? downcast<PluginViewBase>(widget) : nullptr;
 
         if (pluginView)
             pluginDocumentAcceptsDrags = pluginView->shouldAllowNavigationFromDrags();
     }
 
-    if (doc && (m_didInitiateDrag || (doc->isPluginDocument() && !pluginDocumentAcceptsDrags) || doc->hasEditableStyle()))
+    if (document && (m_didInitiateDrag || (is<PluginDocument>(*document) && !pluginDocumentAcceptsDrags) || document->hasEditableStyle()))
         return DragOperationNone;
     return dragOperation(dragData);
 }

Modified: trunk/Source/WebCore/page/EventHandler.cpp (174505 => 174506)


--- trunk/Source/WebCore/page/EventHandler.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/page/EventHandler.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -1251,17 +1251,17 @@
 Frame* EventHandler::subframeForTargetNode(Node* node)
 {
     if (!node)
-        return 0;
+        return nullptr;
 
     auto renderer = node->renderer();
-    if (!renderer || !renderer->isWidget())
-        return 0;
+    if (!is<RenderWidget>(renderer))
+        return nullptr;
 
-    Widget* widget = toRenderWidget(renderer)->widget();
-    if (!widget || !widget->isFrameView())
-        return 0;
+    Widget* widget = downcast<RenderWidget>(*renderer).widget();
+    if (!is<FrameView>(widget))
+        return nullptr;
 
-    return &toFrameView(widget)->frame();
+    return &downcast<FrameView>(*widget).frame();
 }
 
 #if ENABLE(CURSOR_SUPPORT)
@@ -2704,9 +2704,9 @@
     if (element) {
         if (isOverWidget) {
             RenderElement* target = element->renderer();
-            if (target && target->isWidget()) {
-                Widget* widget = toRenderWidget(target)->widget();
-                if (widget && passWheelEventToWidget(event, widget)) {
+            if (is<RenderWidget>(target)) {
+                Widget* widget = downcast<RenderWidget>(*target).widget();
+                if (widget && passWheelEventToWidget(event, *widget)) {
                     m_isHandlingWheelEvent = false;
                     if (scrollableArea)
                         scrollableArea->setScrolledProgrammatically(false);

Modified: trunk/Source/WebCore/page/EventHandler.h (174505 => 174506)


--- trunk/Source/WebCore/page/EventHandler.h	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/page/EventHandler.h	2014-10-09 16:45:32 UTC (rev 174506)
@@ -394,7 +394,7 @@
     bool passWidgetMouseDownEventToWidget(RenderWidget*);
 
     bool passMouseDownEventToWidget(Widget*);
-    bool passWheelEventToWidget(const PlatformWheelEvent&, Widget*);
+    bool passWheelEventToWidget(const PlatformWheelEvent&, Widget&);
 
     void defaultSpaceEventHandler(KeyboardEvent*);
     void defaultBackspaceEventHandler(KeyboardEvent*);

Modified: trunk/Source/WebCore/page/Frame.cpp (174505 => 174506)


--- trunk/Source/WebCore/page/Frame.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/page/Frame.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -757,8 +757,7 @@
 
     // Assume all widgets are either a FrameView or owned by a RenderWidget.
     // FIXME: That assumption is not right for scroll bars!
-    ASSERT_WITH_SECURITY_IMPLICATION(widget->isFrameView());
-    return &toFrameView(widget)->frame();
+    return &downcast<FrameView>(*widget).frame();
 }
 
 void Frame::clearTimers(FrameView *view, Document *document)

Modified: trunk/Source/WebCore/page/FrameView.cpp (174505 => 174506)


--- trunk/Source/WebCore/page/FrameView.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/page/FrameView.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -3568,11 +3568,11 @@
 bool FrameView::hasCustomScrollbars() const
 {
     for (auto& widget : children()) {
-        if (widget->isFrameView()) {
-            if (toFrameView(*widget).hasCustomScrollbars())
+        if (is<FrameView>(*widget)) {
+            if (downcast<FrameView>(*widget).hasCustomScrollbars())
                 return true;
-        } else if (widget->isScrollbar()) {
-            if (toScrollbar(*widget).isCustomScrollbar())
+        } else if (is<Scrollbar>(*widget)) {
+            if (downcast<Scrollbar>(*widget).isCustomScrollbar())
                 return true;
         }
     }
@@ -3905,8 +3905,8 @@
     Vector<Ref<FrameView>, 16> childViews;
     childViews.reserveInitialCapacity(children().size());
     for (auto& widget : children()) {
-        if (widget->isFrameView())
-            childViews.uncheckedAppend(toFrameView(*widget));
+        if (is<FrameView>(*widget))
+            childViews.uncheckedAppend(downcast<FrameView>(*widget));
     }
 
     for (unsigned i = 0; i < childViews.size(); ++i)
@@ -4104,8 +4104,8 @@
 IntRect FrameView::convertToContainingView(const IntRect& localRect) const
 {
     if (const ScrollView* parentScrollView = parent()) {
-        if (parentScrollView->isFrameView()) {
-            const FrameView* parentView = toFrameView(parentScrollView);
+        if (is<FrameView>(*parentScrollView)) {
+            const FrameView& parentView = downcast<FrameView>(*parentScrollView);
             // Get our renderer in the parent view
             RenderWidget* renderer = frame().ownerRenderer();
             if (!renderer)
@@ -4115,7 +4115,7 @@
             // Add borders and padding??
             rect.move(renderer->borderLeft() + renderer->paddingLeft(),
                       renderer->borderTop() + renderer->paddingTop());
-            return parentView->convertFromRendererToContainingView(renderer, rect);
+            return parentView.convertFromRendererToContainingView(renderer, rect);
         }
         
         return Widget::convertToContainingView(localRect);
@@ -4127,15 +4127,15 @@
 IntRect FrameView::convertFromContainingView(const IntRect& parentRect) const
 {
     if (const ScrollView* parentScrollView = parent()) {
-        if (parentScrollView->isFrameView()) {
-            const FrameView* parentView = toFrameView(parentScrollView);
+        if (is<FrameView>(*parentScrollView)) {
+            const FrameView& parentView = downcast<FrameView>(*parentScrollView);
 
             // Get our renderer in the parent view
             RenderWidget* renderer = frame().ownerRenderer();
             if (!renderer)
                 return parentRect;
 
-            IntRect rect = parentView->convertFromContainingViewToRenderer(renderer, parentRect);
+            IntRect rect = parentView.convertFromContainingViewToRenderer(renderer, parentRect);
             // Subtract borders and padding
             rect.move(-renderer->borderLeft() - renderer->paddingLeft(),
                       -renderer->borderTop() - renderer->paddingTop());
@@ -4151,8 +4151,8 @@
 IntPoint FrameView::convertToContainingView(const IntPoint& localPoint) const
 {
     if (const ScrollView* parentScrollView = parent()) {
-        if (parentScrollView->isFrameView()) {
-            const FrameView* parentView = toFrameView(parentScrollView);
+        if (is<FrameView>(*parentScrollView)) {
+            const FrameView& parentView = downcast<FrameView>(*parentScrollView);
 
             // Get our renderer in the parent view
             RenderWidget* renderer = frame().ownerRenderer();
@@ -4164,7 +4164,7 @@
             // Add borders and padding
             point.move(renderer->borderLeft() + renderer->paddingLeft(),
                        renderer->borderTop() + renderer->paddingTop());
-            return parentView->convertFromRendererToContainingView(renderer, point);
+            return parentView.convertFromRendererToContainingView(renderer, point);
         }
         
         return Widget::convertToContainingView(localPoint);
@@ -4176,15 +4176,15 @@
 IntPoint FrameView::convertFromContainingView(const IntPoint& parentPoint) const
 {
     if (const ScrollView* parentScrollView = parent()) {
-        if (parentScrollView->isFrameView()) {
-            const FrameView* parentView = toFrameView(parentScrollView);
+        if (is<FrameView>(*parentScrollView)) {
+            const FrameView& parentView = downcast<FrameView>(*parentScrollView);
 
             // Get our renderer in the parent view
             RenderWidget* renderer = frame().ownerRenderer();
             if (!renderer)
                 return parentPoint;
 
-            IntPoint point = parentView->convertFromContainingViewToRenderer(renderer, parentPoint);
+            IntPoint point = parentView.convertFromContainingViewToRenderer(renderer, parentPoint);
             // Subtract borders and padding
             point.move(-renderer->borderLeft() - renderer->paddingLeft(),
                        -renderer->borderTop() - renderer->paddingTop());
@@ -4280,10 +4280,10 @@
     frame().eventHandler().dispatchFakeMouseMoveEventSoon();
 }
 
-void FrameView::removeChild(Widget* widget)
+void FrameView::removeChild(Widget& widget)
 {
-    if (widget->isFrameView())
-        removeScrollableArea(toFrameView(widget));
+    if (is<FrameView>(widget))
+        removeScrollableArea(&downcast<FrameView>(widget));
 
     ScrollView::removeChild(widget);
 }

Modified: trunk/Source/WebCore/page/FrameView.h (174505 => 174506)


--- trunk/Source/WebCore/page/FrameView.h	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/page/FrameView.h	2014-10-09 16:45:32 UTC (rev 174506)
@@ -434,7 +434,7 @@
     bool containsScrollableArea(ScrollableArea*) const;
     const ScrollableAreaSet* scrollableAreas() const { return m_scrollableAreas.get(); }
 
-    virtual void removeChild(Widget*) override;
+    virtual void removeChild(Widget&) override;
 
     // This function exists for ports that need to handle wheel events manually.
     // On Mac WebKit1 the underlying NSScrollView just does the scrolling, but on most other platforms
@@ -788,8 +788,8 @@
     updateIsVisuallyNonEmpty();
 }
 
-WIDGET_TYPE_CASTS(FrameView, isFrameView());
-
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_WIDGET(FrameView, isFrameView())
+
 #endif // FrameView_h

Modified: trunk/Source/WebCore/page/Page.cpp (174505 => 174506)


--- trunk/Source/WebCore/page/Page.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/page/Page.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -1163,9 +1163,9 @@
             break;
 
         for (auto it = view->children().begin(), end = view->children().end(); it != end; ++it) {
-            Widget* widget = (*it).get();
-            if (widget->isPluginViewBase())
-                views.append(*toPluginViewBase(widget));
+            Widget& widget = **it;
+            if (is<PluginViewBase>(widget))
+                views.append(downcast<PluginViewBase>(widget));
         }
     }
 

Modified: trunk/Source/WebCore/page/efl/EventHandlerEfl.cpp (174505 => 174506)


--- trunk/Source/WebCore/page/efl/EventHandlerEfl.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/page/efl/EventHandlerEfl.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -87,13 +87,12 @@
     return false;
 }
 
-bool EventHandler::passWheelEventToWidget(const PlatformWheelEvent& event, Widget* widget)
+bool EventHandler::passWheelEventToWidget(const PlatformWheelEvent& event, Widget& widget)
 {
-    ASSERT(widget);
-    if (!widget->isFrameView())
+    if (!is<FrameView>(widget))
         return false;
 
-    return toFrameView(widget)->frame().eventHandler().handleWheelEvent(event);
+    return downcast<FrameView>(widget).frame().eventHandler().handleWheelEvent(event);
 }
 
 #if ENABLE(DRAG_SUPPORT)

Modified: trunk/Source/WebCore/page/gtk/EventHandlerGtk.cpp (174505 => 174506)


--- trunk/Source/WebCore/page/gtk/EventHandlerGtk.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/page/gtk/EventHandlerGtk.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -87,13 +87,12 @@
     return false;
 }
 
-bool EventHandler::passWheelEventToWidget(const PlatformWheelEvent& event, Widget* widget)
+bool EventHandler::passWheelEventToWidget(const PlatformWheelEvent& event, Widget& widget)
 {
-    ASSERT(widget);
-    if (!widget->isFrameView())
+    if (!is<FrameView>(widget))
         return false;
 
-    return toFrameView(widget)->frame().eventHandler().handleWheelEvent(event);
+    return downcast<FrameView>(widget).frame().eventHandler().handleWheelEvent(event);
 }
 
 #if ENABLE(DRAG_SUPPORT)

Modified: trunk/Source/WebCore/page/ios/EventHandlerIOS.mm (174505 => 174506)


--- trunk/Source/WebCore/page/ios/EventHandlerIOS.mm	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/page/ios/EventHandlerIOS.mm	2014-10-09 16:45:32 UTC (rev 174506)
@@ -397,20 +397,17 @@
     return false;
 }
 
-bool EventHandler::passWheelEventToWidget(const PlatformWheelEvent&, Widget* widget)
+bool EventHandler::passWheelEventToWidget(const PlatformWheelEvent&, Widget& widget)
 {
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
 
-    if (!widget)
-        return false;
-
-    NSView* nodeView = widget->platformWidget();
+    NSView* nodeView = widget.platformWidget();
     if (!nodeView) {
         // WK2 code path. No wheel events on iOS anyway.
         return false;
     }
 
-    if (currentEvent().type != WebEventScrollWheel || m_sendingEventToSubview || !widget)
+    if (currentEvent().type != WebEventScrollWheel || m_sendingEventToSubview)
         return false;
 
     ASSERT(nodeView);

Modified: trunk/Source/WebCore/page/mac/EventHandlerMac.mm (174505 => 174506)


--- trunk/Source/WebCore/page/mac/EventHandlerMac.mm	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/page/mac/EventHandlerMac.mm	2014-10-09 16:45:32 UTC (rev 174506)
@@ -423,20 +423,17 @@
         [self release];
 }
 
-bool EventHandler::passWheelEventToWidget(const PlatformWheelEvent& wheelEvent, Widget* widget)
+bool EventHandler::passWheelEventToWidget(const PlatformWheelEvent& wheelEvent, Widget& widget)
 {
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
 
-    if (!widget)
-        return false;
-
-    NSView* nodeView = widget->platformWidget();
+    NSView* nodeView = widget.platformWidget();
     if (!nodeView) {
         // WebKit2 code path.
-        if (!widget->isFrameView())
+        if (!is<FrameView>(widget))
             return false;
 
-        return toFrameView(widget)->frame().eventHandler().handleWheelEvent(wheelEvent);
+        return downcast<FrameView>(widget).frame().eventHandler().handleWheelEvent(wheelEvent);
     }
 
     if ([currentNSEvent() type] != NSScrollWheel || m_sendingEventToSubview) 

Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp (174505 => 174506)


--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -138,11 +138,11 @@
     }
 
     for (const auto& child : frameView->children()) {
-        if (!child->isPluginViewBase())
+        if (!is<PluginViewBase>(*child))
             continue;
-        PluginViewBase* pluginViewBase = toPluginViewBase(child.get());
-        if (pluginViewBase->wantsWheelEvents())
-            nonFastScrollableRegion.unite(pluginViewBase->frameRect());
+        PluginViewBase& pluginViewBase = downcast<PluginViewBase>(*child);
+        if (pluginViewBase.wantsWheelEvents())
+            nonFastScrollableRegion.unite(pluginViewBase.frameRect());
     }
 
     for (Frame* subframe = frame->tree().firstChild(); subframe; subframe = subframe->tree().nextSibling())

Modified: trunk/Source/WebCore/page/win/EventHandlerWin.cpp (174505 => 174506)


--- trunk/Source/WebCore/page/win/EventHandlerWin.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/page/win/EventHandlerWin.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -73,12 +73,12 @@
     return true;
 }
 
-bool EventHandler::passWheelEventToWidget(const PlatformWheelEvent& wheelEvent, Widget* widget)
+bool EventHandler::passWheelEventToWidget(const PlatformWheelEvent& wheelEvent, Widget& widget)
 {
-    if (!widget->isFrameView())
+    if (!is<FrameView>(widget))
         return false;
 
-    return toFrameView(widget)->frame().eventHandler().handleWheelEvent(wheelEvent);
+    return downcast<FrameView>(*widget).frame().eventHandler().handleWheelEvent(wheelEvent);
 }
 
 bool EventHandler::tabsToAllFormControls(KeyboardEvent*) const

Modified: trunk/Source/WebCore/platform/ScrollView.cpp (174505 => 174506)


--- trunk/Source/WebCore/platform/ScrollView.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/platform/ScrollView.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -71,13 +71,13 @@
         platformAddChild(child);
 }
 
-void ScrollView::removeChild(Widget* child)
+void ScrollView::removeChild(Widget& child)
 {
-    ASSERT(child->parent() == this);
-    child->setParent(0);
-    m_children.remove(child);
-    if (child->platformWidget())
-        platformRemoveChild(child);
+    ASSERT(child.parent() == this);
+    child.setParent(nullptr);
+    m_children.remove(&child);
+    if (child.platformWidget())
+        platformRemoveChild(&child);
 }
 
 bool ScrollView::setHasHorizontalScrollbar(bool hasBar, bool* contentSizeAffected)
@@ -96,8 +96,8 @@
     if (!hasBar && m_horizontalScrollbar) {
         bool wasOverlayScrollbar = m_horizontalScrollbar->isOverlayScrollbar();
         willRemoveScrollbar(m_horizontalScrollbar.get(), HorizontalScrollbar);
-        removeChild(m_horizontalScrollbar.get());
-        m_horizontalScrollbar = 0;
+        removeChild(*m_horizontalScrollbar);
+        m_horizontalScrollbar = nullptr;
         if (contentSizeAffected)
             *contentSizeAffected = !wasOverlayScrollbar;
         return true;
@@ -122,8 +122,8 @@
     if (!hasBar && m_verticalScrollbar) {
         bool wasOverlayScrollbar = m_verticalScrollbar->isOverlayScrollbar();
         willRemoveScrollbar(m_verticalScrollbar.get(), VerticalScrollbar);
-        removeChild(m_verticalScrollbar.get());
-        m_verticalScrollbar = 0;
+        removeChild(*m_verticalScrollbar);
+        m_verticalScrollbar = nullptr;
         if (contentSizeAffected)
             *contentSizeAffected = !wasOverlayScrollbar;
         return true;

Modified: trunk/Source/WebCore/platform/ScrollView.h (174505 => 174506)


--- trunk/Source/WebCore/platform/ScrollView.h	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/platform/ScrollView.h	2014-10-09 16:45:32 UTC (rev 174506)
@@ -90,7 +90,7 @@
     // Functions for child manipulation and inspection.
     const HashSet<RefPtr<Widget>>& children() const { return m_children; }
     WEBCORE_EXPORT virtual void addChild(PassRefPtr<Widget>);
-    virtual void removeChild(Widget*);
+    virtual void removeChild(Widget&);
 
     // If the scroll view does not use a native widget, then it will have cross-platform Scrollbars. These functions
     // can be used to obtain those scrollbars.
@@ -507,8 +507,8 @@
 #endif
 }; // class ScrollView
 
-WIDGET_TYPE_CASTS(ScrollView, isScrollView());
-
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_WIDGET(ScrollView, isScrollView())
+
 #endif // ScrollView_h

Modified: trunk/Source/WebCore/platform/Scrollbar.cpp (174505 => 174506)


--- trunk/Source/WebCore/platform/Scrollbar.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/platform/Scrollbar.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "Scrollbar.h"
 
+#include "FrameView.h"
 #include "GraphicsContext.h"
 #include "PlatformMouseEvent.h"
 #include "ScrollAnimator.h"
@@ -558,4 +559,9 @@
 #endif
 }
 
+ScrollView* Scrollbar::root() const
+{
+    return Widget::root();
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/Scrollbar.h (174505 => 174506)


--- trunk/Source/WebCore/platform/Scrollbar.h	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/platform/Scrollbar.h	2014-10-09 16:45:32 UTC (rev 174506)
@@ -58,7 +58,7 @@
     virtual IntPoint location() const override { return Widget::location(); }
 
     virtual ScrollView* parent() const override { return Widget::parent(); }
-    virtual ScrollView* root() const override { return Widget::root(); }
+    virtual ScrollView* root() const override;
 
     virtual void setFrameRect(const IntRect&) override;
     virtual IntRect frameRect() const override { return Widget::frameRect(); }
@@ -207,8 +207,8 @@
     virtual bool isScrollbar() const override { return true; }
 };
 
-WIDGET_TYPE_CASTS(Scrollbar, isScrollbar());
-
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_WIDGET(Scrollbar, isScrollbar())
+
 #endif // Scrollbar_h

Modified: trunk/Source/WebCore/platform/Widget.cpp (174505 => 174506)


--- trunk/Source/WebCore/platform/Widget.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/platform/Widget.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -26,9 +26,8 @@
 #include "config.h"
 #include "Widget.h"
 
+#include "FrameView.h"
 #include "IntRect.h"
-#include "ScrollView.h"
-
 #include <wtf/Assertions.h>
 
 namespace WebCore {
@@ -53,20 +52,20 @@
         setParentVisible(true);
 }
 
-ScrollView* Widget::root() const
+FrameView* Widget::root() const
 {
     const Widget* top = this;
     while (top->parent())
         top = top->parent();
-    if (top->isFrameView())
-        return const_cast<ScrollView*>(toScrollView(top));
+    if (is<FrameView>(*top))
+        return const_cast<FrameView*>(downcast<FrameView>(top));
     return nullptr;
 }
     
 void Widget::removeFromParent()
 {
     if (parent())
-        parent()->removeChild(this);
+        parent()->removeChild(*this);
 }
 
 IntRect Widget::convertFromRootView(const IntRect& rootRect) const

Modified: trunk/Source/WebCore/platform/Widget.h (174505 => 174506)


--- trunk/Source/WebCore/platform/Widget.h	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/platform/Widget.h	2014-10-09 16:45:32 UTC (rev 174506)
@@ -37,6 +37,7 @@
 #include "PlatformScreen.h"
 #include <wtf/Forward.h>
 #include <wtf/RefCounted.h>
+#include <wtf/TypeCasts.h>
 
 #if PLATFORM(COCOA)
 #include <wtf/RetainPtr.h>
@@ -70,6 +71,7 @@
 class Cursor;
 class Event;
 class Font;
+class FrameView;
 class GraphicsContext;
 class PlatformMouseEvent;
 class ScrollView;
@@ -143,7 +145,7 @@
     WEBCORE_EXPORT void removeFromParent();
     WEBCORE_EXPORT virtual void setParent(ScrollView* view);
     ScrollView* parent() const { return m_parent; }
-    ScrollView* root() const;
+    FrameView* root() const;
 
     virtual void handleEvent(Event*) { }
 
@@ -216,9 +218,6 @@
     IntRect m_frame; // Not used when a native widget exists.
 };
 
-#define WIDGET_TYPE_CASTS(ToValueTypeName, predicate) \
-    TYPE_CASTS_BASE(ToValueTypeName, Widget, object, object->predicate, object.predicate)
-
 #if !PLATFORM(COCOA)
 
 inline PlatformWidget Widget::platformWidget() const
@@ -251,4 +250,9 @@
 
 } // namespace WebCore
 
+#define SPECIALIZE_TYPE_TRAITS_WIDGET(ToValueTypeName, predicate) \
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ToValueTypeName) \
+    static bool isType(const WebCore::Widget& widget) { return widget.predicate; } \
+SPECIALIZE_TYPE_TRAITS_END()
+
 #endif // Widget_h

Modified: trunk/Source/WebCore/platform/efl/WidgetEfl.cpp (174505 => 174506)


--- trunk/Source/WebCore/platform/efl/WidgetEfl.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/platform/efl/WidgetEfl.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -79,7 +79,7 @@
 
 void Widget::setCursor(const Cursor& cursor)
 {
-    ScrollView* view = root();
+    FrameView* view = root();
     if (!view)
         return;
     view->hostWindow()->setCursor(cursor);

Modified: trunk/Source/WebCore/platform/gtk/PlatformScreenGtk.cpp (174505 => 174506)


--- trunk/Source/WebCore/platform/gtk/PlatformScreenGtk.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/platform/gtk/PlatformScreenGtk.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -32,10 +32,10 @@
 #include "PlatformScreen.h"
 
 #include "FloatRect.h"
+#include "FrameView.h"
 #include "GtkVersioning.h"
 #include "HostWindow.h"
 #include "NotImplemented.h"
-#include "ScrollView.h"
 #include "Widget.h"
 
 #include <gtk/gtk.h>

Modified: trunk/Source/WebCore/platform/gtk/WidgetGtk.cpp (174505 => 174506)


--- trunk/Source/WebCore/platform/gtk/WidgetGtk.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/platform/gtk/WidgetGtk.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -29,11 +29,11 @@
 #include "Widget.h"
 
 #include "Cursor.h"
+#include "FrameView.h"
 #include "GraphicsContext.h"
 #include "GtkVersioning.h"
 #include "HostWindow.h"
 #include "IntRect.h"
-#include "ScrollView.h"
 
 #include <gdk/gdk.h>
 #include <gtk/gtk.h>
@@ -58,7 +58,7 @@
 
 void Widget::setCursor(const Cursor& cursor)
 {
-    ScrollView* view = root();
+    FrameView* view = root();
     if (!view)
         return;
     view->hostWindow()->setCursor(cursor);

Modified: trunk/Source/WebCore/platform/mac/PlatformScreenMac.mm (174505 => 174506)


--- trunk/Source/WebCore/platform/mac/PlatformScreenMac.mm	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/platform/mac/PlatformScreenMac.mm	2014-10-09 16:45:32 UTC (rev 174506)
@@ -27,8 +27,8 @@
 #import "PlatformScreen.h"
 
 #import "FloatRect.h"
+#import "FrameView.h"
 #import "HostWindow.h"
-#import "ScrollView.h"
 
 namespace WebCore {
 
@@ -69,7 +69,7 @@
     if (!widget)
         return 0;
     
-    ScrollView* view = widget->root();
+    FrameView* view = widget->root();
     if (!view)
         return 0;
 

Modified: trunk/Source/WebCore/platform/mac/WidgetMac.mm (174505 => 174506)


--- trunk/Source/WebCore/platform/mac/WidgetMac.mm	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/platform/mac/WidgetMac.mm	2014-10-09 16:45:32 UTC (rev 174506)
@@ -33,11 +33,11 @@
 #import "Document.h"
 #import "Font.h"
 #import "Frame.h"
+#import "FrameView.h"
 #import "GraphicsContext.h"
 #import "Page.h"
 #import "PlatformMouseEvent.h"
 #import "RuntimeApplicationChecks.h"
-#import "ScrollView.h"
 #import "WebCoreFrameView.h"
 #import "WebCoreView.h"
 #import <wtf/Ref.h>
@@ -106,7 +106,7 @@
 
 void Widget::setCursor(const Cursor& cursor)
 {
-    ScrollView* view = root();
+    FrameView* view = root();
     if (!view)
         return;
     view->hostWindow()->setCursor(cursor);

Modified: trunk/Source/WebCore/platform/win/WidgetWin.cpp (174505 => 174506)


--- trunk/Source/WebCore/platform/win/WidgetWin.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/platform/win/WidgetWin.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -70,7 +70,7 @@
         return;
     }
 
-    ScrollView* view = root();
+    FrameView* view = root();
     if (!view)
         return;
     view->hostWindow()->setCursor(cursor);

Modified: trunk/Source/WebCore/plugins/PluginViewBase.h (174505 => 174506)


--- trunk/Source/WebCore/plugins/PluginViewBase.h	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/plugins/PluginViewBase.h	2014-10-09 16:45:32 UTC (rev 174506)
@@ -81,8 +81,8 @@
     explicit PluginViewBase(PlatformWidget widget = 0) : Widget(widget) { }
 };
 
-WIDGET_TYPE_CASTS(PluginViewBase, isPluginViewBase());
-
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_WIDGET(PluginViewBase, isPluginViewBase())
+
 #endif // PluginWidget_h

Modified: trunk/Source/WebCore/plugins/win/PluginViewWin.cpp (174505 => 174506)


--- trunk/Source/WebCore/plugins/win/PluginViewWin.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/plugins/win/PluginViewWin.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -396,13 +396,12 @@
     if (!parent())
         return;
 
-    ASSERT(parent()->isFrameView());
-    FrameView* frameView = toFrameView(parent());
+    FrameView& frameView = downcast<FrameView>(*parent());
 
     IntRect oldWindowRect = m_windowRect;
     IntRect oldClipRect = m_clipRect;
 
-    m_windowRect = IntRect(frameView->contentsToWindow(frameRect().location()), frameRect().size());
+    m_windowRect = IntRect(frameView.contentsToWindow(frameRect().location()), frameRect().size());
     m_clipRect = windowClipRect();
     m_clipRect.move(-m_windowRect.x(), -m_windowRect.y());
 
@@ -511,7 +510,7 @@
 
     WINDOWPOS windowpos = { 0, 0, 0, 0, 0, 0, 0 };
 
-    IntRect r = contentsToNativeWindow(toFrameView(parent()), frameRect());
+    IntRect r = contentsToNativeWindow(downcast<FrameView>(parent()), frameRect());
 
     windowpos.x = r.x();
     windowpos.y = r.y();
@@ -543,8 +542,7 @@
     ASSERT(m_isWindowed);
     ASSERT(context->shouldIncludeChildWindows());
 
-    ASSERT(parent()->isFrameView());
-    IntPoint locationInWindow = toFrameView(parent())->convertToContainingWindow(frameRect().location());
+    IntPoint locationInWindow = downcast<FrameView>(*parent()).convertToContainingWindow(frameRect().location());
 
     LocalWindowsContext windowsContext(context, frameRect(), false);
 
@@ -596,15 +594,13 @@
         return;
     }
 
-    ASSERT(parent()->isFrameView());
-
     // In the GTK and Qt ports we draw in an offscreen buffer and don't want to use the window
     // coordinates.
 #if PLATFORM(GTK)
     IntRect rectInWindow(rect);
     rectInWindow.intersect(frameRect());
 #else
-    IntRect rectInWindow = toFrameView(parent())->contentsToWindow(frameRect());
+    IntRect rectInWindow = downcast<FrameView>(*parent()).contentsToWindow(frameRect());
 #endif
     LocalWindowsContext windowsContext(context, rectInWindow, m_isTransparent);
 
@@ -658,7 +654,7 @@
 
     NPEvent npEvent;
 
-    IntPoint p = contentsToNativeWindow(toFrameView(parent()), IntPoint(event->pageX(), event->pageY()));
+    IntPoint p = contentsToNativeWindow(downcast<FrameView>(parent()), IntPoint(event->pageX(), event->pageY()));
 
     npEvent.lParam = MAKELPARAM(p.x(), p.y());
     npEvent.wParam = 0;
@@ -771,7 +767,7 @@
 # if PLATFORM(GTK)
     IntPoint p = rect.location();
 # else
-    IntPoint p = toFrameView(parent())->contentsToWindow(rect.location());
+    IntPoint p = downcast<FrameView>(*parent()).contentsToWindow(rect.location());
 # endif
     m_npWindow.x = p.x();
     m_npWindow.y = p.y();
@@ -990,8 +986,7 @@
 
         // Windowless plug-ins assume that they're drawing onto the view's DC.
         // Translate the context so that the plug-in draws at (0, 0).
-        ASSERT(parent()->isFrameView());
-        IntPoint position = toFrameView(parent())->contentsToWindow(frameRect()).location();
+        IntPoint position = downcast<FrameView>(*parent()).contentsToWindow(frameRect()).location();
         transform.eDx = -position.x();
         transform.eDy = -position.y();
         SetWorldTransform(hdc.get(), &transform);

Modified: trunk/Source/WebCore/rendering/RenderEmbeddedObject.cpp (174505 => 174506)


--- trunk/Source/WebCore/rendering/RenderEmbeddedObject.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/rendering/RenderEmbeddedObject.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -131,9 +131,9 @@
 {
 #if PLATFORM(IOS)
     // The timing of layer creation is different on the phone, since the plugin can only be manipulated from the main thread.
-    return widget() && widget()->isPluginViewBase() && toPluginViewBase(widget())->willProvidePluginLayer();
+    return is<PluginViewBase>(widget()) && downcast<PluginViewBase>(*widget()).willProvidePluginLayer();
 #else
-    return widget() && widget()->isPluginViewBase() && toPluginViewBase(widget())->platformLayer();
+    return is<PluginViewBase>(widget()) && downcast<PluginViewBase>(*widget()).platformLayer();
 #endif
 }
 
@@ -539,20 +539,20 @@
     if (!RenderWidget::nodeAtPoint(request, result, locationInContainer, accumulatedOffset, hitTestAction))
         return false;
 
-    if (!widget() || !widget()->isPluginViewBase())
+    if (!is<PluginViewBase>(widget()))
         return true;
 
-    PluginViewBase* view = toPluginViewBase(widget());
+    PluginViewBase& view = downcast<PluginViewBase>(*widget());
     IntPoint roundedPoint = locationInContainer.roundedPoint();
 
-    if (Scrollbar* horizontalScrollbar = view->horizontalScrollbar()) {
+    if (Scrollbar* horizontalScrollbar = view.horizontalScrollbar()) {
         if (horizontalScrollbar->shouldParticipateInHitTesting() && horizontalScrollbar->frameRect().contains(roundedPoint)) {
             result.setScrollbar(horizontalScrollbar);
             return true;
         }
     }
 
-    if (Scrollbar* verticalScrollbar = view->verticalScrollbar()) {
+    if (Scrollbar* verticalScrollbar = view.verticalScrollbar()) {
         if (verticalScrollbar->shouldParticipateInHitTesting() && verticalScrollbar->frameRect().contains(roundedPoint)) {
             result.setScrollbar(verticalScrollbar);
             return true;
@@ -564,10 +564,10 @@
 
 bool RenderEmbeddedObject::scroll(ScrollDirection direction, ScrollGranularity granularity, float, Element**, RenderBox*, const IntPoint&)
 {
-    if (!widget() || !widget()->isPluginViewBase())
+    if (!is<PluginViewBase>(widget()))
         return false;
 
-    return toPluginViewBase(widget())->scroll(direction, granularity);
+    return downcast<PluginViewBase>(*widget()).scroll(direction, granularity);
 }
 
 bool RenderEmbeddedObject::logicalScroll(ScrollLogicalDirection direction, ScrollGranularity granularity, float multiplier, Element** stopElement)

Modified: trunk/Source/WebCore/rendering/RenderFrameBase.h (174505 => 174506)


--- trunk/Source/WebCore/rendering/RenderFrameBase.h	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/rendering/RenderFrameBase.h	2014-10-09 16:45:32 UTC (rev 174506)
@@ -39,7 +39,7 @@
     RenderFrameBase(HTMLFrameElementBase&, PassRef<RenderStyle>);
 
 public:
-    FrameView* childView() const { return toFrameView(RenderWidget::widget()); }
+    FrameView* childView() const { return downcast<FrameView>(RenderWidget::widget()); }
 
     void layoutWithFlattening(bool fixedWidth, bool fixedHeight);
 

Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (174505 => 174506)


--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -318,8 +318,8 @@
 void RenderLayerBacking::layerWillBeDestroyed()
 {
     RenderObject& renderer = this->renderer();
-    if (renderer.isEmbeddedObject() && toRenderEmbeddedObject(renderer).allowsAcceleratedCompositing()) {
-        PluginViewBase* pluginViewBase = toPluginViewBase(toRenderWidget(renderer).widget());
+    if (is<RenderEmbeddedObject>(renderer) && downcast<RenderEmbeddedObject>(renderer).allowsAcceleratedCompositing()) {
+        PluginViewBase* pluginViewBase = downcast<PluginViewBase>(downcast<RenderWidget>(renderer).widget());
         if (pluginViewBase && m_graphicsLayer->contentsLayerForMedia())
             pluginViewBase->detachPluginLayer();
     }
@@ -572,8 +572,8 @@
     if (isDirectlyCompositedImage())
         updateImageContents();
 
-    if (renderer().isEmbeddedObject() && toRenderEmbeddedObject(&renderer())->allowsAcceleratedCompositing()) {
-        PluginViewBase* pluginViewBase = toPluginViewBase(toRenderWidget(&renderer())->widget());
+    if (is<RenderEmbeddedObject>(renderer()) && downcast<RenderEmbeddedObject>(renderer()).allowsAcceleratedCompositing()) {
+        PluginViewBase* pluginViewBase = downcast<PluginViewBase>(downcast<RenderWidget>(renderer()).widget());
 #if PLATFORM(IOS)
         if (pluginViewBase && !m_graphicsLayer->contentsLayerForMedia()) {
             pluginViewBase->detachPluginLayer();

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (174505 => 174506)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -2068,7 +2068,6 @@
     // is to have the parent document become composited too. However, this can cause problems on platforms that
     // use native views for frames (like Mac), so disable that behavior on those platforms for now.
     HTMLFrameOwnerElement* ownerElement = m_renderView.document().ownerElement();
-    RenderElement* renderer = ownerElement ? ownerElement->renderer() : 0;
 
     // If we are the top-level frame, don't propagate.
     if (!ownerElement)
@@ -2077,7 +2076,8 @@
     if (!allowsIndependentlyCompositedFrames(&m_renderView.frameView()))
         return true;
 
-    if (!renderer || !renderer->isWidget())
+    RenderElement* renderer = ownerElement->renderer();
+    if (!is<RenderWidget>(renderer))
         return false;
 
     // On Mac, only propagate compositing if the frame is overlapped in the parent
@@ -2086,11 +2086,10 @@
     if (page && page->pageScaleFactor() != 1)
         return true;
     
-    RenderWidget* frameRenderer = toRenderWidget(renderer);
-    if (frameRenderer->widget()) {
-        ASSERT(frameRenderer->widget()->isFrameView());
-        FrameView* view = toFrameView(frameRenderer->widget());
-        if (view->isOverlappedIncludingAncestors() || view->hasCompositingAncestor())
+    RenderWidget& frameRenderer = downcast<RenderWidget>(*renderer);
+    if (frameRenderer.widget()) {
+        FrameView& view = downcast<FrameView>(*frameRenderer.widget());
+        if (view.isOverlappedIncludingAncestors() || view.hasCompositingAncestor())
             return true;
     }
 

Modified: trunk/Source/WebCore/rendering/RenderTreeAsText.cpp (174505 => 174506)


--- trunk/Source/WebCore/rendering/RenderTreeAsText.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/rendering/RenderTreeAsText.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -563,16 +563,15 @@
         }
     }
 
-    if (o.isWidget()) {
-        Widget* widget = toRenderWidget(&o)->widget();
-        if (widget && widget->isFrameView()) {
-            FrameView* view = toFrameView(widget);
-            if (RenderView* root = view->frame().contentRenderer()) {
+    if (is<RenderWidget>(o)) {
+        Widget* widget = downcast<RenderWidget>(o).widget();
+        if (is<FrameView>(widget)) {
+            FrameView& view = downcast<FrameView>(*widget);
+            if (RenderView* root = view.frame().contentRenderer()) {
                 if (!(behavior & RenderAsTextDontUpdateLayout))
-                    view->layout();
-                RenderLayer* l = root->layer();
-                if (l)
-                    writeLayers(ts, l, l, l->rect(), indent + 1, behavior);
+                    view.layout();
+                if (RenderLayer* layer = root->layer())
+                    writeLayers(ts, layer, layer, layer->rect(), indent + 1, behavior);
             }
         }
     }

Modified: trunk/Source/WebCore/rendering/RenderWidget.cpp (174505 => 174506)


--- trunk/Source/WebCore/rendering/RenderWidget.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebCore/rendering/RenderWidget.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -61,7 +61,7 @@
         FrameView* newParent = it->value;
         if (newParent != currentParent) {
             if (currentParent)
-                currentParent->removeChild(child);
+                currentParent->removeChild(*child);
             if (newParent)
                 newParent->addChild(child);
         }
@@ -238,9 +238,9 @@
     if (!widgetPaintOffset.isZero())
         paintInfo.context->translate(-widgetPaintOffset);
 
-    if (m_widget->isFrameView()) {
-        FrameView* frameView = toFrameView(m_widget.get());
-        bool runOverlapTests = !frameView->useSlowRepaintsIfNotOverlapped() || frameView->hasCompositedContentIncludingDescendants();
+    if (is<FrameView>(*m_widget)) {
+        FrameView& frameView = downcast<FrameView>(*m_widget);
+        bool runOverlapTests = !frameView.useSlowRepaintsIfNotOverlapped() || frameView.hasCompositedContentIncludingDescendants();
         if (paintInfo.overlapTestRequests && runOverlapTests) {
             ASSERT(!paintInfo.overlapTestRequests->contains(this));
             paintInfo.overlapTestRequests->set(this, m_widget->frameRect());
@@ -301,8 +301,7 @@
 void RenderWidget::setOverlapTestResult(bool isOverlapped)
 {
     ASSERT(m_widget);
-    ASSERT(m_widget->isFrameView());
-    toFrameView(m_widget.get())->setIsOverlapped(isOverlapped);
+    downcast<FrameView>(*m_widget).setIsOverlapped(isOverlapped);
 }
 
 void RenderWidget::updateWidgetPosition()
@@ -317,11 +316,11 @@
 
     // if the frame size got changed, or if view needs layout (possibly indicating
     // content size is wrong) we have to do a layout to set the right widget size.
-    if (m_widget->isFrameView()) {
-        FrameView* frameView = toFrameView(m_widget.get());
+    if (is<FrameView>(*m_widget)) {
+        FrameView& frameView = downcast<FrameView>(*m_widget);
         // Check the frame's page to make sure that the frame isn't in the process of being destroyed.
-        if ((widgetSizeChanged || frameView->needsLayout()) && frameView->frame().page())
-            frameView->layout();
+        if ((widgetSizeChanged || frameView.needsLayout()) && frameView.frame().page())
+            frameView.layout();
     }
 }
 
@@ -346,17 +345,17 @@
 
 bool RenderWidget::nodeAtPoint(const HitTestRequest& request, HitTestResult& result, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction action)
 {
-    if (request.allowsChildFrameContent() && widget() && widget()->isFrameView() && toFrameView(widget())->renderView()) {
-        FrameView* childFrameView = toFrameView(widget());
-        RenderView* childRoot = childFrameView->renderView();
+    if (request.allowsChildFrameContent() && is<FrameView>(widget()) && downcast<FrameView>(*widget()).renderView()) {
+        FrameView& childFrameView = downcast<FrameView>(*widget());
+        RenderView& childRoot = *childFrameView.renderView();
 
         LayoutPoint adjustedLocation = accumulatedOffset + location();
-        LayoutPoint contentOffset = LayoutPoint(borderLeft() + paddingLeft(), borderTop() + paddingTop()) - childFrameView->scrollOffset();
+        LayoutPoint contentOffset = LayoutPoint(borderLeft() + paddingLeft(), borderTop() + paddingTop()) - childFrameView.scrollOffset();
         HitTestLocation newHitTestLocation(locationInContainer, -adjustedLocation - contentOffset);
         HitTestRequest newHitTestRequest(request.type() | HitTestRequest::ChildFrameHitTest);
         HitTestResult childFrameResult(newHitTestLocation);
 
-        bool isInsideChildFrame = childRoot->hitTest(newHitTestRequest, newHitTestLocation, childFrameResult);
+        bool isInsideChildFrame = childRoot.hitTest(newHitTestRequest, newHitTestLocation, childFrameResult);
 
         if (newHitTestLocation.isRectBasedTest())
             result.append(childFrameResult);
@@ -401,9 +400,9 @@
 
 RenderBox* RenderWidget::embeddedContentBox() const
 {
-    if (!widget() || !widget()->isFrameView())
-        return 0;
-    return toFrameView(widget())->embeddedContentBox();
+    if (!is<FrameView>(widget()))
+        return nullptr;
+    return downcast<FrameView>(*widget()).embeddedContentBox();
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebKit/mac/ChangeLog (174505 => 174506)


--- trunk/Source/WebKit/mac/ChangeLog	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebKit/mac/ChangeLog	2014-10-09 16:45:32 UTC (rev 174506)
@@ -1,3 +1,18 @@
+2014-10-09  Chris Dumez  <[email protected]>
+
+        Use is<>() / downcast<>() for Widget subclasses
+        https://bugs.webkit.org/show_bug.cgi?id=137549
+
+        Reviewed by Darin Adler.
+
+        Use is<>() / downcast<>() for Widget subclasses and clean up the
+        surrounding code.
+
+        * WebView/WebRenderNode.mm:
+        (copyRenderNode):
+        * WebView/WebView.mm:
+        (-[WebView _addScrollerDashboardRegionsForFrameView:dashboardRegions:]):
+
 2014-10-07  Christophe Dumez  <[email protected]>
 
         Use is<>() / downcast<>() for RenderText / RenderTextFragment

Modified: trunk/Source/WebKit/mac/WebView/WebRenderNode.mm (174505 => 174506)


--- trunk/Source/WebKit/mac/WebView/WebRenderNode.mm	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebKit/mac/WebView/WebRenderNode.mm	2014-10-09 16:45:32 UTC (rev 174506)
@@ -95,9 +95,9 @@
 
     NSString *name = [[NSString alloc] initWithUTF8String:node->renderName()];
     
-    RenderWidget* renderWidget = node->isWidget() ? toRenderWidget(node) : nullptr;
+    RenderWidget* renderWidget = is<RenderWidget>(*node) ? downcast<RenderWidget>(node) : nullptr;
     Widget* widget = renderWidget ? renderWidget->widget() : nullptr;
-    FrameView* frameView = widget && widget->isFrameView() ? toFrameView(widget) : nullptr;
+    FrameView* frameView = is<FrameView>(widget) ? downcast<FrameView>(widget) : nullptr;
     Frame* frame = frameView ? &frameView->frame() : nullptr;
 
     // FIXME: broken with transforms

Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (174505 => 174506)


--- trunk/Source/WebKit/mac/WebView/WebView.mm	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm	2014-10-09 16:45:32 UTC (rev 174506)
@@ -2958,8 +2958,8 @@
     NSView *documentView = [[kit(&frameView->frame()) frameView] documentView];
 
     for (const auto& widget: frameView->children()) {
-        if (widget->isFrameView()) {
-            [self _addScrollerDashboardRegionsForFrameView:toFrameView(widget.get()) dashboardRegions:regions];
+        if (is<FrameView>(*widget)) {
+            [self _addScrollerDashboardRegionsForFrameView:downcast<FrameView>(widget.get()) dashboardRegions:regions];
             continue;
         }
 

Modified: trunk/Source/WebKit/win/ChangeLog (174505 => 174506)


--- trunk/Source/WebKit/win/ChangeLog	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebKit/win/ChangeLog	2014-10-09 16:45:32 UTC (rev 174506)
@@ -1,3 +1,16 @@
+2014-10-09  Chris Dumez  <[email protected]>
+
+        Use is<>() / downcast<>() for Widget subclasses
+        https://bugs.webkit.org/show_bug.cgi?id=137549
+
+        Reviewed by Darin Adler.
+
+        Use is<>() / downcast<>() for Widget subclasses and clean up the
+        surrounding code.
+
+        * WebCoreSupport/EmbeddedWidget.cpp:
+        (EmbeddedWidget::frameRectsChanged):
+
 2014-10-08  Brent Fulgham  <[email protected]>
 
         [Win] Resolve various static analyzer warnings in WebKit.

Modified: trunk/Source/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp (174505 => 174506)


--- trunk/Source/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -93,13 +93,12 @@
     if (!parent())
         return;
 
-    ASSERT(parent()->isFrameView());
-    FrameView* frameView = toFrameView(parent());
+    FrameView& frameView = downcast<FrameView>(*parent());
 
     IntRect oldWindowRect = m_windowRect;
     IntRect oldClipRect = m_clipRect;
 
-    m_windowRect = IntRect(frameView->contentsToWindow(frameRect().location()), frameRect().size());
+    m_windowRect = IntRect(frameView.contentsToWindow(frameRect().location()), frameRect().size());
     m_clipRect = windowClipRect();
     m_clipRect.move(-m_windowRect.x(), -m_windowRect.y());
 

Modified: trunk/Source/WebKit2/ChangeLog (174505 => 174506)


--- trunk/Source/WebKit2/ChangeLog	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebKit2/ChangeLog	2014-10-09 16:45:32 UTC (rev 174506)
@@ -1,3 +1,16 @@
+2014-10-09  Chris Dumez  <[email protected]>
+
+        Use is<>() / downcast<>() for Widget subclasses
+        https://bugs.webkit.org/show_bug.cgi?id=137549
+
+        Reviewed by Darin Adler.
+
+        Use is<>() / downcast<>() for Widget subclasses and clean up the
+        surrounding code.
+
+        * Shared/WebRenderObject.cpp:
+        (WebKit::WebRenderObject::WebRenderObject):
+
 2014-10-08  Carlos Garcia Campos  <[email protected]>
 
         [GTK] Use the PageLoadState observer also to monitor title and estimated load progress

Modified: trunk/Source/WebKit2/Shared/WebRenderObject.cpp (174505 => 174506)


--- trunk/Source/WebKit2/Shared/WebRenderObject.cpp	2014-10-09 16:18:46 UTC (rev 174505)
+++ trunk/Source/WebKit2/Shared/WebRenderObject.cpp	2014-10-09 16:45:32 UTC (rev 174506)
@@ -106,11 +106,11 @@
         children.append(WTF::move(child));
     }
 
-    if (renderer->isWidget()) {
-        if (Widget* widget = toRenderWidget(renderer)->widget()) {
-            if (widget->isFrameView()) {
-                FrameView* frameView = toFrameView(widget);
-                if (RenderView* coreContentRenderer = frameView->frame().contentRenderer()) {
+    if (is<RenderWidget>(*renderer)) {
+        if (Widget* widget = downcast<RenderWidget>(*renderer).widget()) {
+            if (is<FrameView>(*widget)) {
+                FrameView& frameView = downcast<FrameView>(*widget);
+                if (RenderView* coreContentRenderer = frameView.frame().contentRenderer()) {
                     RefPtr<WebRenderObject> contentRenderer = adoptRef(new WebRenderObject(coreContentRenderer, shouldIncludeDescendants));
 
                     children.append(WTF::move(contentRenderer));
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to