Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(682)

Side by Side Diff: Source/core/loader/NavigationScheduler.cpp

Issue 1232223002: Rename LockBackForwardList to ReplaceCurrentItem. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698