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" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/SecurityContext.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoaderStateMachine.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoaderTypes.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/HistoryController.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/MixedContentChecker.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/ResourceLoadNotifier.h" 4283750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch#include "core/loader/ResourceLoaderOptions.h" 4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/cache/CachePolicy.h" 4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/LayoutMilestones.h" 4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/Timer.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) 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 52fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdochclass Resource; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Chrome; 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DOMWrapperWorld; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DocumentLoader; 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Event; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FormState; 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FormSubmission; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FrameLoaderClient; 60521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)class IconController; 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class NavigationAction; 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Page; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ResourceError; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ResourceRequest; 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ResourceResponse; 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SecurityOrigin; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SerializedScriptValue; 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class StringWithDirection; 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SubstituteData; 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct FrameLoadRequest; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct WindowFeatures; 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isBackForwardLoadType(FrameLoadType); 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FrameLoader { 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(FrameLoader); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameLoader(Frame*, FrameLoaderClient*); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ~FrameLoader(); 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void init(); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Frame* frame() const { return m_frame; } 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HistoryController* history() const { return &m_history; } 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceLoadNotifier* notifier() const { return &m_notifer; } 88521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) IconController* icon() const { return m_icon.get(); } 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MixedContentChecker* mixedContentChecker() const { return &m_mixedContentChecker; } 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void prepareForHistoryNavigation(); 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 937757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // These functions start a load. All eventually call into loadWithNavigationAction() or loadInSameDocument(). 947757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void load(const FrameLoadRequest&); // The entry point for non-reload, non-history loads. 957757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void reload(ReloadPolicy = NormalReload, const KURL& overrideURL = KURL(), const String& overrideEncoding = String()); 967757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void loadHistoryItem(HistoryItem*); // The entry point for all back/forward loads 977757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void submitForm(PassRefPtr<FormSubmission>); // Schedules a form submission, which will eventually call load() in the target frame. 98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 997757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // FIXME: This doesn't really belong here, since we don't load Frames synchronously. 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned long loadResourceSynchronously(const ResourceRequest&, StoredCredentials, ResourceError&, ResourceResponse&, Vector<char>& data); 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HistoryItem* requestedHistoryItem() const { return m_requestedHistoryItem.get(); } 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static void reportLocalLoadFailed(Frame*, const String& url); 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: These are all functions which stop loads. We have too many. 10753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) // Warning: stopAllLoaders can and will detach the Frame out from under you. All callers need to either protect the Frame 10853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) // or guarantee they won't in any way access the Frame after stopAllLoaders returns. 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void stopAllLoaders(ClearProvisionalItemPolicy = ShouldClearProvisionalItem); 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void stopForUserCancel(bool deferCheckLoadComplete = false); 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void stop(); 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void stopLoading(UnloadEventPolicy); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool closeURL(); 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void cancelAndClear(); 1150390b6f38fb8c48e6cda11a37640b83a6cbca5bdTorne (Richard Coles) // FIXME: clear() is trying to do too many things. We should break it down into smaller functions. 1160390b6f38fb8c48e6cda11a37640b83a6cbca5bdTorne (Richard Coles) void clear(ClearOptions); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 118304f76f9712bb8bf182649e3408252f91dbb8d53Torne (Richard Coles) // Sets a timer to notify the client that the initial empty document has 119304f76f9712bb8bf182649e3408252f91dbb8d53Torne (Richard Coles) // been accessed, and thus it is no longer safe to show a provisional URL 120304f76f9712bb8bf182649e3408252f91dbb8d53Torne (Richard Coles) // above the document without risking a URL spoof. 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void didAccessInitialDocument(); 122304f76f9712bb8bf182649e3408252f91dbb8d53Torne (Richard Coles) 123304f76f9712bb8bf182649e3408252f91dbb8d53Torne (Richard Coles) // If the initial empty document is showing and has been accessed, this 124304f76f9712bb8bf182649e3408252f91dbb8d53Torne (Richard Coles) // cancels the timer and immediately notifies the client in cases that 125304f76f9712bb8bf182649e3408252f91dbb8d53Torne (Richard Coles) // waiting to notify would allow a URL spoof. 126304f76f9712bb8bf182649e3408252f91dbb8d53Torne (Richard Coles) void notifyIfInitialDocumentAccessed(); 127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isLoading() const; 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int numPendingOrLoadingRequests(bool recurse) const; 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String referrer() const; 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String outgoingReferrer() const; 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String outgoingOrigin() const; 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DocumentLoader* activeDocumentLoader() const; 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DocumentLoader* documentLoader() const { return m_documentLoader.get(); } 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DocumentLoader* policyDocumentLoader() const { return m_policyDocumentLoader.get(); } 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DocumentLoader* provisionalDocumentLoader() const { return m_provisionalDocumentLoader.get(); } 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameState state() const { return m_state; } 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const ResourceRequest& originalRequest() const; 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void receivedMainResourceError(const ResourceError&); 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool willLoadMediaElementURL(KURL&); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void handleFallbackContent(); 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isHostedByObjectElement() const; 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isLoadingMainFrame() const; 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool subframeIsLoading() const; 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void didChangeTitle(DocumentLoader*); 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shouldTreatURLAsSrcdocDocument(const KURL&) const; 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameLoadType loadType() const; 15753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) void setLoadType(FrameLoadType loadType) { m_loadType = loadType; } 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CachePolicy subresourceCachePolicy() const; 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void didLayout(LayoutMilestones); 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void didFirstLayout(); 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 164fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch void loadedResourceFromMemoryCache(Resource*); 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void checkLoadComplete(); 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void detachFromParent(); 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) void addExtraFieldsToRequest(ResourceRequest&); 17002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static void addHTTPOriginIfNeeded(ResourceRequest&, const String& origin); 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameLoaderClient* client() const { return m_client; } 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setDefersLoading(bool); 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void didExplicitOpen(); 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Callbacks from DocumentWriter 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void didBeginDocument(bool dispatchWindowObjectAvailable); 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void receivedFirstData(); 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String userAgent(const KURL&) const; 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*); 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void dispatchDidClearWindowObjectsInAllWorlds(); 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void dispatchDocumentElementAvailable(); 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The following sandbox flags will be forced, regardless of changes to 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // the sandbox attribute of any parent frames. 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void forceSandboxFlags(SandboxFlags flags) { m_forcedSandboxFlags |= flags; } 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SandboxFlags effectiveSandboxFlags() const; 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool checkIfFormActionAllowedByCSP(const KURL&) const; 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Frame* opener(); 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setOpener(Frame*); 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void resetMultipleFormSubmissionProtection(); 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void frameDetached(); 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setOutgoingReferrer(const KURL&); 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void loadDone(); 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void finishedParsing(); 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void checkCompleted(); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isComplete() const; 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setTitle(const StringWithDirection&); 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void commitProvisionalLoad(); 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameLoaderStateMachine* stateMachine() const { return &m_stateMachine; } 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Frame* findFrameForNavigation(const AtomicString& name, Document* activeDocument = 0); 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void applyUserAgent(ResourceRequest&); 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shouldInterruptLoadForXFrameOptions(const String&, const KURL&, unsigned long requestIdentifier); 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void completed(); 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allAncestorsAreComplete() const; // including this 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool suppressOpenerInNewFrame() const { return m_suppressOpenerInNewFrame; } 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shouldClose(); 23002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void started(); 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 233fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch void setContainsPlugins() { m_containsPlugins = true; } 234fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch bool containsPlugins() const { return m_containsPlugins; } 235fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch bool allowPlugins(ReasonForCallingAllowPlugins); 236fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum PageDismissalType { 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NoDismissal = 0, 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BeforeUnloadDismissal = 1, 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PageHideDismissal = 2, 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) UnloadDismissal = 3 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PageDismissalType pageDismissalEventBeingDispatched() const { return m_pageDismissalEventBeingDispatched; } 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2455ed9e3bfaac4a22b8ca307d7fc2a81f2c5d0aa25Torne (Richard Coles) enum UpdateBackForwardListPolicy { 2465ed9e3bfaac4a22b8ca307d7fc2a81f2c5d0aa25Torne (Richard Coles) UpdateBackForwardList, 2475ed9e3bfaac4a22b8ca307d7fc2a81f2c5d0aa25Torne (Richard Coles) DoNotUpdateBackForwardList 2485ed9e3bfaac4a22b8ca307d7fc2a81f2c5d0aa25Torne (Richard Coles) }; 2495ed9e3bfaac4a22b8ca307d7fc2a81f2c5d0aa25Torne (Richard Coles) void updateForSameDocumentNavigation(const KURL&, SameDocumentNavigationSource, PassRefPtr<SerializedScriptValue>, const String& title, UpdateBackForwardListPolicy); 250e6d4491e48613634a83c1957c72759da80987961Ben Murdoch 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allChildrenAreComplete() const; // immediate children, not all descendants 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void checkTimerFired(Timer<FrameLoader>*); 255304f76f9712bb8bf182649e3408252f91dbb8d53Torne (Richard Coles) void didAccessInitialDocumentTimerFired(Timer<FrameLoader>*); 25602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void loadSameDocumentItem(HistoryItem*); 25881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void loadDifferentDocumentItem(HistoryItem*); 25993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) void insertDummyHistoryItem(); 2607757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2617757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool prepareRequestForThisFrame(FrameLoadRequest&); 2627757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch void setReferrerForFrameRequest(ResourceRequest&, ShouldSendReferrer); 2637757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch FrameLoadType determineFrameLoadType(const FrameLoadRequest&); 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SubstituteData defaultSubstituteDataForURL(const KURL&); 26602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 26783750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch bool fireBeforeUnloadEvent(Chrome&, FrameLoader*); 26883750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch bool hasAllowedNavigationViaBeforeUnloadConfirmationPanel() const { return m_hasAllowedNavigationViaBeforeUnloadConfirmationPanel; } 26983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch void didAllowNavigationViaBeforeUnloadConfirmationPanel() { m_hasAllowedNavigationViaBeforeUnloadConfirmationPanel = true; } 27083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch void clearAllowNavigationViaBeforeUnloadConfirmationPanel() { m_hasAllowedNavigationViaBeforeUnloadConfirmationPanel = false; } 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 272591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch void checkNavigationPolicyAndContinueFragmentScroll(const NavigationAction&, bool isNewNavigation); 27353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) void checkNewWindowPolicyAndContinue(PassRefPtr<FormState>, const String& frameName, const NavigationAction&); 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shouldPerformFragmentNavigation(bool isFormSubmission, const String& httpMethod, FrameLoadType, const KURL&); 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void scrollToFragmentWithParentBoundary(const KURL&); 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void checkLoadCompleteForThisFrame(); 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void closeOldDataSources(); 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void dispatchDidCommitLoad(); 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // Calls continueLoadAfterNavigationPolicy 28581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) void loadWithNavigationAction(const ResourceRequest&, const NavigationAction&, 28681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) FrameLoadType, PassRefPtr<FormState>, const SubstituteData&, const String& overrideEncoding = String()); 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void requestFromDelegate(ResourceRequest&, unsigned long& identifier, ResourceError&); 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void detachChildren(); 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void closeAndRemoveChild(Frame*); 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void loadInSameDocument(const KURL&, PassRefPtr<SerializedScriptValue> stateObject, bool isNewNavigation); 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void scheduleCheckCompleted(); 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void scheduleCheckLoadComplete(); 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void startCheckCompleteTimer(); 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shouldTreatURLAsSameAsCurrent(const KURL&) const; 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Frame* m_frame; 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameLoaderClient* m_client; 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: These should be OwnPtr<T> to reduce build times and simplify 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // header dependencies unless performance testing proves otherwise. 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Some of these could be lazily created for memory savings on devices. 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable HistoryController m_history; 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable ResourceLoadNotifier m_notifer; 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable FrameLoaderStateMachine m_stateMachine; 310521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) OwnPtr<IconController> m_icon; 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable MixedContentChecker m_mixedContentChecker; 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) class FrameProgressTracker; 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OwnPtr<FrameProgressTracker> m_progressTracker; 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameState m_state; 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameLoadType m_loadType; 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch // Document loaders for the three phases of frame loading. Note that while 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // a new request is being loaded, the old document loader may still be referenced. 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // E.g. while a new request is in the "policy" state, the old document loader may 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // be consulted in particular as it makes sense to imply certain settings on the new loader. 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<DocumentLoader> m_documentLoader; 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<DocumentLoader> m_provisionalDocumentLoader; 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<DocumentLoader> m_policyDocumentLoader; 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_inStopAllLoaders; 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_outgoingReferrer; 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PageDismissalType m_pageDismissalEventBeingDispatched; 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_isComplete; 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_needsClear; 335fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch bool m_containsPlugins; 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) KURL m_submittedFormURL; 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Timer<FrameLoader> m_checkTimer; 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_shouldCallCheckCompleted; 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_shouldCallCheckLoadComplete; 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Frame* m_opener; 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HashSet<Frame*> m_openedFrames; 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 346926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool m_didAccessInitialDocument; 347926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Timer<FrameLoader> m_didAccessInitialDocumentTimer; 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_suppressOpenerInNewFrame; 349e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch bool m_startingClientRedirect; 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SandboxFlags m_forcedSandboxFlags; 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 35383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch bool m_hasAllowedNavigationViaBeforeUnloadConfirmationPanel; 35483750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<HistoryItem> m_requestedHistoryItem; 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // FrameLoader_h 361