18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
22bde8e466a4451c7319e3a072d118917957d6554Steve Block * Copyright (C) 2006, 2007, 2008, 2009, 2011 Apple Inc. All rights reserved.
30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
4cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block * Copyright (C) Research In Motion Limited 2009. All rights reserved.
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1.  Redistributions of source code must retain the above copyright
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     notice, this list of conditions and the following disclaimer.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2.  Redistributions in binary form must reproduce the above copyright
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     notice, this list of conditions and the following disclaimer in the
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     documentation and/or other materials provided with the distribution.
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     its contributors may be used to endorse or promote products derived
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     from this software without specific prior written permission.
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef FrameLoader_h
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define FrameLoader_h
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachePolicy.h"
3506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "FrameLoaderStateMachine.h"
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameLoaderTypes.h"
37cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include "HistoryController.h"
382bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "IconDatabaseBase.h"
39231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "PolicyChecker.h"
40cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#include "ResourceLoadNotifier.h"
412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "ScriptValue.h"
4206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "SubframeLoader.h"
435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "ThreadableLoader.h"
44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Timer.h"
45231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/Forward.h>
4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/HashSet.h>
47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
50cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass Archive;
51cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass AuthenticationChallenge;
52cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass CachedFrameBase;
53cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass CachedPage;
54cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass CachedResource;
55cad810f21b803229eb11403f9209855525a25d57Steve Blockclass Chrome;
56643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass DOMWrapperWorld;
57cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass Document;
58cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass DocumentLoader;
59cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass Event;
60cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass FormData;
61cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass FormState;
6206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenclass FormSubmission;
63cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass Frame;
64cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass FrameLoaderClient;
655abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickclass FrameNetworkingContext;
66cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass HistoryItem;
67cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass HTMLFormElement;
68cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass IconLoader;
69cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass NavigationAction;
705abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickclass NetworkingContext;
71e14391e94c850b8bd03680c23b38978db68687a8John Reckclass Page;
7221939df44de1705786c545cd1bf519d47250322dBen Murdochclass ProtectionSpace;
73cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass ResourceError;
74cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass ResourceLoader;
7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass ResourceRequest;
76cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass ResourceResponse;
77cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass ScriptSourceCode;
78cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass ScriptValue;
79cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass SecurityOrigin;
80643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass SerializedScriptValue;
81cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass SharedBuffer;
822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass StringWithDirection;
83cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass SubstituteData;
84cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass TextResourceDecoder;
85cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
86cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockstruct FrameLoadRequest;
87cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockstruct WindowFeatures;
88cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
89cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockbool isBackForwardLoadType(FrameLoadType);
90cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
91ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass FrameLoader {
92ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    WTF_MAKE_NONCOPYABLE(FrameLoader);
93cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockpublic:
94cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    FrameLoader(Frame*, FrameLoaderClient*);
95cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    ~FrameLoader();
96cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
97cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void init();
98cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
99cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    Frame* frame() const { return m_frame; }
100cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
101cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    PolicyChecker* policyChecker() const { return &m_policyChecker; }
102cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    HistoryController* history() const { return &m_history; }
103cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    ResourceLoadNotifier* notifier() const { return &m_notifer; }
10406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    SubframeLoader* subframeLoader() const { return &m_subframeLoader; }
105cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
106cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // FIXME: This is not cool, people. There are too many different functions that all start loads.
107cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // We should aim to consolidate these into a smaller set of functions, and try to reuse more of
108cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // the logic by extracting common code paths.
109cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
110cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void prepareForLoadStart();
111cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void setupForReplace();
112cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void setupForReplaceByMIMEType(const String& newMIMEType);
113cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
114cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void loadURLIntoChildFrame(const KURL&, const String& referer, Frame*);
115cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
116cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void loadFrameRequest(const FrameLoadRequest&, bool lockHistory, bool lockBackForwardList,  // Called by submitForm, calls loadPostRequest and loadURL.
117cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        PassRefPtr<Event>, PassRefPtr<FormState>, ReferrerPolicy);
118cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
119cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void load(const ResourceRequest&, bool lockHistory);                                        // Called by WebFrame, calls load(ResourceRequest, SubstituteData).
120cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void load(const ResourceRequest&, const SubstituteData&, bool lockHistory);                 // Called both by WebFrame and internally, calls load(DocumentLoader*).
121cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void load(const ResourceRequest&, const String& frameName, bool lockHistory);               // Called by WebPluginController.
1222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
1232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(WEB_ARCHIVE)
124cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void loadArchive(PassRefPtr<Archive>);
1253f60c26c3fa9dc89d57ef4db083a4f13ef86c103Steve Block#endif
126cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
127cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    static void reportLocalLoadFailed(Frame*, const String& url);
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
129cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    unsigned long loadResourceSynchronously(const ResourceRequest&, StoredCredentials, ResourceError&, ResourceResponse&, Vector<char>& data);
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
131cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool canHandleRequest(const ResourceRequest&);
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
133cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // Also not cool.
13481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void stopAllLoaders(ClearProvisionalItemPolicy = ShouldClearProvisionalItem);
135cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void stopForUserCancel(bool deferCheckLoadComplete = false);
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
137cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool isLoadingMainResource() const { return m_isLoadingMainResource; }
138cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool isLoading() const;
139cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool frameHasLoaded() const;
140e14391e94c850b8bd03680c23b38978db68687a8John Reck    void transferLoadingResourcesFromPage(Page*);
1416b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    void dispatchTransferLoadingResourceFromPage(unsigned long, DocumentLoader*, const ResourceRequest&, Page*);
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
143cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    int numPendingOrLoadingRequests(bool recurse) const;
144cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    String referrer() const;
145cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    String outgoingReferrer() const;
146cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    String outgoingOrigin() const;
147231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
148cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    DocumentLoader* activeDocumentLoader() const;
149cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    DocumentLoader* documentLoader() const { return m_documentLoader.get(); }
150cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    DocumentLoader* policyDocumentLoader() const { return m_policyDocumentLoader.get(); }
151cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    DocumentLoader* provisionalDocumentLoader() const { return m_provisionalDocumentLoader.get(); }
152cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    FrameState state() const { return m_state; }
153cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    static double timeOfLastCompletedLoad();
1545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
155cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool shouldUseCredentialStorage(ResourceLoader*);
15621939df44de1705786c545cd1bf519d47250322dBen Murdoch#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
15721939df44de1705786c545cd1bf519d47250322dBen Murdoch    bool canAuthenticateAgainstProtectionSpace(ResourceLoader* loader, const ProtectionSpace& protectionSpace);
15821939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif
159cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    const ResourceRequest& originalRequest() const;
160cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    const ResourceRequest& initialRequest() const;
161cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void receivedMainResourceError(const ResourceError&, bool isComplete);
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
163cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool willLoadMediaElementURL(KURL&);
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
165cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void handleFallbackContent();
166cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool isStopping() const;
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
168cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void finishedLoading();
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
170cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    ResourceError cancelledError(const ResourceRequest&) const;
171cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    ResourceError fileDoesNotExistError(const ResourceResponse&) const;
172cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    ResourceError blockedError(const ResourceRequest&) const;
173cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    ResourceError cannotShowURLError(const ResourceRequest&) const;
1746b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    ResourceError interruptionForPolicyChangeError(const ResourceRequest&) const;
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
176cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool isHostedByObjectElement() const;
177cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool isLoadingMainFrame() const;
178cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool canShowMIMEType(const String& MIMEType) const;
179cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool representationExistsForURLScheme(const String& URLScheme);
180cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    String generatedMIMETypeForURLScheme(const String& URLScheme);
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
182cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void reload(bool endToEndReload = false);
183cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void reloadWithOverrideEncoding(const String& overrideEncoding);
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
185cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void didReceiveServerRedirectForProvisionalLoadForFrame();
186cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void finishedLoadingDocument(DocumentLoader*);
187cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool isReplacing() const;
188cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void setReplacing();
189cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void revertToProvisional(DocumentLoader*);
190cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void setMainDocumentError(DocumentLoader*, const ResourceError&);
191cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void mainReceivedCompleteError(DocumentLoader*, const ResourceError&);
192cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool subframeIsLoading() const;
193cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void willChangeTitle(DocumentLoader*);
194cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void didChangeTitle(DocumentLoader*);
19521939df44de1705786c545cd1bf519d47250322dBen Murdoch    void didChangeIcons(DocumentLoader*);
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
197cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    FrameLoadType loadType() const;
198e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
199cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    CachePolicy subresourceCachePolicy() const;
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
201cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void didFirstLayout();
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
203cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void didFirstVisuallyNonEmptyLayout();
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
205cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void loadedResourceFromMemoryCache(const CachedResource*);
206cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void tellClientAboutPastMemoryCacheLoads();
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
208cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void checkLoadComplete();
209cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void detachFromParent();
210cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void detachViewsAndDocumentLoader();
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
212cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void addExtraFieldsToSubresourceRequest(ResourceRequest&);
213cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void addExtraFieldsToMainResourceRequest(ResourceRequest&);
214cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
215cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    static void addHTTPOriginIfNeeded(ResourceRequest&, String origin);
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
217cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    FrameLoaderClient* client() const { return m_client; }
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
219cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void setDefersLoading(bool);
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
221f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void changeLocation(PassRefPtr<SecurityOrigin>, const KURL&, const String& referrer, bool lockHistory = true, bool lockBackForwardList = true, bool refresh = false);
222a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    void urlSelected(const KURL&, const String& target, PassRefPtr<Event>, bool lockHistory, bool lockBackForwardList, ReferrerPolicy);
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
22406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    void submitForm(PassRefPtr<FormSubmission>);
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
226cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void stop();
22781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void stopLoading(UnloadEventPolicy);
228cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool closeURL();
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
230cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void didExplicitOpen();
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
232dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Callbacks from DocumentWriter
233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void didBeginDocument(bool dispatchWindowObjectAvailable);
234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void didEndDocument();
235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void willSetEncoding();
236dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
237cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    KURL iconURL();
238cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void commitIconURLToIconDatabase(const KURL&);
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
240cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    KURL baseURL() const;
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
242cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void handledOnloadEvents();
243cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    String userAgent(const KURL&) const;
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
245643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*);
246643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void dispatchDidClearWindowObjectsInAllWorlds();
247cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void dispatchDocumentElementAvailable();
248231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
249643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void ownerElementSandboxFlagsChanged() { updateSandboxFlags(); }
250d0825bca7fe65beaee391d30da42e937db621564Steve Block
251643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool isSandboxed(SandboxFlags mask) const { return m_sandboxFlags & mask; }
252643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    SandboxFlags sandboxFlags() const { return m_sandboxFlags; }
253dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // The following sandbox flags will be forced, regardless of changes to
254dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // the sandbox attribute of any parent frames.
255dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void setForcedSandboxFlags(SandboxFlags flags) { m_forcedSandboxFlags = flags; m_sandboxFlags |= flags; }
256643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
257cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // Mixed content related functions.
258cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    static bool isMixedContent(SecurityOrigin* context, const KURL&);
259cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void checkIfDisplayInsecureContent(SecurityOrigin* context, const KURL&);
260cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void checkIfRunInsecureContent(SecurityOrigin* context, const KURL&);
2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
262cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    Frame* opener();
263cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void setOpener(Frame*);
2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
265cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool isProcessingUserGesture();
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
267cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void resetMultipleFormSubmissionProtection();
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
269cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void checkCallImplicitClose();
2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
271cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void frameDetached();
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    void setOutgoingReferrer(const KURL&);
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
275cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void loadDone();
276cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void finishedParsing();
277cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void checkCompleted();
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
279cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void checkDidPerformFirstNavigation();
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
281cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool isComplete() const;
2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
283cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    KURL completeURL(const String& url);
2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
285cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void cancelAndClear();
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void setTitle(const StringWithDirection&);
28821939df44de1705786c545cd1bf519d47250322dBen Murdoch    void setIconURL(const String&);
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
290545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    void commitProvisionalLoad();
291cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool isLoadingFromCachedPage() const { return m_loadingFromCachedPage; }
2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
29306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    FrameLoaderStateMachine* stateMachine() const { return &m_stateMachine; }
2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2952bde8e466a4451c7319e3a072d118917957d6554Steve Block    void startIconLoader();
2962bde8e466a4451c7319e3a072d118917957d6554Steve Block    void iconLoadDecisionReceived(IconLoadDecision);
2972bde8e466a4451c7319e3a072d118917957d6554Steve Block    void continueIconLoadWithDecision(IconLoadDecision);
2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
299cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool shouldAllowNavigation(Frame* targetFrame) const;
300cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    Frame* findFrameForNavigation(const AtomicString& name);
3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
302cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void applyUserAgent(ResourceRequest& request);
3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
304cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool shouldInterruptLoadForXFrameOptions(const String&, const KURL&);
3055f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
306cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void open(CachedFrameBase&);
307231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
308ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
309ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    void hideMediaPlayerProxyPlugin(Widget*);
310ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    void showMediaPlayerProxyPlugin(Widget*);
311ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#endif
312ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
313cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // FIXME: Should these really be public?
314cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void completed();
315cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool allAncestorsAreComplete() const; // including this
316cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool allChildrenAreComplete() const; // immediate children, not all descendants
317cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void clientRedirected(const KURL&, double delay, double fireDate, bool lockBackForwardList);
318cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void clientRedirectCancelledOrFinished(bool cancelWithLoadInProgress);
319cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void loadItem(HistoryItem*, FrameLoadType);
320231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
321cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // FIXME: This is public because this asynchronous callback from the FrameLoaderClient
322cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // uses the policy machinery (and therefore is called via the PolicyChecker).  Once we
323cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // introduce a proper callback type for this function, we should make it private again.
324cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void continueLoadAfterWillSubmitForm();
325cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
326cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool suppressOpenerInNewFrame() const { return m_suppressOpenerInNewFrame; }
327231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
3282bde8e466a4451c7319e3a072d118917957d6554Steve Block    static ObjectContentType defaultObjectContentType(const KURL&, const String& mimeType, bool shouldPreferPlugInsForImages);
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
330dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void clear(bool clearWindowProperties = true, bool clearScriptObjects = true, bool clearFrameView = true);
331545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
332545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    bool quickRedirectComing() const { return m_quickRedirectComing; }
333545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
3346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    bool shouldClose();
33506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
33606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    void started();
3376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
338e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    bool pageDismissalEventBeingDispatched() const { return m_pageDismissalEventBeingDispatched; }
339e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
34068513a70bcd92384395513322f1b801e7bf9c729Steve Block    NetworkingContext* networkingContext() const;
3415abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
342cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockprivate:
343cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void checkTimerFired(Timer<FrameLoader>*);
344cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
345f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void loadSameDocumentItem(HistoryItem*);
346f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void loadDifferentDocumentItem(HistoryItem*, FrameLoadType);
347643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
348545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    void loadProvisionalItemFromCachedPage();
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
350cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void receivedFirstData();
3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
352cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void updateFirstPartyForCookies();
353cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void setFirstPartyForCookies(const KURL&);
354cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
355cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void addExtraFieldsToRequest(ResourceRequest&, FrameLoadType loadType, bool isMainResource, bool cookiePolicyURLFromRequest);
3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
357cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // Also not cool.
35881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void stopLoadingSubframes(ClearProvisionalItemPolicy);
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
360cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void clearProvisionalLoad();
361cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void markLoadComplete();
362cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void transitionToCommitted(PassRefPtr<CachedPage>);
363cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void frameLoadCompleted();
3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
365cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void mainReceivedError(const ResourceError&, bool isComplete);
366231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
367cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    static void callContinueLoadAfterNavigationPolicy(void*, const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue);
368e14391e94c850b8bd03680c23b38978db68687a8John Reck    static void callContinueLoadAfterNewWindowPolicy(void*, const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, const NavigationAction&, bool shouldContinue);
369cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    static void callContinueFragmentScrollAfterNavigationPolicy(void*, const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue);
370cad810f21b803229eb11403f9209855525a25d57Steve Block
371cad810f21b803229eb11403f9209855525a25d57Steve Block    bool fireBeforeUnloadEvent(Chrome*);
3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
373cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void continueLoadAfterNavigationPolicy(const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue);
374e14391e94c850b8bd03680c23b38978db68687a8John Reck    void continueLoadAfterNewWindowPolicy(const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, const NavigationAction&, bool shouldContinue);
375cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void continueFragmentScrollAfterNavigationPolicy(const ResourceRequest&, bool shouldContinue);
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
377cad810f21b803229eb11403f9209855525a25d57Steve Block    bool shouldScrollToAnchor(bool isFormSubmission, const String& httpMethod, FrameLoadType, const KURL&);
3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
379cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void checkLoadCompleteForThisFrame();
3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
381cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void setDocumentLoader(DocumentLoader*);
382cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void setPolicyDocumentLoader(DocumentLoader*);
383cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void setProvisionalDocumentLoader(DocumentLoader*);
3848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
385cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void setState(FrameState);
3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
387cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void closeOldDataSources();
388545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    void prepareForCachedPageRestore();
3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
390cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool shouldReloadToHandleUnreachableURL(DocumentLoader*);
3915f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
392cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void dispatchDidCommitLoad();
3935f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
394f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    void urlSelected(const FrameLoadRequest&, PassRefPtr<Event>, bool lockHistory, bool lockBackForwardList, ReferrerPolicy, ShouldReplaceDocumentIfJavaScriptURL);
3956c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
396cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void loadWithDocumentLoader(DocumentLoader*, FrameLoadType, PassRefPtr<FormState>); // Calls continueLoadAfterNavigationPolicy
397cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void load(DocumentLoader*);                                                         // Calls loadWithDocumentLoader
3985f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
399cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void loadWithNavigationAction(const ResourceRequest&, const NavigationAction&,      // Calls loadWithDocumentLoader
400cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        bool lockHistory, FrameLoadType, PassRefPtr<FormState>);
4015f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
402cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void loadPostRequest(const ResourceRequest&, const String& referrer,                // Called by loadFrameRequest, calls loadWithNavigationAction
403cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        const String& frameName, bool lockHistory, FrameLoadType, PassRefPtr<Event>, PassRefPtr<FormState>);
404cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void loadURL(const KURL&, const String& referrer, const String& frameName,          // Called by loadFrameRequest, calls loadWithNavigationAction or dispatches to navigation policy delegate
405cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        bool lockHistory, FrameLoadType, PassRefPtr<Event>, PassRefPtr<FormState>);
4065f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
407cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool shouldReload(const KURL& currentURL, const KURL& destinationURL);
4085f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
409cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void requestFromDelegate(ResourceRequest&, unsigned long& identifier, ResourceError&);
4105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
411cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void recursiveCheckLoadComplete();
4125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
413cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void detachChildren();
414cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void closeAndRemoveChild(Frame*);
4155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
416643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void loadInSameDocument(const KURL&, SerializedScriptValue* stateObject, bool isNewNavigation);
4175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
418cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void provisionalLoadStarted();
4195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
420cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool didOpenURL(const KURL&);
4215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
422cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void scheduleCheckCompleted();
423cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void scheduleCheckLoadComplete();
424cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void startCheckCompleteTimer();
4255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
426cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    KURL originalRequestURL() const;
4275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
428cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool shouldTreatURLAsSameAsCurrent(const KURL&) const;
4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
430643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void updateSandboxFlags();
4318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
432cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    Frame* m_frame;
433cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    FrameLoaderClient* m_client;
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
435cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    mutable PolicyChecker m_policyChecker;
436cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    mutable HistoryController m_history;
437cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    mutable ResourceLoadNotifier m_notifer;
43806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    mutable SubframeLoader m_subframeLoader;
43906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    mutable FrameLoaderStateMachine m_stateMachine;
440231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
441cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    FrameState m_state;
442cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    FrameLoadType m_loadType;
4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
444cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // Document loaders for the three phases of frame loading. Note that while
445cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // a new request is being loaded, the old document loader may still be referenced.
446cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // E.g. while a new request is in the "policy" state, the old document loader may
447cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // be consulted in particular as it makes sense to imply certain settings on the new loader.
448cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    RefPtr<DocumentLoader> m_documentLoader;
449cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    RefPtr<DocumentLoader> m_provisionalDocumentLoader;
450cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    RefPtr<DocumentLoader> m_policyDocumentLoader;
4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
452cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_delegateIsHandlingProvisionalLoadError;
4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
454cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_quickRedirectComing;
455cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_sentRedirectNotification;
456cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_inStopAllLoaders;
4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
458cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    String m_outgoingReferrer;
4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
460cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_isExecutingJavaScriptFormAction;
4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
462cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_didCallImplicitClose;
463cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_wasUnloadEventEmitted;
4646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    bool m_pageDismissalEventBeingDispatched;
465cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_isComplete;
466cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_isLoadingMainResource;
4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
468d0825bca7fe65beaee391d30da42e937db621564Steve Block    RefPtr<SerializedScriptValue> m_pendingStateObject;
469d0825bca7fe65beaee391d30da42e937db621564Steve Block
470cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    KURL m_workingURL;
4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
472cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    OwnPtr<IconLoader> m_iconLoader;
473cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_mayLoadIconLater;
4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
475cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_needsClear;
4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
477cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    KURL m_submittedFormURL;
478231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
479cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    Timer<FrameLoader> m_checkTimer;
480cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_shouldCallCheckCompleted;
481cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_shouldCallCheckLoadComplete;
4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
483cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    Frame* m_opener;
484cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    HashSet<Frame*> m_openedFrames;
4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
486cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_didPerformFirstNavigation;
487cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_loadingFromCachedPage;
488cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    bool m_suppressOpenerInNewFrame;
489cad810f21b803229eb11403f9209855525a25d57Steve Block
490643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    SandboxFlags m_sandboxFlags;
491dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    SandboxFlags m_forcedSandboxFlags;
492643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
4935abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    RefPtr<FrameNetworkingContext> m_networkingContext;
494cad810f21b803229eb11403f9209855525a25d57Steve Block
495cad810f21b803229eb11403f9209855525a25d57Steve Block    KURL m_previousUrl;
496cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block};
4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
498f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick// This function is called by createWindow() in JSDOMWindowBase.cpp, for example, for
499f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick// modal dialog creation.  The lookupFrame is for looking up the frame name in case
500f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick// the frame name references a frame different from the openerFrame, e.g. when it is
501f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick// "_self" or "_parent".
502f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick//
503f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick// FIXME: Consider making this function part of an appropriate class (not FrameLoader)
504f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick// and moving it to a more appropriate location.
505f486d19d62f1bc33246748b14b14a9dfa617b57fIain MerrickFrame* createWindow(Frame* openerFrame, Frame* lookupFrame, const FrameLoadRequest&, const WindowFeatures&, bool& created);
506f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
5078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} // namespace WebCore
5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif // FrameLoader_h
510