Make FrameView and Frame TextStream-loggable
https://bugs.webkit.org/show_bug.cgi?id=209826

Reviewed by Darin Adler.

Provide operator<<(TextStream&, ...) for Frame and FrameView so they can be logged.
Only basic data logging currently; this can be adjusted as necessary.

* page/Frame.cpp:
(WebCore::operator<<):
* page/Frame.h:
* page/FrameView.cpp:
(WebCore::operator<<):
* page/FrameView.h:


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@259335 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 4ef9c59..6276b96 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,20 @@
+2020-03-31  Simon Fraser  <simon.fraser@apple.com>
+
+        Make FrameView and Frame TextStream-loggable
+        https://bugs.webkit.org/show_bug.cgi?id=209826
+
+        Reviewed by Darin Adler.
+
+        Provide operator<<(TextStream&, ...) for Frame and FrameView so they can be logged.
+        Only basic data logging currently; this can be adjusted as necessary.
+
+        * page/Frame.cpp:
+        (WebCore::operator<<):
+        * page/Frame.h:
+        * page/FrameView.cpp:
+        (WebCore::operator<<):
+        * page/FrameView.h:
+
 2020-03-31  Zalan Bujtas  <zalan@apple.com>
 
         [MultiColumn] Call RenderTreeBuilder::multiColumnDescendantInserted only when the enclosing fragmented flow has changed
diff --git a/Source/WebCore/page/Frame.cpp b/Source/WebCore/page/Frame.cpp
index 519f3ef..69146c3 100644
--- a/Source/WebCore/page/Frame.cpp
+++ b/Source/WebCore/page/Frame.cpp
@@ -106,6 +106,7 @@
 #include <wtf/RefCountedLeakCounter.h>
 #include <wtf/StdLibExtras.h>
 #include <wtf/text/StringBuilder.h>
+#include <wtf/text/TextStream.h>
 
 #define RELEASE_LOG_ERROR_IF_ALLOWED(channel, fmt, ...) RELEASE_LOG_ERROR_IF(isAlwaysOnLoggingAllowed(), channel, "%p - Frame::" fmt, this, ##__VA_ARGS__)
 
@@ -1052,6 +1053,12 @@
     deref();
 }
 
+TextStream& operator<<(TextStream& ts, const Frame& frame)
+{
+    ts << "Frame " << &frame << " view " << frame.view() << " (is main frame " << frame.isMainFrame() << ") " << (frame.document() ? frame.document()->documentURI() : emptyString());
+    return ts;
+}
+
 } // namespace WebCore
 
 #undef RELEASE_LOG_ERROR_IF_ALLOWED
diff --git a/Source/WebCore/page/Frame.h b/Source/WebCore/page/Frame.h
index 6fdfa68..2520e03 100644
--- a/Source/WebCore/page/Frame.h
+++ b/Source/WebCore/page/Frame.h
@@ -59,6 +59,10 @@
 class RegularExpression;
 } }
 
+namespace WTF {
+class TextStream;
+}
+
 namespace WebCore {
 
 class CSSAnimationController;
@@ -412,6 +416,8 @@
     return m_mainFrame;
 }
 
+WTF::TextStream& operator<<(WTF::TextStream&, const Frame&);
+
 } // namespace WebCore
 
 SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::Frame)
diff --git a/Source/WebCore/page/FrameView.cpp b/Source/WebCore/page/FrameView.cpp
index f984fc2..79a41e9 100644
--- a/Source/WebCore/page/FrameView.cpp
+++ b/Source/WebCore/page/FrameView.cpp
@@ -5089,7 +5089,6 @@
     return ScrollableArea::handleWheelEvent(wheelEvent);
 }
 
-
 bool FrameView::isVerticalDocument() const
 {
     RenderView* renderView = this->renderView();
@@ -5445,6 +5444,12 @@
     return renderView() && renderView()->shouldPlaceBlockDirectionScrollbarOnLeft();
 }
 
+TextStream& operator<<(TextStream& ts, const FrameView& view)
+{
+    ts << "FrameView " << &view << " frame " << view.frame();
+    return ts;
+}
+
 } // namespace WebCore
 
 #undef PAGE_ID
diff --git a/Source/WebCore/page/FrameView.h b/Source/WebCore/page/FrameView.h
index 2f333e1..bb95785 100644
--- a/Source/WebCore/page/FrameView.h
+++ b/Source/WebCore/page/FrameView.h
@@ -49,6 +49,10 @@
 #include <wtf/WeakHashSet.h>
 #include <wtf/text/WTFString.h>
 
+namespace WTF {
+class TextStream;
+}
+
 namespace WebCore {
 
 class AXObjectCache;
@@ -954,6 +958,8 @@
     m_visuallyNonEmptyPixelCount += size.width() * size.height();
 }
 
+WTF::TextStream& operator<<(WTF::TextStream&, const FrameView&);
+
 } // namespace WebCore
 
 SPECIALIZE_TYPE_TRAITS_WIDGET(FrameView, isFrameView())