2 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
15 * its contributors may be used to endorse or promote products derived
16 * from this software without specific prior written permission.
18 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 #include "CachePolicy.h"
34 #include "FormState.h"
35 #include "FrameLoaderTypes.h"
36 #include "ResourceRequest.h"
42 class AuthenticationChallenge;
52 class FrameLoaderClient;
54 class HTMLAppletElement;
55 class HTMLFormElement;
56 class HTMLFrameOwnerElement;
59 class NavigationAction;
63 class ResourceResponse;
64 class ScriptSourceCode;
69 class TextResourceDecoder;
72 struct FormSubmission;
73 struct FrameLoadRequest;
74 struct ScheduledRedirection;
75 struct WindowFeatures;
77 bool isBackForwardLoadType(FrameLoadType);
79 typedef void (*NavigationPolicyDecisionFunction)(void* argument,
80 const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue);
81 typedef void (*NewWindowPolicyDecisionFunction)(void* argument,
82 const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, bool shouldContinue);
83 typedef void (*ContentPolicyDecisionFunction)(void* argument, PolicyAction);
90 void set(const ResourceRequest&, PassRefPtr<FormState>,
91 NavigationPolicyDecisionFunction, void* argument);
92 void set(const ResourceRequest&, PassRefPtr<FormState>, const String& frameName,
93 NewWindowPolicyDecisionFunction, void* argument);
94 void set(ContentPolicyDecisionFunction, void* argument);
96 const ResourceRequest& request() const { return m_request; }
99 void call(bool shouldContinue);
100 void call(PolicyAction);
104 ResourceRequest m_request;
105 RefPtr<FormState> m_formState;
108 NavigationPolicyDecisionFunction m_navigationFunction;
109 NewWindowPolicyDecisionFunction m_newWindowFunction;
110 ContentPolicyDecisionFunction m_contentFunction;
114 class FrameLoader : Noncopyable {
116 FrameLoader(Frame*, FrameLoaderClient*);
121 Frame* frame() const { return m_frame; }
123 // FIXME: This is not cool, people. We should aim to consolidate these variety of loading related methods into a smaller set,
124 // and try to reuse more of the same logic by extracting common code paths.
125 void prepareForLoadStart();
126 void setupForReplace();
127 void setupForReplaceByMIMEType(const String& newMIMEType);
129 void loadWithDocumentLoader(DocumentLoader*, FrameLoadType, PassRefPtr<FormState>); // Calls continueLoadAfterNavigationPolicy
130 void load(DocumentLoader*); // Calls loadWithDocumentLoader
132 void loadWithNavigationAction(const ResourceRequest&, const NavigationAction&, // Calls loadWithDocumentLoader()
133 bool lockHistory, FrameLoadType, PassRefPtr<FormState>);
135 void loadPostRequest(const ResourceRequest&, const String& referrer, // Called by loadFrameRequestWithFormAndValues(), calls loadWithNavigationAction
136 const String& frameName, bool lockHistory, FrameLoadType, Event*, PassRefPtr<FormState>);
138 void loadURL(const KURL& newURL, const String& referrer, const String& frameName, // Called by loadFrameRequestWithFormAndValues(), calls loadWithNavigationAction or else dispatches to navigation policy delegate
139 bool lockHistory, FrameLoadType, Event*, PassRefPtr<FormState>);
140 void loadURLIntoChildFrame(const KURL&, const String& referer, Frame*);
142 void loadFrameRequestWithFormAndValues(const FrameLoadRequest&, bool lockHistory, bool lockBackForwardList, // Called by submitForm, calls loadPostRequest()
143 Event*, HTMLFormElement*, const HashMap<String, String>& formValues);
145 void load(const ResourceRequest&, bool lockHistory); // Called by WebFrame, calls (ResourceRequest, SubstituteData)
146 void load(const ResourceRequest&, const SubstituteData&, bool lockHistory); // Called both by WebFrame and internally, calls (DocumentLoader*)
147 void load(const ResourceRequest&, const String& frameName, bool lockHistory); // Called by WebPluginController
149 void loadArchive(PassRefPtr<Archive> archive);
151 // Returns true for any non-local URL. If Document parameter is supplied, its local load policy dictates,
152 // otherwise if referrer is non-empty and represents a local file, then the local load is allowed.
153 static bool canLoad(const KURL&, const String& referrer, const Document* theDocument = 0);
154 static void reportLocalLoadFailed(Frame*, const String& url);
156 static bool shouldHideReferrer(const KURL& url, const String& referrer);
158 // Called by createWindow in JSDOMWindowBase.cpp, e.g. to fulfill a modal dialog creation
159 Frame* createWindow(FrameLoader* frameLoaderForFrameLookup, const FrameLoadRequest&, const WindowFeatures&, bool& created);
161 unsigned long loadResourceSynchronously(const ResourceRequest&, ResourceError&, ResourceResponse&, Vector<char>& data);
163 bool canHandleRequest(const ResourceRequest&);
166 void stopAllLoaders();
167 void stopForUserCancel(bool deferCheckLoadComplete = false);
169 bool isLoadingMainResource() const { return m_isLoadingMainResource; }
170 bool isLoading() const;
171 bool frameHasLoaded() const;
173 int numPendingOrLoadingRequests(bool recurse) const;
174 String referrer() const;
175 String outgoingReferrer() const;
176 String outgoingOrigin() const;
177 void loadEmptyDocumentSynchronously();
179 DocumentLoader* activeDocumentLoader() const;
180 DocumentLoader* documentLoader() const { return m_documentLoader.get(); }
181 DocumentLoader* policyDocumentLoader() const { return m_policyDocumentLoader.get(); }
182 DocumentLoader* provisionalDocumentLoader() const { return m_provisionalDocumentLoader.get(); }
183 FrameState state() const { return m_state; }
184 static double timeOfLastCompletedLoad();
186 bool shouldUseCredentialStorage(ResourceLoader*);
187 void didReceiveAuthenticationChallenge(ResourceLoader*, const AuthenticationChallenge&);
188 void didCancelAuthenticationChallenge(ResourceLoader*, const AuthenticationChallenge&);
190 void assignIdentifierToInitialRequest(unsigned long identifier, const ResourceRequest&);
191 void willSendRequest(ResourceLoader*, ResourceRequest&, const ResourceResponse& redirectResponse);
192 void didReceiveResponse(ResourceLoader*, const ResourceResponse&);
193 void didReceiveData(ResourceLoader*, const char*, int, int lengthReceived);
194 void didFinishLoad(ResourceLoader*);
195 void didFailToLoad(ResourceLoader*, const ResourceError&);
196 const ResourceRequest& originalRequest() const;
197 const ResourceRequest& initialRequest() const;
198 void receivedMainResourceError(const ResourceError&, bool isComplete);
199 void receivedData(const char*, int);
201 void handleFallbackContent();
202 bool isStopping() const;
204 void finishedLoading();
206 ResourceError cancelledError(const ResourceRequest&) const;
207 ResourceError fileDoesNotExistError(const ResourceResponse&) const;
208 ResourceError blockedError(const ResourceRequest&) const;
209 ResourceError cannotShowURLError(const ResourceRequest&) const;
211 void cannotShowMIMEType(const ResourceResponse&);
212 ResourceError interruptionForPolicyChangeError(const ResourceRequest&);
214 bool isHostedByObjectElement() const;
215 bool isLoadingMainFrame() const;
216 bool canShowMIMEType(const String& MIMEType) const;
217 bool representationExistsForURLScheme(const String& URLScheme);
218 String generatedMIMETypeForURLScheme(const String& URLScheme);
220 void notifyIconChanged();
222 void checkNavigationPolicy(const ResourceRequest&, NavigationPolicyDecisionFunction function, void* argument);
223 void checkContentPolicy(const String& MIMEType, ContentPolicyDecisionFunction, void* argument);
224 void cancelContentPolicyCheck();
226 void reload(bool endToEndReload = false);
227 void reloadWithOverrideEncoding(const String& overrideEncoding);
229 void didReceiveServerRedirectForProvisionalLoadForFrame();
230 void finishedLoadingDocument(DocumentLoader*);
231 void committedLoad(DocumentLoader*, const char*, int);
232 bool isReplacing() const;
234 void revertToProvisional(DocumentLoader*);
235 void setMainDocumentError(DocumentLoader*, const ResourceError&);
236 void mainReceivedCompleteError(DocumentLoader*, const ResourceError&);
237 bool subframeIsLoading() const;
238 void willChangeTitle(DocumentLoader*);
239 void didChangeTitle(DocumentLoader*);
241 FrameLoadType loadType() const;
242 CachePolicy cachePolicy() const;
244 void didFirstLayout();
245 bool firstLayoutDone() const;
247 void didFirstVisuallyNonEmptyLayout();
249 void clientRedirectCancelledOrFinished(bool cancelWithLoadInProgress);
250 void clientRedirected(const KURL&, double delay, double fireDate, bool lockBackForwardList, bool isJavaScriptFormAction);
251 bool shouldReload(const KURL& currentURL, const KURL& destinationURL);
253 void setForceReloadWmlDeck(bool);
256 bool isQuickRedirectComing() const;
258 void sendRemainingDelegateMessages(unsigned long identifier, const ResourceResponse&, int length, const ResourceError&);
259 void requestFromDelegate(ResourceRequest&, unsigned long& identifier, ResourceError&);
260 void loadedResourceFromMemoryCache(const CachedResource*);
261 void tellClientAboutPastMemoryCacheLoads();
263 void recursiveCheckLoadComplete();
264 void checkLoadComplete();
265 void detachFromParent();
266 void detachChildren();
267 void closeAndRemoveChild(Frame*);
269 void addExtraFieldsToSubresourceRequest(ResourceRequest&);
270 void addExtraFieldsToMainResourceRequest(ResourceRequest&);
272 static void addHTTPOriginIfNeeded(ResourceRequest&, String origin);
274 FrameLoaderClient* client() const { return m_client; }
276 void setDefersLoading(bool);
278 void changeLocation(const String& url, const String& referrer, bool lockHistory = true, bool lockBackForwardList = true, bool userGesture = false, bool refresh = false);
279 void changeLocation(const KURL&, const String& referrer, bool lockHistory = true, bool lockBackForwardList = true, bool userGesture = false, bool refresh = false);
280 void urlSelected(const ResourceRequest&, const String& target, Event*, bool lockHistory, bool lockBackForwardList, bool userGesture);
281 void urlSelected(const FrameLoadRequest&, Event*, bool lockHistory, bool lockBackForwardList);
283 bool requestFrame(HTMLFrameOwnerElement*, const String& url, const AtomicString& frameName);
284 Frame* loadSubframe(HTMLFrameOwnerElement*, const KURL&, const String& name, const String& referrer);
286 void submitForm(const char* action, const String& url, PassRefPtr<FormData>, const String& target, const String& contentType, const String& boundary, Event*, bool lockHistory, bool lockBackForwardList);
287 void submitFormAgain();
288 void submitForm(const FrameLoadRequest&, Event*, bool lockHistory, bool lockBackForwardList);
291 void stopLoading(bool sendUnload);
294 void didExplicitOpen();
297 void commitIconURLToIconDatabase(const KURL&);
299 KURL baseURL() const;
300 String baseTarget() const;
301 KURL dataURLBaseFromRequest(const ResourceRequest& request) const;
303 bool isScheduledLocationChangePending() const { return m_scheduledRedirection && isLocationChange(*m_scheduledRedirection); }
304 void scheduleHTTPRedirection(double delay, const String& url);
305 void scheduleLocationChange(const String& url, const String& referrer, bool lockHistory = true, bool lockBackForwardList = true, bool userGesture = false);
306 void scheduleRefresh(bool userGesture = false);
307 void scheduleHistoryNavigation(int steps);
309 bool canGoBackOrForward(int distance) const;
310 void goBackOrForward(int distance);
311 int getHistoryLength();
312 KURL historyURL(int distance);
315 void begin(const KURL&, bool dispatchWindowObjectAvailable = true, SecurityOrigin* forcedSecurityOrigin = 0);
317 void write(const char* str, int len = -1, bool flush = false);
318 void write(const String&);
320 void endIfNotLoadingMainResource();
322 void setEncoding(const String& encoding, bool userChosen);
323 String encoding() const;
325 // Returns true if url is a JavaScript URL.
326 bool executeIfJavaScriptURL(const KURL& url, bool userGesture = false, bool replaceDocument = true);
328 ScriptValue executeScript(const ScriptSourceCode&);
329 ScriptValue executeScript(const String& script, bool forceUserGesture = false);
332 bool gotoAnchor(const String& name); // returns true if the anchor was found
333 void scrollToAnchor(const KURL&);
335 void tokenizerProcessedData();
337 void handledOnloadEvents();
338 String userAgent(const KURL&) const;
340 Widget* createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const HashMap<String, String>& args);
342 void dispatchWindowObjectAvailable();
343 void dispatchDocumentElementAvailable();
344 void restoreDocumentState();
347 void setOpener(Frame*);
348 bool openedByDOM() const;
349 void setOpenedByDOM();
351 void provisionalLoadStarted();
353 bool userGestureHint();
355 void resetMultipleFormSubmissionProtection();
356 void didNotOpenURL(const KURL&);
358 void addData(const char* bytes, int length);
362 void checkCallImplicitClose();
363 bool didOpenURL(const KURL&);
365 void frameDetached();
367 const KURL& url() const { return m_URL; }
369 void updateBaseURLForEmptyDocument();
371 void setResponseMIMEType(const String&);
372 const String& responseMIMEType() const;
374 bool containsPlugins() const;
377 void finishedParsing();
378 void checkCompleted();
379 void scheduleCheckCompleted();
380 void scheduleCheckLoadComplete();
382 void clearRecordedFormValues();
383 void setFormAboutToBeSubmitted(PassRefPtr<HTMLFormElement> element);
384 void recordFormValue(const String& name, const String& value);
386 bool isComplete() const;
388 bool requestObject(RenderPart* frame, const String& url, const AtomicString& frameName,
389 const String& serviceType, const Vector<String>& paramNames, const Vector<String>& paramValues);
391 KURL completeURL(const String& url);
393 KURL originalRequestURL() const;
395 void cancelAndClear();
397 void setTitle(const String&);
399 bool shouldTreatURLAsSameAsCurrent(const KURL&) const;
401 void commitProvisionalLoad(PassRefPtr<CachedPage>);
403 void goToItem(HistoryItem*, FrameLoadType);
404 void saveDocumentAndScrollState();
405 void saveScrollPositionAndViewStateToItem(HistoryItem*);
407 // FIXME: These accessors are here for a dwindling number of users in WebKit, WebFrame
408 // being the primary one. After they're no longer needed there, they can be removed!
409 HistoryItem* currentHistoryItem();
410 void setCurrentHistoryItem(PassRefPtr<HistoryItem>);
411 void setProvisionalHistoryItem(PassRefPtr<HistoryItem>);
413 void continueLoadWithData(SharedBuffer*, const String& mimeType, const String& textEncoding, const KURL&);
415 enum LocalLoadPolicy {
416 AllowLocalLoadsForAll, // No restriction on local loads.
417 AllowLocalLoadsForLocalAndSubstituteData,
418 AllowLocalLoadsForLocalOnly,
420 static void setLocalLoadPolicy(LocalLoadPolicy);
421 static bool restrictAccessToLocal();
422 static bool allowSubstituteDataAccessToLocal();
424 static void registerURLSchemeAsLocal(const String&);
425 static bool shouldTreatURLAsLocal(const String&);
426 static bool shouldTreatURLSchemeAsLocal(const String&);
428 static void registerURLSchemeAsNoAccess(const String&);
429 static bool shouldTreatURLSchemeAsNoAccess(const String&);
431 bool committingFirstRealLoad() const { return !m_creatingInitialEmptyDocument && !m_committedFirstRealDocumentLoad; }
433 void iconLoadDecisionAvailable();
435 bool shouldAllowNavigation(Frame* targetFrame) const;
436 Frame* findFrameForNavigation(const AtomicString& name);
438 void startIconLoader();
440 void applyUserAgent(ResourceRequest& request);
443 PassRefPtr<HistoryItem> createHistoryItem(bool useOriginal);
444 PassRefPtr<HistoryItem> createHistoryItemTree(Frame* targetFrame, bool clipAtTarget);
446 bool canCachePageContainingThisFrame();
448 void logCanCachePageDecision();
449 bool logCanCacheFrameDecision(int indentLevel);
452 void addBackForwardItemClippedAtTarget(bool doClip);
453 void restoreScrollPositionAndViewState();
454 void saveDocumentState();
455 void loadItem(HistoryItem*, FrameLoadType);
456 bool urlsMatchItem(HistoryItem*) const;
457 void invalidateCurrentItemCachedPage();
458 void recursiveGoToItem(HistoryItem*, HistoryItem*, FrameLoadType);
459 bool childFramesMatchItem(HistoryItem*) const;
461 void updateHistoryForBackForwardNavigation();
462 void updateHistoryForReload();
463 void updateHistoryForStandardLoad();
464 void updateHistoryForRedirectWithLockedBackForwardList();
465 void updateHistoryForClientRedirect();
466 void updateHistoryForCommit();
467 void updateHistoryForAnchorScroll();
469 void redirectionTimerFired(Timer<FrameLoader>*);
470 void checkCompletedTimerFired(Timer<FrameLoader>*);
471 void checkLoadCompleteTimerFired(Timer<FrameLoader>*);
473 void cancelRedirection(bool newLoadInProgress = false);
478 void parentCompleted();
480 bool shouldUsePlugin(const KURL&, const String& mimeType, bool hasFallback, bool& useFallback);
481 bool loadPlugin(RenderPart*, const KURL&, const String& mimeType,
482 const Vector<String>& paramNames, const Vector<String>& paramValues, bool useFallback);
484 bool loadProvisionalItemFromCachedPage();
485 void cachePageForHistoryItem(HistoryItem*);
487 void receivedFirstData();
489 void updatePolicyBaseURL();
490 void setPolicyBaseURL(const KURL&);
492 void addExtraFieldsToRequest(ResourceRequest&, FrameLoadType loadType, bool isMainResource, bool cookiePolicyURLFromRequest);
495 void stopLoadingSubframes();
497 void clearProvisionalLoad();
498 void markLoadComplete();
499 void transitionToCommitted(PassRefPtr<CachedPage>);
500 void frameLoadCompleted();
502 void mainReceivedError(const ResourceError&, bool isComplete);
504 void setLoadType(FrameLoadType);
506 void checkNavigationPolicy(const ResourceRequest&, DocumentLoader*, PassRefPtr<FormState>,
507 NavigationPolicyDecisionFunction, void* argument);
508 void checkNewWindowPolicy(const NavigationAction&, const ResourceRequest&,
509 PassRefPtr<FormState>, const String& frameName);
511 void continueAfterNavigationPolicy(PolicyAction);
512 void continueAfterNewWindowPolicy(PolicyAction);
513 void continueAfterContentPolicy(PolicyAction);
514 void continueLoadAfterWillSubmitForm(PolicyAction = PolicyUse);
516 static void callContinueLoadAfterNavigationPolicy(void*, const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue);
517 void continueLoadAfterNavigationPolicy(const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue);
518 static void callContinueLoadAfterNewWindowPolicy(void*, const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, bool shouldContinue);
519 void continueLoadAfterNewWindowPolicy(const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, bool shouldContinue);
520 static void callContinueFragmentScrollAfterNavigationPolicy(void*, const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue);
521 void continueFragmentScrollAfterNavigationPolicy(const ResourceRequest&, bool shouldContinue);
522 bool shouldScrollToAnchor(bool isFormSubmission, FrameLoadType loadType, const KURL& url);
523 void addHistoryItemForFragmentScroll();
525 void stopPolicyCheck();
527 void closeDocument();
529 void checkLoadCompleteForThisFrame();
531 void setDocumentLoader(DocumentLoader*);
532 void setPolicyDocumentLoader(DocumentLoader*);
533 void setProvisionalDocumentLoader(DocumentLoader*);
535 void setState(FrameState);
537 void closeOldDataSources();
538 void open(CachedPage&);
539 void open(CachedFrame&);
541 void updateHistoryAfterClientRedirect();
543 void clear(bool clearWindowProperties = true, bool clearScriptObjects = true);
545 bool shouldReloadToHandleUnreachableURL(DocumentLoader*);
546 void handleUnimplementablePolicy(const ResourceError&);
548 void scheduleRedirection(ScheduledRedirection*);
549 void startRedirectionTimer();
550 void stopRedirectionTimer();
552 void dispatchDidCommitLoad();
553 void dispatchAssignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&);
554 void dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse);
555 void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&);
556 void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long identifier, int length);
557 void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier);
559 static bool isLocationChange(const ScheduledRedirection&);
562 FrameLoaderClient* m_client;
565 FrameLoadType m_loadType;
567 // Document loaders for the three phases of frame loading. Note that while
568 // a new request is being loaded, the old document loader may still be referenced.
569 // E.g. while a new request is in the "policy" state, the old document loader may
570 // be consulted in particular as it makes sense to imply certain settings on the new loader.
571 RefPtr<DocumentLoader> m_documentLoader;
572 RefPtr<DocumentLoader> m_provisionalDocumentLoader;
573 RefPtr<DocumentLoader> m_policyDocumentLoader;
575 // This identifies the type of navigation action which prompted this load. Note
576 // that WebKit conveys this value as the WebActionNavigationTypeKey value
577 // on navigation action delegate callbacks.
578 FrameLoadType m_policyLoadType;
579 PolicyCheck m_policyCheck;
581 bool m_delegateIsHandlingProvisionalLoadError;
582 bool m_delegateIsDecidingNavigationPolicy;
583 bool m_delegateIsHandlingUnimplementablePolicy;
585 bool m_firstLayoutDone;
586 bool m_quickRedirectComing;
587 bool m_sentRedirectNotification;
588 bool m_inStopAllLoaders;
589 bool m_navigationDuringLoad;
591 String m_outgoingReferrer;
593 OwnPtr<FormSubmission> m_deferredFormSubmission;
595 bool m_isExecutingJavaScriptFormAction;
596 bool m_isRunningScript;
598 String m_responseMIMEType;
600 bool m_didCallImplicitClose;
601 bool m_wasUnloadEventEmitted;
603 bool m_isLoadingMainResource;
608 OwnPtr<IconLoader> m_iconLoader;
609 bool m_mayLoadIconLater;
611 bool m_cancellingWithLoadInProgress;
613 OwnPtr<ScheduledRedirection> m_scheduledRedirection;
618 bool m_encodingWasChosenByUser;
620 RefPtr<TextResourceDecoder> m_decoder;
622 bool m_containsPlugIns;
624 RefPtr<HTMLFormElement> m_formAboutToBeSubmitted;
625 HashMap<String, String> m_formValuesAboutToBeSubmitted;
626 KURL m_submittedFormURL;
628 Timer<FrameLoader> m_redirectionTimer;
629 Timer<FrameLoader> m_checkCompletedTimer;
630 Timer<FrameLoader> m_checkLoadCompleteTimer;
633 HashSet<Frame*> m_openedFrames;
637 bool m_creatingInitialEmptyDocument;
638 bool m_isDisplayingInitialEmptyDocument;
639 bool m_committedFirstRealDocumentLoad;
641 RefPtr<HistoryItem> m_currentHistoryItem;
642 RefPtr<HistoryItem> m_previousHistoryItem;
643 RefPtr<HistoryItem> m_provisionalHistoryItem;
645 bool m_didPerformFirstNavigation;
648 bool m_didDispatchDidCommitLoad;
652 bool m_forceReloadWmlDeck;
656 } // namespace WebCore
658 #endif // FrameLoader_h