/* * Copyright (C) 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef WebFrame_h #define WebFrame_h #include "APIObject.h" #include "ImmutableArray.h" #include "WKBase.h" #include "WebFrameLoaderClient.h" #include #include #include #include #include #include #include #include namespace WebCore { class Frame; class HTMLFrameOwnerElement; class IntPoint; class IntRect; class KURL; } namespace WebKit { class InjectedBundleHitTestResult; class InjectedBundleNodeHandle; class InjectedBundleRangeHandle; class InjectedBundleScriptWorld; class WebPage; class WebFrame : public TypedAPIObject { public: static PassRefPtr createMainFrame(WebPage*); static PassRefPtr createSubframe(WebPage*, const String& frameName, WebCore::HTMLFrameOwnerElement*); ~WebFrame(); // Called when the FrameLoaderClient (and therefore the WebCore::Frame) is being torn down. void invalidate(); WebPage* page() const; WebCore::Frame* coreFrame() const { return m_coreFrame; } uint64_t frameID() const { return m_frameID; } uint64_t setUpPolicyListener(WebCore::FramePolicyFunction); void invalidatePolicyListener(); void didReceivePolicyDecision(uint64_t listenerID, WebCore::PolicyAction, uint64_t downloadID); void startDownload(const WebCore::ResourceRequest&); void convertMainResourceLoadToDownload(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&); String source() const; String contentsAsString() const; String selectionAsString() const; WebCore::IntSize size() const; // WKBundleFrame API and SPI functions bool isMainFrame() const; String name() const; String url() const; String innerText() const; bool isFrameSet() const; WebFrame* parentFrame() const; PassRefPtr childFrames(); JSGlobalContextRef jsContext(); JSGlobalContextRef jsContextForWorld(InjectedBundleScriptWorld*); WebCore::IntRect contentBounds() const; WebCore::IntRect visibleContentBounds() const; WebCore::IntRect visibleContentBoundsExcludingScrollbars() const; WebCore::IntSize scrollOffset() const; bool hasHorizontalScrollbar() const; bool hasVerticalScrollbar() const; PassRefPtr hitTest(const WebCore::IntPoint) const; bool getDocumentBackgroundColor(double* red, double* green, double* blue, double* alpha); bool containsAnyFormElements() const; bool containsAnyFormControls() const; void stopLoading(); bool handlesPageScaleGesture() const; static WebFrame* frameForContext(JSContextRef); JSValueRef jsWrapperForWorld(InjectedBundleNodeHandle*, InjectedBundleScriptWorld*); JSValueRef jsWrapperForWorld(InjectedBundleRangeHandle*, InjectedBundleScriptWorld*); static String counterValue(JSObjectRef element); String layerTreeAsText() const; unsigned pendingUnloadCount() const; bool allowsFollowingLink(const WebCore::KURL&) const; String provisionalURL() const; String suggestedFilenameForResourceWithURL(const WebCore::KURL&) const; String mimeTypeForResourceWithURL(const WebCore::KURL&) const; void setTextDirection(const String&); // Simple listener class used by plug-ins to know when frames finish or fail loading. class LoadListener { public: virtual ~LoadListener() { } virtual void didFinishLoad(WebFrame*) = 0; virtual void didFailLoad(WebFrame*, bool wasCancelled) = 0; }; void setLoadListener(LoadListener* loadListener) { m_loadListener = loadListener; } LoadListener* loadListener() const { return m_loadListener; } #if PLATFORM(MAC) typedef bool (*FrameFilterFunction)(WKBundleFrameRef, WKBundleFrameRef subframe, void* context); RetainPtr webArchiveData(FrameFilterFunction, void* context); #endif private: static PassRefPtr create(); WebFrame(); void init(WebPage*, const String& frameName, WebCore::HTMLFrameOwnerElement*); WebCore::Frame* m_coreFrame; uint64_t m_policyListenerID; WebCore::FramePolicyFunction m_policyFunction; uint64_t m_policyDownloadID; WebFrameLoaderClient m_frameLoaderClient; LoadListener* m_loadListener; uint64_t m_frameID; }; } // namespace WebKit #endif // WebFrame_h