1/*
2 * Copyright (C) 2010 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef WebFrameProxy_h
27#define WebFrameProxy_h
28
29#include "APIObject.h"
30#include "ImmutableArray.h"
31#include "GenericCallback.h"
32#include "WebFrameListenerProxy.h"
33#include <WebCore/FrameLoaderTypes.h>
34#include <wtf/Forward.h>
35#include <wtf/PassRefPtr.h>
36#include <wtf/text/WTFString.h>
37
38namespace CoreIPC {
39    class ArgumentDecoder;
40    class Connection;
41    class MessageID;
42}
43
44namespace WebKit {
45
46class ImmutableArray;
47class PlatformCertificateInfo;
48class WebCertificateInfo;
49class WebFormSubmissionListenerProxy;
50class WebFramePolicyListenerProxy;
51class WebPageProxy;
52
53typedef GenericCallback<WKDataRef> DataCallback;
54
55class WebFrameProxy : public APIObject {
56public:
57    static const Type APIType = TypeFrame;
58
59    static PassRefPtr<WebFrameProxy> create(WebPageProxy* page, uint64_t frameID)
60    {
61        return adoptRef(new WebFrameProxy(page, frameID));
62    }
63
64    virtual ~WebFrameProxy();
65
66    enum LoadState {
67        LoadStateProvisional,
68        LoadStateCommitted,
69        LoadStateFinished
70    };
71
72    uint64_t frameID() const { return m_frameID; }
73    WebPageProxy* page() { return m_page; }
74
75    WebFrameProxy* parentFrame() { return m_parentFrame; }
76    WebFrameProxy* nextSibling() { return m_nextSibling; }
77    WebFrameProxy* previousSibling() { return m_previousSibling; }
78    WebFrameProxy* firstChild() { return m_firstChild; }
79    WebFrameProxy* lastChild() { return m_lastChild; }
80
81    void disconnect();
82
83    bool isMainFrame() const;
84
85    void setIsFrameSet(bool value) { m_isFrameSet = value; }
86    bool isFrameSet() const { return m_isFrameSet; }
87
88    LoadState loadState() const { return m_loadState; }
89
90    void stopLoading() const;
91
92    const String& url() const { return m_url; }
93    const String& provisionalURL() const { return m_provisionalURL; }
94
95    void setUnreachableURL(const String& unreachableURL) { m_unreachableURL = unreachableURL; }
96    const String& unreachableURL() const { return m_unreachableURL; }
97
98    const String& mimeType() const { return m_MIMEType; }
99
100    const String& title() const { return m_title; }
101
102    WebCertificateInfo* certificateInfo() const { return m_certificateInfo.get(); }
103
104    bool canProvideSource() const;
105    bool canShowMIMEType(const String& mimeType) const;
106
107    bool isDisplayingStandaloneImageDocument() const;
108    bool isDisplayingMarkupDocument() const;
109
110    void getWebArchive(PassRefPtr<DataCallback>);
111    void getMainResourceData(PassRefPtr<DataCallback>);
112    void getResourceData(WebURL*, PassRefPtr<DataCallback>);
113
114    void didStartProvisionalLoad(const String& url);
115    void didReceiveServerRedirectForProvisionalLoad(const String& url);
116    void didFailProvisionalLoad();
117    void didCommitLoad(const String& contentType, const PlatformCertificateInfo&);
118    void didFinishLoad();
119    void didFailLoad();
120    void didSameDocumentNavigation(const String&); // eg. anchor navigation, session state change.
121    void didChangeTitle(const String&);
122
123    // Frame tree operations.
124    void appendChild(WebFrameProxy*);
125    void removeChild(WebFrameProxy*);
126    void didRemoveFromHierarchy();
127    PassRefPtr<ImmutableArray> childFrames();
128    bool isDescendantOf(const WebFrameProxy* ancestor) const;
129    void dumpFrameTreeToSTDOUT(unsigned indent = 0);
130
131    // Policy operations.
132    void receivedPolicyDecision(WebCore::PolicyAction, uint64_t listenerID);
133    WebFramePolicyListenerProxy* setUpPolicyListenerProxy(uint64_t listenerID);
134    WebFormSubmissionListenerProxy* setUpFormSubmissionListenerProxy(uint64_t listenerID);
135
136private:
137    WebFrameProxy(WebPageProxy* page, uint64_t frameID);
138
139    virtual Type type() const { return APIType; }
140
141    WebPageProxy* m_page;
142    WebFrameProxy* m_parentFrame;
143    WebFrameProxy* m_nextSibling;
144    WebFrameProxy* m_previousSibling;
145    WebFrameProxy* m_firstChild;
146    WebFrameProxy* m_lastChild;
147
148    LoadState m_loadState;
149    String m_url;
150    String m_provisionalURL;
151    String m_unreachableURL;
152    String m_MIMEType;
153    String m_title;
154    bool m_isFrameSet;
155    RefPtr<WebCertificateInfo> m_certificateInfo;
156    RefPtr<WebFrameListenerProxy> m_activeListener;
157    uint64_t m_frameID;
158};
159
160} // namespace WebKit
161
162#endif // WebFrameProxy_h
163