Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| 4 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) | 4 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) |
| 5 * Copyright (C) 2009 Adam Barth. All rights reserved. | 5 * Copyright (C) 2009 Adam Barth. All rights reserved. |
| 6 * | 6 * |
| 7 * Redistribution and use in source and binary forms, with or without | 7 * Redistribution and use in source and binary forms, with or without |
| 8 * modification, are permitted provided that the following conditions | 8 * modification, are permitted provided that the following conditions |
| 9 * are met: | 9 * are met: |
| 10 * | 10 * |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 61 } | 61 } |
| 62 | 62 |
| 63 FrameNavigationDisabler::~FrameNavigationDisabler() | 63 FrameNavigationDisabler::~FrameNavigationDisabler() |
| 64 { | 64 { |
| 65 m_navigationScheduler.enableFrameNavigation(); | 65 m_navigationScheduler.enableFrameNavigation(); |
| 66 } | 66 } |
| 67 | 67 |
| 68 class ScheduledNavigation : public NoBaseWillBeGarbageCollectedFinalized<Schedul edNavigation> { | 68 class ScheduledNavigation : public NoBaseWillBeGarbageCollectedFinalized<Schedul edNavigation> { |
| 69 WTF_MAKE_NONCOPYABLE(ScheduledNavigation); WTF_MAKE_FAST_ALLOCATED_WILL_BE_R EMOVED(ScheduledNavigation); | 69 WTF_MAKE_NONCOPYABLE(ScheduledNavigation); WTF_MAKE_FAST_ALLOCATED_WILL_BE_R EMOVED(ScheduledNavigation); |
| 70 public: | 70 public: |
| 71 ScheduledNavigation(double delay, Document* originDocument, bool lockBackFor wardList, bool isLocationChange) | 71 ScheduledNavigation(double delay, Document* originDocument, bool replacesCur rentItem, bool isLocationChange) |
| 72 : m_delay(delay) | 72 : m_delay(delay) |
| 73 , m_originDocument(originDocument) | 73 , m_originDocument(originDocument) |
| 74 , m_lockBackForwardList(lockBackForwardList) | 74 , m_replacesCurrentItem(replacesCurrentItem) |
|
Charlie Reis
2015/07/10 22:51:14
Same here.
| |
| 75 , m_isLocationChange(isLocationChange) | 75 , m_isLocationChange(isLocationChange) |
| 76 , m_wasUserGesture(UserGestureIndicator::processingUserGesture()) | 76 , m_wasUserGesture(UserGestureIndicator::processingUserGesture()) |
| 77 { | 77 { |
| 78 if (m_wasUserGesture) | 78 if (m_wasUserGesture) |
| 79 m_userGestureToken = UserGestureIndicator::currentToken(); | 79 m_userGestureToken = UserGestureIndicator::currentToken(); |
| 80 } | 80 } |
| 81 virtual ~ScheduledNavigation() { } | 81 virtual ~ScheduledNavigation() { } |
| 82 | 82 |
| 83 virtual void fire(LocalFrame*) = 0; | 83 virtual void fire(LocalFrame*) = 0; |
| 84 | 84 |
| 85 virtual bool shouldStartTimer(LocalFrame*) { return true; } | 85 virtual bool shouldStartTimer(LocalFrame*) { return true; } |
| 86 | 86 |
| 87 double delay() const { return m_delay; } | 87 double delay() const { return m_delay; } |
| 88 Document* originDocument() const { return m_originDocument.get(); } | 88 Document* originDocument() const { return m_originDocument.get(); } |
| 89 bool lockBackForwardList() const { return m_lockBackForwardList; } | 89 bool replacesCurrentItem() const { return m_replacesCurrentItem; } |
| 90 bool isLocationChange() const { return m_isLocationChange; } | 90 bool isLocationChange() const { return m_isLocationChange; } |
| 91 PassOwnPtr<UserGestureIndicator> createUserGestureIndicator() | 91 PassOwnPtr<UserGestureIndicator> createUserGestureIndicator() |
| 92 { | 92 { |
| 93 if (m_wasUserGesture && m_userGestureToken) | 93 if (m_wasUserGesture && m_userGestureToken) |
| 94 return adoptPtr(new UserGestureIndicator(m_userGestureToken)); | 94 return adoptPtr(new UserGestureIndicator(m_userGestureToken)); |
| 95 return adoptPtr(new UserGestureIndicator(DefinitelyNotProcessingUserGest ure)); | 95 return adoptPtr(new UserGestureIndicator(DefinitelyNotProcessingUserGest ure)); |
| 96 } | 96 } |
| 97 | 97 |
| 98 DEFINE_INLINE_VIRTUAL_TRACE() | 98 DEFINE_INLINE_VIRTUAL_TRACE() |
| 99 { | 99 { |
| 100 visitor->trace(m_originDocument); | 100 visitor->trace(m_originDocument); |
| 101 } | 101 } |
| 102 | 102 |
| 103 protected: | 103 protected: |
| 104 void clearUserGesture() { m_wasUserGesture = false; } | 104 void clearUserGesture() { m_wasUserGesture = false; } |
| 105 | 105 |
| 106 private: | 106 private: |
| 107 double m_delay; | 107 double m_delay; |
| 108 RefPtrWillBeMember<Document> m_originDocument; | 108 RefPtrWillBeMember<Document> m_originDocument; |
| 109 bool m_lockBackForwardList; | 109 bool m_replacesCurrentItem; |
| 110 bool m_isLocationChange; | 110 bool m_isLocationChange; |
| 111 bool m_wasUserGesture; | 111 bool m_wasUserGesture; |
| 112 RefPtr<UserGestureToken> m_userGestureToken; | 112 RefPtr<UserGestureToken> m_userGestureToken; |
| 113 }; | 113 }; |
| 114 | 114 |
| 115 class ScheduledURLNavigation : public ScheduledNavigation { | 115 class ScheduledURLNavigation : public ScheduledNavigation { |
| 116 protected: | 116 protected: |
| 117 ScheduledURLNavigation(double delay, Document* originDocument, const String& url, bool lockBackForwardList, bool isLocationChange) | 117 ScheduledURLNavigation(double delay, Document* originDocument, const String& url, bool replacesCurrentItem, bool isLocationChange) |
| 118 : ScheduledNavigation(delay, originDocument, lockBackForwardList, isLoca tionChange) | 118 : ScheduledNavigation(delay, originDocument, replacesCurrentItem, isLoca tionChange) |
| 119 , m_url(url) | 119 , m_url(url) |
| 120 , m_shouldCheckMainWorldContentSecurityPolicy(CheckContentSecurityPolicy ) | 120 , m_shouldCheckMainWorldContentSecurityPolicy(CheckContentSecurityPolicy ) |
| 121 { | 121 { |
| 122 if (ContentSecurityPolicy::shouldBypassMainWorld(originDocument)) | 122 if (ContentSecurityPolicy::shouldBypassMainWorld(originDocument)) |
| 123 m_shouldCheckMainWorldContentSecurityPolicy = DoNotCheckContentSecur ityPolicy; | 123 m_shouldCheckMainWorldContentSecurityPolicy = DoNotCheckContentSecur ityPolicy; |
| 124 } | 124 } |
| 125 | 125 |
| 126 void fire(LocalFrame* frame) override | 126 void fire(LocalFrame* frame) override |
| 127 { | 127 { |
| 128 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or(); | 128 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or(); |
| 129 FrameLoadRequest request(originDocument(), m_url, "_self", m_shouldCheck MainWorldContentSecurityPolicy); | 129 FrameLoadRequest request(originDocument(), m_url, "_self", m_shouldCheck MainWorldContentSecurityPolicy); |
| 130 request.setLockBackForwardList(lockBackForwardList()); | 130 request.setReplacesCurrentItem(replacesCurrentItem()); |
| 131 request.setClientRedirect(ClientRedirect); | 131 request.setClientRedirect(ClientRedirect); |
| 132 frame->loader().load(request); | 132 frame->loader().load(request); |
| 133 } | 133 } |
| 134 | 134 |
| 135 String url() const { return m_url; } | 135 String url() const { return m_url; } |
| 136 | 136 |
| 137 private: | 137 private: |
| 138 String m_url; | 138 String m_url; |
| 139 ContentSecurityPolicyDisposition m_shouldCheckMainWorldContentSecurityPolicy ; | 139 ContentSecurityPolicyDisposition m_shouldCheckMainWorldContentSecurityPolicy ; |
| 140 }; | 140 }; |
| 141 | 141 |
| 142 class ScheduledRedirect final : public ScheduledURLNavigation { | 142 class ScheduledRedirect final : public ScheduledURLNavigation { |
| 143 public: | 143 public: |
| 144 static PassOwnPtrWillBeRawPtr<ScheduledRedirect> create(double delay, Docume nt* originDocument, const String& url, bool lockBackForwardList) | 144 static PassOwnPtrWillBeRawPtr<ScheduledRedirect> create(double delay, Docume nt* originDocument, const String& url, bool replacesCurrentItem) |
| 145 { | 145 { |
| 146 return adoptPtrWillBeNoop(new ScheduledRedirect(delay, originDocument, u rl, lockBackForwardList)); | 146 return adoptPtrWillBeNoop(new ScheduledRedirect(delay, originDocument, u rl, replacesCurrentItem)); |
| 147 } | 147 } |
| 148 | 148 |
| 149 bool shouldStartTimer(LocalFrame* frame) override { return frame->document() ->loadEventFinished(); } | 149 bool shouldStartTimer(LocalFrame* frame) override { return frame->document() ->loadEventFinished(); } |
| 150 | 150 |
| 151 void fire(LocalFrame* frame) override | 151 void fire(LocalFrame* frame) override |
| 152 { | 152 { |
| 153 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or(); | 153 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or(); |
| 154 FrameLoadRequest request(originDocument(), url(), "_self"); | 154 FrameLoadRequest request(originDocument(), url(), "_self"); |
| 155 request.setLockBackForwardList(lockBackForwardList()); | 155 request.setReplacesCurrentItem(replacesCurrentItem()); |
| 156 if (equalIgnoringFragmentIdentifier(frame->document()->url(), request.re sourceRequest().url())) | 156 if (equalIgnoringFragmentIdentifier(frame->document()->url(), request.re sourceRequest().url())) |
| 157 request.resourceRequest().setCachePolicy(ReloadIgnoringCacheData); | 157 request.resourceRequest().setCachePolicy(ReloadIgnoringCacheData); |
| 158 request.setClientRedirect(ClientRedirect); | 158 request.setClientRedirect(ClientRedirect); |
| 159 frame->loader().load(request); | 159 frame->loader().load(request); |
| 160 } | 160 } |
| 161 private: | 161 private: |
| 162 ScheduledRedirect(double delay, Document* originDocument, const String& url, bool lockBackForwardList) | 162 ScheduledRedirect(double delay, Document* originDocument, const String& url, bool replacesCurrentItem) |
| 163 : ScheduledURLNavigation(delay, originDocument, url, lockBackForwardList , false) | 163 : ScheduledURLNavigation(delay, originDocument, url, replacesCurrentItem , false) |
| 164 { | 164 { |
| 165 clearUserGesture(); | 165 clearUserGesture(); |
| 166 } | 166 } |
| 167 }; | 167 }; |
| 168 | 168 |
| 169 class ScheduledLocationChange final : public ScheduledURLNavigation { | 169 class ScheduledLocationChange final : public ScheduledURLNavigation { |
| 170 public: | 170 public: |
| 171 static PassOwnPtrWillBeRawPtr<ScheduledLocationChange> create(Document* orig inDocument, const String& url, bool lockBackForwardList) | 171 static PassOwnPtrWillBeRawPtr<ScheduledLocationChange> create(Document* orig inDocument, const String& url, bool replacesCurrentItem) |
| 172 { | 172 { |
| 173 return adoptPtrWillBeNoop(new ScheduledLocationChange(originDocument, ur l, lockBackForwardList)); | 173 return adoptPtrWillBeNoop(new ScheduledLocationChange(originDocument, ur l, replacesCurrentItem)); |
| 174 } | 174 } |
| 175 | 175 |
| 176 private: | 176 private: |
| 177 ScheduledLocationChange(Document* originDocument, const String& url, bool lo ckBackForwardList) | 177 ScheduledLocationChange(Document* originDocument, const String& url, bool re placesCurrentItem) |
| 178 : ScheduledURLNavigation(0.0, originDocument, url, lockBackForwardList, !protocolIsJavaScript(url)) { } | 178 : ScheduledURLNavigation(0.0, originDocument, url, replacesCurrentItem, !protocolIsJavaScript(url)) { } |
| 179 }; | 179 }; |
| 180 | 180 |
| 181 class ScheduledReload final : public ScheduledNavigation { | 181 class ScheduledReload final : public ScheduledNavigation { |
| 182 public: | 182 public: |
| 183 static PassOwnPtrWillBeRawPtr<ScheduledReload> create() | 183 static PassOwnPtrWillBeRawPtr<ScheduledReload> create() |
| 184 { | 184 { |
| 185 return adoptPtrWillBeNoop(new ScheduledReload); | 185 return adoptPtrWillBeNoop(new ScheduledReload); |
| 186 } | 186 } |
| 187 | 187 |
| 188 void fire(LocalFrame* frame) override | 188 void fire(LocalFrame* frame) override |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 209 static PassOwnPtrWillBeRawPtr<ScheduledPageBlock> create(Document* originDoc ument, const String& url) | 209 static PassOwnPtrWillBeRawPtr<ScheduledPageBlock> create(Document* originDoc ument, const String& url) |
| 210 { | 210 { |
| 211 return adoptPtrWillBeNoop(new ScheduledPageBlock(originDocument, url)); | 211 return adoptPtrWillBeNoop(new ScheduledPageBlock(originDocument, url)); |
| 212 } | 212 } |
| 213 | 213 |
| 214 void fire(LocalFrame* frame) override | 214 void fire(LocalFrame* frame) override |
| 215 { | 215 { |
| 216 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or(); | 216 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or(); |
| 217 SubstituteData substituteData(SharedBuffer::create(), "text/plain", "UTF -8", KURL(), ForceSynchronousLoad); | 217 SubstituteData substituteData(SharedBuffer::create(), "text/plain", "UTF -8", KURL(), ForceSynchronousLoad); |
| 218 FrameLoadRequest request(originDocument(), url(), substituteData); | 218 FrameLoadRequest request(originDocument(), url(), substituteData); |
| 219 request.setLockBackForwardList(true); | 219 request.setReplacesCurrentItem(true); |
| 220 request.setClientRedirect(ClientRedirect); | 220 request.setClientRedirect(ClientRedirect); |
| 221 frame->loader().load(request); | 221 frame->loader().load(request); |
| 222 } | 222 } |
| 223 private: | 223 private: |
| 224 ScheduledPageBlock(Document* originDocument, const String& url) | 224 ScheduledPageBlock(Document* originDocument, const String& url) |
| 225 : ScheduledURLNavigation(0.0, originDocument, url, true, true) | 225 : ScheduledURLNavigation(0.0, originDocument, url, true, true) |
| 226 { | 226 { |
| 227 } | 227 } |
| 228 | 228 |
| 229 }; | 229 }; |
| 230 | 230 |
| 231 class ScheduledFormSubmission final : public ScheduledNavigation { | 231 class ScheduledFormSubmission final : public ScheduledNavigation { |
| 232 public: | 232 public: |
| 233 static PassOwnPtrWillBeRawPtr<ScheduledFormSubmission> create(Document* docu ment, PassRefPtrWillBeRawPtr<FormSubmission> submission, bool lockBackForwardLis t) | 233 static PassOwnPtrWillBeRawPtr<ScheduledFormSubmission> create(Document* docu ment, PassRefPtrWillBeRawPtr<FormSubmission> submission, bool replacesCurrentIte m) |
| 234 { | 234 { |
| 235 return adoptPtrWillBeNoop(new ScheduledFormSubmission(document, submissi on, lockBackForwardList)); | 235 return adoptPtrWillBeNoop(new ScheduledFormSubmission(document, submissi on, replacesCurrentItem)); |
| 236 } | 236 } |
| 237 | 237 |
| 238 void fire(LocalFrame* frame) override | 238 void fire(LocalFrame* frame) override |
| 239 { | 239 { |
| 240 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or(); | 240 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or(); |
| 241 FrameLoadRequest frameRequest(originDocument()); | 241 FrameLoadRequest frameRequest(originDocument()); |
| 242 m_submission->populateFrameLoadRequest(frameRequest); | 242 m_submission->populateFrameLoadRequest(frameRequest); |
| 243 frameRequest.setLockBackForwardList(lockBackForwardList()); | 243 frameRequest.setReplacesCurrentItem(replacesCurrentItem()); |
| 244 frameRequest.setTriggeringEvent(m_submission->event()); | 244 frameRequest.setTriggeringEvent(m_submission->event()); |
| 245 frameRequest.setForm(m_submission->form()); | 245 frameRequest.setForm(m_submission->form()); |
| 246 frame->loader().load(frameRequest); | 246 frame->loader().load(frameRequest); |
| 247 } | 247 } |
| 248 | 248 |
| 249 DEFINE_INLINE_VIRTUAL_TRACE() | 249 DEFINE_INLINE_VIRTUAL_TRACE() |
| 250 { | 250 { |
| 251 visitor->trace(m_submission); | 251 visitor->trace(m_submission); |
| 252 ScheduledNavigation::trace(visitor); | 252 ScheduledNavigation::trace(visitor); |
| 253 } | 253 } |
| 254 | 254 |
| 255 private: | 255 private: |
| 256 ScheduledFormSubmission(Document* document, PassRefPtrWillBeRawPtr<FormSubmi ssion> submission, bool lockBackForwardList) | 256 ScheduledFormSubmission(Document* document, PassRefPtrWillBeRawPtr<FormSubmi ssion> submission, bool replacesCurrentItem) |
| 257 : ScheduledNavigation(0, document, lockBackForwardList, true) | 257 : ScheduledNavigation(0, document, replacesCurrentItem, true) |
| 258 , m_submission(submission) | 258 , m_submission(submission) |
| 259 { | 259 { |
| 260 ASSERT(m_submission->form()); | 260 ASSERT(m_submission->form()); |
| 261 } | 261 } |
| 262 | 262 |
| 263 RefPtrWillBeMember<FormSubmission> m_submission; | 263 RefPtrWillBeMember<FormSubmission> m_submission; |
| 264 }; | 264 }; |
| 265 | 265 |
| 266 NavigationScheduler::NavigationScheduler(LocalFrame* frame) | 266 NavigationScheduler::NavigationScheduler(LocalFrame* frame) |
| 267 : m_frame(frame) | 267 : m_frame(frame) |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 296 if (delay < 0 || delay > INT_MAX / 1000) | 296 if (delay < 0 || delay > INT_MAX / 1000) |
| 297 return; | 297 return; |
| 298 if (url.isEmpty()) | 298 if (url.isEmpty()) |
| 299 return; | 299 return; |
| 300 | 300 |
| 301 // We want a new back/forward list item if the refresh timeout is > 1 second . | 301 // We want a new back/forward list item if the refresh timeout is > 1 second . |
| 302 if (!m_redirect || delay <= m_redirect->delay()) | 302 if (!m_redirect || delay <= m_redirect->delay()) |
| 303 schedule(ScheduledRedirect::create(delay, m_frame->document(), url, dela y <= 1)); | 303 schedule(ScheduledRedirect::create(delay, m_frame->document(), url, dela y <= 1)); |
| 304 } | 304 } |
| 305 | 305 |
| 306 bool NavigationScheduler::mustLockBackForwardList(LocalFrame* targetFrame) | 306 bool NavigationScheduler::mustReplaceCurrentItem(LocalFrame* targetFrame) |
| 307 { | 307 { |
| 308 // Non-user navigation before the page has finished firing onload should not create a new back/forward item. | 308 // Non-user navigation before the page has finished firing onload should not create a new back/forward item. |
| 309 // See https://webkit.org/b/42861 for the original motivation for this. | 309 // See https://webkit.org/b/42861 for the original motivation for this. |
| 310 if (!UserGestureIndicator::processingUserGesture() && !targetFrame->document ()->loadEventFinished()) | 310 if (!UserGestureIndicator::processingUserGesture() && !targetFrame->document ()->loadEventFinished()) |
| 311 return true; | 311 return true; |
| 312 | 312 |
| 313 // Navigation of a subframe during loading of an ancestor frame does not cre ate a new back/forward item. | 313 // Navigation of a subframe during loading of an ancestor frame does not cre ate a new back/forward item. |
| 314 // The definition of "during load" is any time before all handlers for the l oad event have been run. | 314 // The definition of "during load" is any time before all handlers for the l oad event have been run. |
| 315 // See https://bugs.webkit.org/show_bug.cgi?id=14957 for the original motiva tion for this. | 315 // See https://bugs.webkit.org/show_bug.cgi?id=14957 for the original motiva tion for this. |
| 316 Frame* parentFrame = targetFrame->tree().parent(); | 316 Frame* parentFrame = targetFrame->tree().parent(); |
| 317 return parentFrame && parentFrame->isLocalFrame() && !toLocalFrame(parentFra me)->loader().allAncestorsAreComplete(); | 317 return parentFrame && parentFrame->isLocalFrame() && !toLocalFrame(parentFra me)->loader().allAncestorsAreComplete(); |
| 318 } | 318 } |
| 319 | 319 |
| 320 void NavigationScheduler::scheduleLocationChange(Document* originDocument, const String& url, bool lockBackForwardList) | 320 void NavigationScheduler::scheduleLocationChange(Document* originDocument, const String& url, bool replacesCurrentItem) |
| 321 { | 321 { |
| 322 if (!shouldScheduleNavigation(url)) | 322 if (!shouldScheduleNavigation(url)) |
| 323 return; | 323 return; |
| 324 if (url.isEmpty()) | 324 if (url.isEmpty()) |
| 325 return; | 325 return; |
| 326 | 326 |
| 327 lockBackForwardList = lockBackForwardList || mustLockBackForwardList(m_frame ); | 327 replacesCurrentItem = replacesCurrentItem || mustReplaceCurrentItem(m_frame) ; |
| 328 | 328 |
| 329 // If the URL we're going to navigate to is the same as the current one, exc ept for the | 329 // If the URL we're going to navigate to is the same as the current one, exc ept for the |
| 330 // fragment part, we don't need to schedule the location change. We'll skip this | 330 // fragment part, we don't need to schedule the location change. We'll skip this |
| 331 // optimization for cross-origin navigations to minimize the navigator's abi lity to | 331 // optimization for cross-origin navigations to minimize the navigator's abi lity to |
| 332 // execute timing attacks. | 332 // execute timing attacks. |
| 333 if (originDocument->securityOrigin()->canAccess(m_frame->document()->securit yOrigin())) { | 333 if (originDocument->securityOrigin()->canAccess(m_frame->document()->securit yOrigin())) { |
| 334 KURL parsedURL(ParsedURLString, url); | 334 KURL parsedURL(ParsedURLString, url); |
| 335 if (parsedURL.hasFragmentIdentifier() && equalIgnoringFragmentIdentifier (m_frame->document()->url(), parsedURL)) { | 335 if (parsedURL.hasFragmentIdentifier() && equalIgnoringFragmentIdentifier (m_frame->document()->url(), parsedURL)) { |
| 336 FrameLoadRequest request(originDocument, m_frame->document()->comple teURL(url), "_self"); | 336 FrameLoadRequest request(originDocument, m_frame->document()->comple teURL(url), "_self"); |
| 337 request.setLockBackForwardList(lockBackForwardList); | 337 request.setReplacesCurrentItem(replacesCurrentItem); |
| 338 if (lockBackForwardList) | 338 if (replacesCurrentItem) |
| 339 request.setClientRedirect(ClientRedirect); | 339 request.setClientRedirect(ClientRedirect); |
| 340 m_frame->loader().load(request); | 340 m_frame->loader().load(request); |
| 341 return; | 341 return; |
| 342 } | 342 } |
| 343 } | 343 } |
| 344 | 344 |
| 345 schedule(ScheduledLocationChange::create(originDocument, url, lockBackForwar dList)); | 345 schedule(ScheduledLocationChange::create(originDocument, url, replacesCurren tItem)); |
| 346 } | 346 } |
| 347 | 347 |
| 348 void NavigationScheduler::schedulePageBlock(Document* originDocument) | 348 void NavigationScheduler::schedulePageBlock(Document* originDocument) |
| 349 { | 349 { |
| 350 ASSERT(m_frame->page()); | 350 ASSERT(m_frame->page()); |
| 351 const KURL& url = m_frame->document()->url(); | 351 const KURL& url = m_frame->document()->url(); |
| 352 schedule(ScheduledPageBlock::create(originDocument, url)); | 352 schedule(ScheduledPageBlock::create(originDocument, url)); |
| 353 } | 353 } |
| 354 | 354 |
| 355 void NavigationScheduler::scheduleFormSubmission(Document* document, PassRefPtrW illBeRawPtr<FormSubmission> submission) | 355 void NavigationScheduler::scheduleFormSubmission(Document* document, PassRefPtrW illBeRawPtr<FormSubmission> submission) |
| 356 { | 356 { |
| 357 ASSERT(m_frame->page()); | 357 ASSERT(m_frame->page()); |
| 358 schedule(ScheduledFormSubmission::create(document, submission, mustLockBackF orwardList(m_frame))); | 358 schedule(ScheduledFormSubmission::create(document, submission, mustReplaceCu rrentItem(m_frame))); |
| 359 } | 359 } |
| 360 | 360 |
| 361 void NavigationScheduler::scheduleReload() | 361 void NavigationScheduler::scheduleReload() |
| 362 { | 362 { |
| 363 if (!shouldScheduleReload()) | 363 if (!shouldScheduleReload()) |
| 364 return; | 364 return; |
| 365 if (m_frame->document()->url().isEmpty()) | 365 if (m_frame->document()->url().isEmpty()) |
| 366 return; | 366 return; |
| 367 schedule(ScheduledReload::create()); | 367 schedule(ScheduledReload::create()); |
| 368 } | 368 } |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 426 m_redirect.clear(); | 426 m_redirect.clear(); |
| 427 } | 427 } |
| 428 | 428 |
| 429 DEFINE_TRACE(NavigationScheduler) | 429 DEFINE_TRACE(NavigationScheduler) |
| 430 { | 430 { |
| 431 visitor->trace(m_frame); | 431 visitor->trace(m_frame); |
| 432 visitor->trace(m_redirect); | 432 visitor->trace(m_redirect); |
| 433 } | 433 } |
| 434 | 434 |
| 435 } // namespace blink | 435 } // namespace blink |
| OLD | NEW |