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