Changeset 106706 in webkit
- Timestamp:
- Feb 3, 2012, 4:22:32 PM (15 years ago)
- Location:
- trunk/Source
- Files:
-
- 10 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/WebCore.exp.in (modified) (1 diff)
-
WebCore/loader/archive/cf/LegacyWebArchive.cpp (modified) (5 diffs)
-
WebCore/loader/archive/cf/LegacyWebArchive.h (modified) (3 diffs)
-
WebKit2/ChangeLog (modified) (1 diff)
-
WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp (modified) (1 diff)
-
WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.h (modified) (1 diff)
-
WebKit2/WebProcess/WebPage/WebFrame.cpp (modified) (2 diffs)
-
WebKit2/WebProcess/WebPage/WebFrame.h (modified) (2 diffs)
-
WebKit2/WebProcess/WebPage/WebPage.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r106705 r106706 1 2012-02-03 Brady Eidson <beidson@apple.com> 2 3 <rdar://problem/10742441> and https://bugs.webkit.org/show_bug.cgi?id=77766 4 Need a WK2 API to filter which subframes go into WebArchives as they are created. 5 6 Reviewed by Darin Adler. 7 8 This adds a filter callback object that allows clients to get called back for each 9 subframe that might be added to a WebArchive. 10 11 API only, No new layout tests. 12 13 * WebCore.exp.in: 14 * loader/archive/cf/LegacyWebArchive.cpp: 15 (WebCore::LegacyWebArchive::create): 16 (WebCore::LegacyWebArchive::createFromSelection): 17 * loader/archive/cf/LegacyWebArchive.h: 18 (FrameFilter): 19 (WebCore:: FrameFilter::~ FrameFilter): 20 (LegacyWebArchive): 21 1 22 2012-02-03 Joshua Bell <jsbell@chromium.org> 2 23 -
trunk/Source/WebCore/WebCore.exp.in
r106681 r106706 495 495 __ZN7WebCore16LegacyWebArchive6createEN3WTF10PassRefPtrINS_15ArchiveResourceEEERNS1_6VectorIS4_Lm0EEERNS5_INS2_IS0_EELm0EEE 496 496 __ZN7WebCore16LegacyWebArchive6createEPNS_12SharedBufferE 497 __ZN7WebCore16LegacyWebArchive6createEPNS_4NodeE 497 __ZN7WebCore16LegacyWebArchive6createEPNS_4NodeEPNS_11FrameFilterE 498 498 __ZN7WebCore16LegacyWebArchive6createEPNS_5FrameE 499 499 __ZN7WebCore16LegacyWebArchive6createEPNS_5RangeE -
trunk/Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp
r102080 r106706 429 429 #endif 430 430 431 PassRefPtr<LegacyWebArchive> LegacyWebArchive::create(Node* node )431 PassRefPtr<LegacyWebArchive> LegacyWebArchive::create(Node* node, FrameFilter* filter) 432 432 { 433 433 ASSERT(node); … … 446 446 markupString = frame->documentTypeString() + markupString; 447 447 448 return create(markupString, frame, nodeList );448 return create(markupString, frame, nodeList, filter); 449 449 } 450 450 … … 495 495 String markupString = frame->documentTypeString() + createMarkup(range, &nodeList, AnnotateForInterchange); 496 496 497 return create(markupString, frame, nodeList );498 } 499 500 PassRefPtr<LegacyWebArchive> LegacyWebArchive::create(const String& markupString, Frame* frame, const Vector<Node*>& nodes )497 return create(markupString, frame, nodeList, 0); 498 } 499 500 PassRefPtr<LegacyWebArchive> LegacyWebArchive::create(const String& markupString, Frame* frame, const Vector<Node*>& nodes, FrameFilter* frameFilter) 501 501 { 502 502 ASSERT(frame); … … 522 522 if ((node->hasTagName(HTMLNames::frameTag) || node->hasTagName(HTMLNames::iframeTag) || node->hasTagName(HTMLNames::objectTag)) && 523 523 (childFrame = static_cast<HTMLFrameOwnerElement*>(node)->contentFrame())) { 524 RefPtr<LegacyWebArchive> subframeArchive = create(childFrame->document()); 524 if (frameFilter && !frameFilter->shouldIncludeSubframe(childFrame)) 525 continue; 526 527 RefPtr<LegacyWebArchive> subframeArchive = create(childFrame->document(), frameFilter); 525 528 526 529 if (subframeArchive) … … 585 588 String markupString = frame->documentTypeString() + createMarkup(selectionRange.get(), &nodeList, AnnotateForInterchange); 586 589 587 RefPtr<LegacyWebArchive> archive = create(markupString, frame, nodeList );590 RefPtr<LegacyWebArchive> archive = create(markupString, frame, nodeList, 0); 588 591 589 592 if (!frame->document() || !frame->document()->isFrameSet()) -
trunk/Source/WebCore/loader/archive/cf/LegacyWebArchive.h
r95901 r106706 38 38 class Range; 39 39 40 class FrameFilter { 41 public: 42 virtual ~FrameFilter() { } 43 virtual bool shouldIncludeSubframe(Frame*) const = 0; 44 }; 45 40 46 class LegacyWebArchive : public Archive { 41 47 public: … … 44 50 static PassRefPtr<LegacyWebArchive> create(const KURL&, SharedBuffer*); 45 51 static PassRefPtr<LegacyWebArchive> create(PassRefPtr<ArchiveResource> mainResource, Vector<PassRefPtr<ArchiveResource> >& subresources, Vector<PassRefPtr<LegacyWebArchive> >& subframeArchives); 46 static PassRefPtr<LegacyWebArchive> create(Node* );52 static PassRefPtr<LegacyWebArchive> create(Node*, FrameFilter* = 0); 47 53 static PassRefPtr<LegacyWebArchive> create(Frame*); 48 54 static PassRefPtr<LegacyWebArchive> createFromSelection(Frame*); … … 58 64 enum MainResourceStatus { Subresource, MainResource }; 59 65 60 static PassRefPtr<LegacyWebArchive> create(const String& markupString, Frame*, const Vector<Node*>& nodes );66 static PassRefPtr<LegacyWebArchive> create(const String& markupString, Frame*, const Vector<Node*>& nodes, FrameFilter*); 61 67 static PassRefPtr<ArchiveResource> createResource(CFDictionaryRef); 62 68 static ResourceResponse createResourceResponseFromMacArchivedData(CFDataRef); -
trunk/Source/WebKit2/ChangeLog
r106701 r106706 1 2012-02-03 Brady Eidson <beidson@apple.com> 2 3 <rdar://problem/10742441> and https://bugs.webkit.org/show_bug.cgi?id=77766 4 Need a WK2 API to filter which subframes go into WebArchives as they are created. 5 6 Reviewed by Darin Adler. 7 8 Add a new WKBundleFrame API that takes a filter callback object to allow or reject 9 subframes from a WebArchive: 10 * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp: 11 (WKBundleFrameCopyWebArchive): 12 (WKBundleFrameCopyWebArchiveFilteringSubframes): 13 * WebProcess/InjectedBundle/API/c/WKBundleFrame.h: 14 15 Implement the above API by calling through to WebCore: 16 * WebProcess/WebPage/WebFrame.cpp: 17 (WebFrameFilter): 18 (WebKit::WebFrameFilter::WebFrameFilter): 19 (WebKit::WebFrameFilter::shouldIncludeSubframe): 20 (WebKit::WebFrame::webArchiveData): 21 * WebProcess/WebPage/WebFrame.h: 22 (WebFrame): 23 24 * WebProcess/WebPage/WebPage.cpp: 25 (WebKit::WebPage::getWebArchiveOfFrame): 26 1 27 2012-02-03 Alexey Proskuryakov <ap@apple.com> 2 28 -
trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp
r106139 r106706 250 250 WKDataRef WKBundleFrameCopyWebArchive(WKBundleFrameRef frameRef) 251 251 { 252 return WKBundleFrameCopyWebArchiveFilteringSubframes(frameRef, 0, 0); 253 } 254 255 WKDataRef WKBundleFrameCopyWebArchiveFilteringSubframes(WKBundleFrameRef frameRef, WKBundleFrameFrameFilterCallback frameFilterCallback, void* context) 256 { 252 257 #if PLATFORM(MAC) || PLATFORM(WIN) 253 RetainPtr<CFDataRef> data = toImpl(frameRef)->webArchiveData( );258 RetainPtr<CFDataRef> data = toImpl(frameRef)->webArchiveData(frameFilterCallback, context); 254 259 if (data) 255 260 return WKDataCreate(CFDataGetBytePtr(data.get()), CFDataGetLength(data.get())); -
trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.h
r106139 r106706 72 72 WK_EXPORT WKStringRef WKBundleFrameCopySuggestedFilenameForResourceWithURL(WKBundleFrameRef frame, WKURLRef url); 73 73 WK_EXPORT WKStringRef WKBundleFrameCopyMIMETypeForResourceWithURL(WKBundleFrameRef frame, WKURLRef url); 74 74 75 75 WK_EXPORT WKDataRef WKBundleFrameCopyWebArchive(WKBundleFrameRef frame); 76 77 typedef bool (*WKBundleFrameFrameFilterCallback)(WKBundleFrameRef frame, WKBundleFrameRef subframe, void* context); 78 WK_EXPORT WKDataRef WKBundleFrameCopyWebArchiveFilteringSubframes(WKBundleFrameRef frame, WKBundleFrameFrameFilterCallback frameFilterCallback, void* context); 76 79 77 80 #ifdef __cplusplus -
trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp
r106139 r106706 31 31 #include "InjectedBundleRangeHandle.h" 32 32 #include "InjectedBundleScriptWorld.h" 33 #include "WKAPICast.h" 34 #include "WKBundleAPICast.h" 33 35 #include "WebChromeClient.h" 34 36 #include "WebPage.h" … … 735 737 736 738 #if PLATFORM(MAC) || PLATFORM(WIN) 737 RetainPtr<CFDataRef> WebFrame::webArchiveData() const 738 { 739 if (RefPtr<LegacyWebArchive> archive = LegacyWebArchive::create(coreFrame()->document())) 739 740 class WebFrameFilter : public FrameFilter { 741 public: 742 WebFrameFilter(WebFrame*, WebFrame::FrameFilterFunction, void* context); 743 744 private: 745 virtual bool shouldIncludeSubframe(Frame*) const OVERRIDE; 746 747 WebFrame* m_topLevelWebFrame; 748 WebFrame::FrameFilterFunction m_callback; 749 void* m_context; 750 }; 751 752 WebFrameFilter::WebFrameFilter(WebFrame* topLevelWebFrame, WebFrame::FrameFilterFunction callback, void* context) 753 : m_topLevelWebFrame(topLevelWebFrame) 754 , m_callback(callback) 755 , m_context(context) 756 { 757 } 758 759 bool WebFrameFilter::shouldIncludeSubframe(Frame* frame) const 760 { 761 if (!m_callback) 762 return true; 763 764 WebFrame* webFrame = static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame(); 765 return m_callback(toAPI(m_topLevelWebFrame), toAPI(webFrame), m_context); 766 } 767 768 RetainPtr<CFDataRef> WebFrame::webArchiveData(FrameFilterFunction callback, void* context) 769 { 770 WebFrameFilter filter(this, callback, context); 771 772 if (RefPtr<LegacyWebArchive> archive = LegacyWebArchive::create(coreFrame()->document(), &filter)) 740 773 return archive->rawDataRepresentation(); 741 774 -
trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.h
r106139 r106706 29 29 #include "APIObject.h" 30 30 #include "ImmutableArray.h" 31 #include "WKBase.h" 31 32 #include "WebFrameLoaderClient.h" 32 33 #include <JavaScriptCore/JSBase.h> … … 138 139 139 140 #if PLATFORM(MAC) || PLATFORM(WIN) 140 RetainPtr<CFDataRef> webArchiveData() const; 141 typedef bool (*FrameFilterFunction)(WKBundleFrameRef, WKBundleFrameRef subframe, void* context); 142 RetainPtr<CFDataRef> webArchiveData(FrameFilterFunction, void* context); 141 143 #endif 142 144 -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r106511 r106706 1798 1798 RetainPtr<CFDataRef> data; 1799 1799 if (WebFrame* frame = WebProcess::shared().webFrame(frameID)) { 1800 if ((data = frame->webArchiveData( )))1800 if ((data = frame->webArchiveData(0, 0))) 1801 1801 dataReference = CoreIPC::DataReference(CFDataGetBytePtr(data.get()), CFDataGetLength(data.get())); 1802 1802 }
Note:
See TracChangeset
for help on using the changeset viewer.