Changeset 159089 in webkit


Ignore:
Timestamp:
Nov 11, 2013 5:51:39 PM (10 years ago)
Author:
andersca@apple.com
Message:

FrameFilter can just be an std::function instead
https://bugs.webkit.org/show_bug.cgi?id=124176

Reviewed by Tim Horton.

Source/WebCore:

  • WebCore.exp.in:
  • loader/archive/cf/LegacyWebArchive.cpp:

(WebCore::LegacyWebArchive::create):

  • loader/archive/cf/LegacyWebArchive.h:

Source/WebKit/mac:

  • DOM/WebDOMOperations.mm:

(-[DOMNode webArchiveByFilteringSubframes:]):

Source/WebKit2:

  • WebProcess/WebPage/WebFrame.cpp:

(WebKit::WebFrame::webArchiveData):

Location:
trunk/Source
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r159082 r159089  
     12013-11-11  Anders Carlsson  <andersca@apple.com>
     2
     3        FrameFilter can just be an std::function instead
     4        https://bugs.webkit.org/show_bug.cgi?id=124176
     5
     6        Reviewed by Tim Horton.
     7
     8        * WebCore.exp.in:
     9        * loader/archive/cf/LegacyWebArchive.cpp:
     10        (WebCore::LegacyWebArchive::create):
     11        * loader/archive/cf/LegacyWebArchive.h:
     12
    1132013-11-11  Simon Fraser  <simon.fraser@apple.com>
    214
  • trunk/Source/WebCore/WebCore.exp.in

    r159001 r159089  
    625625__ZN7WebCore16LegacyWebArchive6createEN3WTF10PassRefPtrINS_15ArchiveResourceEEERNS1_6VectorIS4_Lm0ENS1_15CrashOnOverflowEEERNS5_INS2_IS0_EELm0ES6_EE
    626626__ZN7WebCore16LegacyWebArchive6createEPNS_12SharedBufferE
    627 __ZN7WebCore16LegacyWebArchive6createEPNS_4NodeEPNS_11FrameFilterE
     627__ZN7WebCore16LegacyWebArchive6createEPNS_4NodeENSt3__18functionIFbRNS_5FrameEEEE
    628628__ZN7WebCore16LegacyWebArchive6createEPNS_5FrameE
    629629__ZN7WebCore16LegacyWebArchive6createEPNS_5RangeE
  • trunk/Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp

    r157653 r159089  
    423423#endif
    424424
    425 PassRefPtr<LegacyWebArchive> LegacyWebArchive::create(Node* node, FrameFilter* filter)
     425PassRefPtr<LegacyWebArchive> LegacyWebArchive::create(Node* node, std::function<bool (Frame&)> frameFilter)
    426426{
    427427    ASSERT(node);
     
    448448        markupString = documentTypeString(node->document()) + markupString;
    449449
    450     return create(markupString, frame, nodeList, filter);
     450    return create(markupString, frame, nodeList, std::move(frameFilter));
    451451}
    452452
     
    497497}
    498498
    499 PassRefPtr<LegacyWebArchive> LegacyWebArchive::create(const String& markupString, Frame* frame, const Vector<Node*>& nodes, FrameFilter* frameFilter)
     499PassRefPtr<LegacyWebArchive> LegacyWebArchive::create(const String& markupString, Frame* frame, const Vector<Node*>& nodes, std::function<bool (Frame&)> frameFilter)
    500500{
    501501    ASSERT(frame);
     
    521521        if ((isHTMLFrameElement(node) || isHTMLIFrameElement(node) || isHTMLObjectElement(node))
    522522            && (childFrame = toHTMLFrameOwnerElement(node).contentFrame())) {
    523             if (frameFilter && !frameFilter->shouldIncludeSubframe(childFrame))
     523            if (frameFilter && !frameFilter(*childFrame))
    524524                continue;
    525525               
  • trunk/Source/WebCore/loader/archive/cf/LegacyWebArchive.h

    r157653 r159089  
    3131
    3232#include "Archive.h"
     33#include <functional>
    3334
    3435namespace WebCore {
     
    3839class Range;
    3940
    40 class FrameFilter {
    41 public:
    42     virtual ~FrameFilter() { }
    43     virtual bool shouldIncludeSubframe(Frame*) const = 0;
    44 };
    45 
    4641class LegacyWebArchive : public Archive {
    4742public:
     
    5045    static PassRefPtr<LegacyWebArchive> create(const URL&, SharedBuffer*);
    5146    static PassRefPtr<LegacyWebArchive> create(PassRefPtr<ArchiveResource> mainResource, Vector<PassRefPtr<ArchiveResource>>& subresources, Vector<PassRefPtr<LegacyWebArchive>>& subframeArchives);
    52     static PassRefPtr<LegacyWebArchive> create(Node*, FrameFilter* = 0);
     47    static PassRefPtr<LegacyWebArchive> create(Node*, std::function<bool (Frame&)> frameFilter = nullptr);
    5348    static PassRefPtr<LegacyWebArchive> create(Frame*);
    5449    static PassRefPtr<LegacyWebArchive> createFromSelection(Frame*);
     
    6459    enum MainResourceStatus { Subresource, MainResource };
    6560
    66     static PassRefPtr<LegacyWebArchive> create(const String& markupString, Frame*, const Vector<Node*>& nodes, FrameFilter*);
     61    static PassRefPtr<LegacyWebArchive> create(const String& markupString, Frame*, const Vector<Node*>& nodes, std::function<bool (Frame&)> frameFilter);
    6762    static PassRefPtr<ArchiveResource> createResource(CFDictionaryRef);
    6863    static ResourceResponse createResourceResponseFromMacArchivedData(CFDataRef);
  • trunk/Source/WebKit/mac/ChangeLog

    r159054 r159089  
     12013-11-11  Anders Carlsson  <andersca@apple.com>
     2
     3        FrameFilter can just be an std::function instead
     4        https://bugs.webkit.org/show_bug.cgi?id=124176
     5
     6        Reviewed by Tim Horton.
     7
     8        * DOM/WebDOMOperations.mm:
     9        (-[DOMNode webArchiveByFilteringSubframes:]):
     10
    1112013-11-11  Dan Bernstein  <mitz@apple.com>
    212
  • trunk/Source/WebKit/mac/DOM/WebDOMOperations.mm

    r157002 r159089  
    7676@end
    7777
    78 class WebFrameFilter : public WebCore::FrameFilter {
    79 public:
    80     WebFrameFilter(WebArchiveSubframeFilter filterBlock);
    81     ~WebFrameFilter();
    82 private:
    83     virtual bool shouldIncludeSubframe(Frame*) const OVERRIDE;
    84 
    85     WebArchiveSubframeFilter m_filterBlock;
    86 };
    87 
    88 WebFrameFilter::WebFrameFilter(WebArchiveSubframeFilter filterBlock)
    89     : m_filterBlock(Block_copy(filterBlock))
    90 {
    91 }
    92 
    93 WebFrameFilter::~WebFrameFilter()
    94 {
    95     Block_release(m_filterBlock);
    96 }
    97 
    98 bool WebFrameFilter::shouldIncludeSubframe(Frame* frame) const
    99 {
    100     if (!m_filterBlock)
    101         return true;
    102 
    103     return m_filterBlock(kit(frame));
    104 }
    105 
    10678@implementation DOMNode (WebDOMNodeOperations)
    10779
     
    11385- (WebArchive *)webArchiveByFilteringSubframes:(WebArchiveSubframeFilter)webArchiveSubframeFilter
    11486{
    115     WebFrameFilter filter(webArchiveSubframeFilter);
    116     return [[[WebArchive alloc] _initWithCoreLegacyWebArchive:LegacyWebArchive::create(core(self), &filter)] autorelease];
     87    WebArchive *webArchive = [[WebArchive alloc] _initWithCoreLegacyWebArchive:LegacyWebArchive::create(core(self), [webArchiveSubframeFilter](Frame& subframe) -> bool {
     88        return webArchiveSubframeFilter(kit(&subframe));
     89    })];
     90
     91    return [webArchive autorelease];
    11792}
    11893
  • trunk/Source/WebKit2/ChangeLog

    r159088 r159089  
     12013-11-11  Anders Carlsson  <andersca@apple.com>
     2
     3        FrameFilter can just be an std::function instead
     4        https://bugs.webkit.org/show_bug.cgi?id=124176
     5
     6        Reviewed by Tim Horton.
     7
     8        * WebProcess/WebPage/WebFrame.cpp:
     9        (WebKit::WebFrame::webArchiveData):
     10
    1112013-11-11  Anders Carlsson  <andersca@apple.com>
    212
  • trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp

    r157215 r159089  
    735735
    736736#if PLATFORM(MAC)
    737 
    738 class WebFrameFilter : public FrameFilter {
    739 public:
    740     WebFrameFilter(WebFrame*, WebFrame::FrameFilterFunction, void* context);
    741        
    742 private:
    743     virtual bool shouldIncludeSubframe(Frame*) const OVERRIDE;
    744 
    745     WebFrame* m_topLevelWebFrame;
    746     WebFrame::FrameFilterFunction m_callback;
    747     void* m_context;
    748 };
    749 
    750 WebFrameFilter::WebFrameFilter(WebFrame* topLevelWebFrame, WebFrame::FrameFilterFunction callback, void* context)
    751     : m_topLevelWebFrame(topLevelWebFrame)
    752     , m_callback(callback)
    753     , m_context(context)
    754 {
    755 }
    756 
    757 bool WebFrameFilter::shouldIncludeSubframe(Frame* frame) const
    758 {
    759     if (!m_callback)
    760         return true;
    761 
    762     WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader().client());
    763     WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
    764     ASSERT(webFrame);
    765 
    766     return m_callback(toAPI(m_topLevelWebFrame), toAPI(webFrame), m_context);
    767 }
    768 
    769737RetainPtr<CFDataRef> WebFrame::webArchiveData(FrameFilterFunction callback, void* context)
    770738{
    771     WebFrameFilter filter(this, callback, context);
    772 
    773     if (RefPtr<LegacyWebArchive> archive = LegacyWebArchive::create(coreFrame()->document(), &filter))
    774         return archive->rawDataRepresentation();
    775    
    776     return 0;
     739    RefPtr<LegacyWebArchive> archive = LegacyWebArchive::create(coreFrame()->document(), [this, callback, context](Frame& frame) -> bool {
     740        if (!callback)
     741            return true;
     742
     743        WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame.loader().client());
     744        WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0;
     745        ASSERT(webFrame);
     746
     747        return callback(toAPI(this), toAPI(webFrame), context);
     748    });
     749
     750    if (!archive)
     751        return nullptr;
     752
     753    return archive->rawDataRepresentation();
    777754}
    778755#endif
Note: See TracChangeset for help on using the changeset viewer.