From 03e12282df9aa1e1fb05a8b90f1cfc2e08764cec Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Thu, 9 Feb 2012 14:16:12 +0100 Subject: Imported WebKit commit e09a82039aa4273ab318b71122e92d8e5f233525 (http://svn.webkit.org/repository/webkit/trunk@107223) --- Source/WebKit2/WebProcess/WebPage/WebFrame.cpp | 37 ++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'Source/WebKit2/WebProcess/WebPage/WebFrame.cpp') diff --git a/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp b/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp index 43f443829..a829fe45b 100644 --- a/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp +++ b/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp @@ -30,6 +30,8 @@ #include "InjectedBundleNodeHandle.h" #include "InjectedBundleRangeHandle.h" #include "InjectedBundleScriptWorld.h" +#include "WKAPICast.h" +#include "WKBundleAPICast.h" #include "WebChromeClient.h" #include "WebPage.h" #include "WebPageProxyMessages.h" @@ -734,9 +736,40 @@ void WebFrame::setTextDirection(const String& direction) } #if PLATFORM(MAC) || PLATFORM(WIN) -RetainPtr WebFrame::webArchiveData() const + +class WebFrameFilter : public FrameFilter { +public: + WebFrameFilter(WebFrame*, WebFrame::FrameFilterFunction, void* context); + +private: + virtual bool shouldIncludeSubframe(Frame*) const OVERRIDE; + + WebFrame* m_topLevelWebFrame; + WebFrame::FrameFilterFunction m_callback; + void* m_context; +}; + +WebFrameFilter::WebFrameFilter(WebFrame* topLevelWebFrame, WebFrame::FrameFilterFunction callback, void* context) + : m_topLevelWebFrame(topLevelWebFrame) + , m_callback(callback) + , m_context(context) +{ +} + +bool WebFrameFilter::shouldIncludeSubframe(Frame* frame) const { - if (RefPtr archive = LegacyWebArchive::create(coreFrame()->document())) + if (!m_callback) + return true; + + WebFrame* webFrame = static_cast(frame->loader()->client())->webFrame(); + return m_callback(toAPI(m_topLevelWebFrame), toAPI(webFrame), m_context); +} + +RetainPtr WebFrame::webArchiveData(FrameFilterFunction callback, void* context) +{ + WebFrameFilter filter(this, callback, context); + + if (RefPtr archive = LegacyWebArchive::create(coreFrame()->document(), &filter)) return archive->rawDataRepresentation(); return 0; -- cgit v1.2.1