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