15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006, 2007, 2008, 2009, 2011 Apple Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) Research In Motion Limited 2009. All rights reserved.
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Google Inc. All rights reserved.
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1.  Redistributions of source code must retain the above copyright
1202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch *     notice, this list of conditions and the following disclaimer.
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2.  Redistributions in binary form must reproduce the above copyright
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer in the
1502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch *     documentation and/or other materials provided with the distribution.
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     its contributors may be used to endorse or promote products derived
1802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch *     from this software without specific prior written permission.
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef FrameLoader_h
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define FrameLoader_h
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/IconURL.h"
36bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "core/dom/SandboxFlags.h"
3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/SecurityContext.h"
38e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/fetch/ResourceLoaderOptions.h"
3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoaderStateMachine.h"
4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoaderTypes.h"
4109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/loader/HistoryItem.h"
4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/MixedContentChecker.h"
431e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/Timer.h"
447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "platform/heap/Handle.h"
4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/network/ResourceRequest.h"
46521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)#include "wtf/Forward.h"
47521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)#include "wtf/HashSet.h"
48521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)#include "wtf/OwnPtr.h"
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
50c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DocumentLoader;
538abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)class FetchContext;
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FormState;
559e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)class Frame;
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FrameLoaderClient;
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class NavigationAction;
5807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochclass ProgressTracker;
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ResourceError;
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SerializedScriptValue;
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SubstituteData;
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct FrameLoadRequest;
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isBackForwardLoadType(FrameLoadType);
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass FrameLoader FINAL {
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WTF_MAKE_NONCOPYABLE(FrameLoader);
697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    DISALLOW_ALLOCATION();
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
71197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    static ResourceRequest requestFromHistoryItem(HistoryItem*, ResourceRequestCachePolicy);
72197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
73d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    FrameLoader(LocalFrame*);
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ~FrameLoader();
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void init();
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
78d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    LocalFrame* frame() const { return m_frame; }
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    MixedContentChecker* mixedContentChecker() const { return &m_mixedContentChecker; }
8107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    ProgressTracker& progress() const { return *m_progressTracker; }
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
837757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    // These functions start a load. All eventually call into loadWithNavigationAction() or loadInSameDocument().
847757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    void load(const FrameLoadRequest&); // The entry point for non-reload, non-history loads.
85c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    void reload(ReloadPolicy = NormalReload, const KURL& overrideURL = KURL(), const AtomicString& overrideEncoding = nullAtom, ClientRedirectPolicy = NotClientRedirect);
8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void loadHistoryItem(HistoryItem*, HistoryLoadType = HistoryDifferentDocumentLoad, ResourceRequestCachePolicy = UseProtocolCachePolicy); // The entry point for all back/forward loads
87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
88d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    static void reportLocalLoadFailed(LocalFrame*, const String& url);
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // FIXME: These are all functions which stop loads. We have too many.
91d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // Warning: stopAllLoaders can and will detach the LocalFrame out from under you. All callers need to either protect the LocalFrame
92d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // or guarantee they won't in any way access the LocalFrame after stopAllLoaders returns.
93bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    void stopAllLoaders();
94e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    void stopLoading();
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool closeURL();
967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
97e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    // FIXME: clear() is trying to do too many things. We should break it down into smaller functions.
9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void clear();
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void replaceDocumentWhileExecutingJavaScriptURL(const String& source, Document* ownerDocument);
1017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
1028abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    // Sets a timer to notify the client that the initial empty document has
1038abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    // been accessed, and thus it is no longer safe to show a provisional URL
1048abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    // above the document without risking a URL spoof.
105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    void didAccessInitialDocument();
1068abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
1078abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    // If the initial empty document is showing and has been accessed, this
1088abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    // cancels the timer and immediately notifies the client in cases that
1098abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    // waiting to notify would allow a URL spoof.
1108abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    void notifyIfInitialDocumentAccessed();
111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DocumentLoader* documentLoader() const { return m_documentLoader.get(); }
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DocumentLoader* policyDocumentLoader() const { return m_policyDocumentLoader.get(); }
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DocumentLoader* provisionalDocumentLoader() const { return m_provisionalDocumentLoader.get(); }
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FrameState state() const { return m_state; }
1168abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    FetchContext& fetchContext() const { return *m_fetchContext; }
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void receivedMainResourceError(const ResourceError&);
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool isLoadingMainFrame() const;
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    bool shouldTreatURLAsSameAsCurrent(const KURL&) const;
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool shouldTreatURLAsSrcdocDocument(const KURL&) const;
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FrameLoadType loadType() const;
12653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    void setLoadType(FrameLoadType loadType) { m_loadType = loadType; }
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void checkLoadComplete();
12902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
130d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    FrameLoaderClient* client() const;
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setDefersLoading(bool);
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void didExplicitOpen();
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Callbacks from DocumentWriter
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void didBeginDocument(bool dispatchWindowObjectAvailable);
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void receivedFirstData();
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String userAgent(const KURL&) const;
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
143323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    void dispatchDidClearWindowObjectInMainWorld();
144323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    void dispatchDidClearDocumentOfWindowObject();
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void dispatchDocumentElementAvailable();
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // The following sandbox flags will be forced, regardless of changes to
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // the sandbox attribute of any parent frames.
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void forceSandboxFlags(SandboxFlags flags) { m_forcedSandboxFlags |= flags; }
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SandboxFlags effectiveSandboxFlags() const;
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1529e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    Frame* opener();
153d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setOpener(LocalFrame*);
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
155c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    void detachFromParent();
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void loadDone();
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void finishedParsing();
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void checkCompleted();
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void commitProvisionalLoad();
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FrameLoaderStateMachine* stateMachine() const { return &m_stateMachine; }
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
165d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    LocalFrame* findFrameForNavigation(const AtomicString& name, Document* activeDocument);
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void applyUserAgent(ResourceRequest&);
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool shouldInterruptLoadForXFrameOptions(const String&, const KURL&, unsigned long requestIdentifier);
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool allAncestorsAreComplete() const; // including this
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool shouldClose();
17402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
175fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    bool allowPlugins(ReasonForCallingAllowPlugins);
176fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch
177d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void updateForSameDocumentNavigation(const KURL&, SameDocumentNavigationSource, PassRefPtr<SerializedScriptValue>, FrameLoadType);
1783c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch
17951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    HistoryItem* currentItem() const { return m_currentItem.get(); }
180d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void saveScrollState();
18151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    void clearScrollPositionAndViewState();
18251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)
183d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void restoreScrollPositionAndViewState();
184a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
1857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void trace(Visitor*);
1867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool allChildrenAreComplete() const; // immediate children, not all descendants
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
190e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    void completed();
191e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void checkTimerFired(Timer<FrameLoader>*);
1938abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    void didAccessInitialDocumentTimerFired(Timer<FrameLoader>*);
19402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
1957757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    bool prepareRequestForThisFrame(FrameLoadRequest&);
19609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setReferrerForFrameRequest(ResourceRequest&, ShouldSendReferrer, Document*);
1977757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    FrameLoadType determineFrameLoadType(const FrameLoadRequest&);
198c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    bool isScriptTriggeredFormSubmissionInChildFrame(const FrameLoadRequest&) const;
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SubstituteData defaultSubstituteDataForURL(const KURL&);
20102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool shouldPerformFragmentNavigation(bool isFormSubmission, const String& httpMethod, FrameLoadType, const KURL&);
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void scrollToFragmentWithParentBoundary(const KURL&);
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
205d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool checkLoadCompleteForThisFrame();
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
20781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    // Calls continueLoadAfterNavigationPolicy
208f523d2789ac2f83c4eca0ee4d5161bfdb5f2d052Torne (Richard Coles)    void loadWithNavigationAction(const NavigationAction&, FrameLoadType, PassRefPtrWillBeRawPtr<FormState>,
209197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        const SubstituteData&, ContentSecurityPolicyCheck shouldCheckMainWorldContentSecurityPolicy, ClientRedirectPolicy = NotClientRedirect, const AtomicString& overrideEncoding = nullAtom);
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
211197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    bool validateTransitionNavigationMode();
212197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    bool dispatchNavigationTransitionData();
21309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void detachClient();
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
215d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setHistoryItemStateForCommit(HistoryCommitType, bool isPushOrReplaceState = false, PassRefPtr<SerializedScriptValue> = nullptr);
216a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
217d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void loadInSameDocument(const KURL&, PassRefPtr<SerializedScriptValue> stateObject, FrameLoadType, ClientRedirectPolicy);
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void scheduleCheckCompleted();
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RawPtrWillBeMember<LocalFrame> m_frame;
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // FIXME: These should be OwnPtr<T> to reduce build times and simplify
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // header dependencies unless performance testing proves otherwise.
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Some of these could be lazily created for memory savings on devices.
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    mutable FrameLoaderStateMachine m_stateMachine;
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    mutable MixedContentChecker m_mixedContentChecker;
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    OwnPtrWillBeMember<ProgressTracker> m_progressTracker;
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FrameState m_state;
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    FrameLoadType m_loadType;
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
23402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch    // Document loaders for the three phases of frame loading. Note that while
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // a new request is being loaded, the old document loader may still be referenced.
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // E.g. while a new request is in the "policy" state, the old document loader may
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // be consulted in particular as it makes sense to imply certain settings on the new loader.
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RefPtr<DocumentLoader> m_documentLoader;
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RefPtr<DocumentLoader> m_provisionalDocumentLoader;
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RefPtr<DocumentLoader> m_policyDocumentLoader;
2417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    OwnPtrWillBeMember<FetchContext> m_fetchContext;
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
24351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    RefPtr<HistoryItem> m_currentItem;
24409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    RefPtr<HistoryItem> m_provisionalItem;
245d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    struct DeferredHistoryLoad {
246d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        DeferredHistoryLoad(HistoryItem* item, HistoryLoadType type, ResourceRequestCachePolicy cachePolicy)
247d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            : m_item(item)
248d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            , m_type(type)
249d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)            , m_cachePolicy(cachePolicy)
250d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        {
251d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        }
252d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
253d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        DeferredHistoryLoad() { }
254d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
255d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        bool isValid() { return m_item; }
256d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
257d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        RefPtr<HistoryItem> m_item;
258d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        HistoryLoadType m_type;
259d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        ResourceRequestCachePolicy m_cachePolicy;
260d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    };
261d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    DeferredHistoryLoad m_deferredHistoryLoad;
26251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_inStopAllLoaders;
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Timer<FrameLoader> m_checkTimer;
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
267926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    bool m_didAccessInitialDocument;
268926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Timer<FrameLoader> m_didAccessInitialDocumentTimer;
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SandboxFlags m_forcedSandboxFlags;
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
273c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // FrameLoader_h
276