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

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

Issue 1853743005: Oilpan: Remove WillBe types (part 13) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 #include "platform/UserGestureIndicator.h" 49 #include "platform/UserGestureIndicator.h"
50 #include "platform/scheduler/CancellableTaskFactory.h" 50 #include "platform/scheduler/CancellableTaskFactory.h"
51 #include "public/platform/Platform.h" 51 #include "public/platform/Platform.h"
52 #include "public/platform/WebScheduler.h" 52 #include "public/platform/WebScheduler.h"
53 #include "wtf/CurrentTime.h" 53 #include "wtf/CurrentTime.h"
54 54
55 namespace blink { 55 namespace blink {
56 56
57 unsigned NavigationDisablerForBeforeUnload::s_navigationDisableCount = 0; 57 unsigned NavigationDisablerForBeforeUnload::s_navigationDisableCount = 0;
58 58
59 class ScheduledNavigation : public NoBaseWillBeGarbageCollectedFinalized<Schedul edNavigation> { 59 class ScheduledNavigation : public GarbageCollectedFinalized<ScheduledNavigation > {
60 WTF_MAKE_NONCOPYABLE(ScheduledNavigation); USING_FAST_MALLOC_WILL_BE_REMOVED (ScheduledNavigation); 60 WTF_MAKE_NONCOPYABLE(ScheduledNavigation);
61 public: 61 public:
62 ScheduledNavigation(double delay, Document* originDocument, bool replacesCur rentItem, bool isLocationChange) 62 ScheduledNavigation(double delay, Document* originDocument, bool replacesCur rentItem, bool isLocationChange)
63 : m_delay(delay) 63 : m_delay(delay)
64 , m_originDocument(originDocument) 64 , m_originDocument(originDocument)
65 , m_replacesCurrentItem(replacesCurrentItem) 65 , m_replacesCurrentItem(replacesCurrentItem)
66 , m_isLocationChange(isLocationChange) 66 , m_isLocationChange(isLocationChange)
67 , m_wasUserGesture(UserGestureIndicator::processingUserGesture()) 67 , m_wasUserGesture(UserGestureIndicator::processingUserGesture())
68 { 68 {
69 if (m_wasUserGesture) 69 if (m_wasUserGesture)
70 m_userGestureToken = UserGestureIndicator::currentToken(); 70 m_userGestureToken = UserGestureIndicator::currentToken();
(...skipping 18 matching lines...) Expand all
89 DEFINE_INLINE_VIRTUAL_TRACE() 89 DEFINE_INLINE_VIRTUAL_TRACE()
90 { 90 {
91 visitor->trace(m_originDocument); 91 visitor->trace(m_originDocument);
92 } 92 }
93 93
94 protected: 94 protected:
95 void clearUserGesture() { m_wasUserGesture = false; } 95 void clearUserGesture() { m_wasUserGesture = false; }
96 96
97 private: 97 private:
98 double m_delay; 98 double m_delay;
99 RefPtrWillBeMember<Document> m_originDocument; 99 Member<Document> m_originDocument;
100 bool m_replacesCurrentItem; 100 bool m_replacesCurrentItem;
101 bool m_isLocationChange; 101 bool m_isLocationChange;
102 bool m_wasUserGesture; 102 bool m_wasUserGesture;
103 RefPtr<UserGestureToken> m_userGestureToken; 103 RefPtr<UserGestureToken> m_userGestureToken;
104 }; 104 };
105 105
106 class ScheduledURLNavigation : public ScheduledNavigation { 106 class ScheduledURLNavigation : public ScheduledNavigation {
107 protected: 107 protected:
108 ScheduledURLNavigation(double delay, Document* originDocument, const String& url, bool replacesCurrentItem, bool isLocationChange) 108 ScheduledURLNavigation(double delay, Document* originDocument, const String& url, bool replacesCurrentItem, bool isLocationChange)
109 : ScheduledNavigation(delay, originDocument, replacesCurrentItem, isLoca tionChange) 109 : ScheduledNavigation(delay, originDocument, replacesCurrentItem, isLoca tionChange)
(...skipping 15 matching lines...) Expand all
125 125
126 String url() const { return m_url; } 126 String url() const { return m_url; }
127 127
128 private: 128 private:
129 String m_url; 129 String m_url;
130 ContentSecurityPolicyDisposition m_shouldCheckMainWorldContentSecurityPolicy ; 130 ContentSecurityPolicyDisposition m_shouldCheckMainWorldContentSecurityPolicy ;
131 }; 131 };
132 132
133 class ScheduledRedirect final : public ScheduledURLNavigation { 133 class ScheduledRedirect final : public ScheduledURLNavigation {
134 public: 134 public:
135 static PassOwnPtrWillBeRawPtr<ScheduledRedirect> create(double delay, Docume nt* originDocument, const String& url, bool replacesCurrentItem) 135 static RawPtr<ScheduledRedirect> create(double delay, Document* originDocume nt, const String& url, bool replacesCurrentItem)
136 { 136 {
137 return adoptPtrWillBeNoop(new ScheduledRedirect(delay, originDocument, u rl, replacesCurrentItem)); 137 return new ScheduledRedirect(delay, originDocument, url, replacesCurrent Item);
138 } 138 }
139 139
140 bool shouldStartTimer(LocalFrame* frame) override { return frame->document() ->loadEventFinished(); } 140 bool shouldStartTimer(LocalFrame* frame) override { return frame->document() ->loadEventFinished(); }
141 141
142 void fire(LocalFrame* frame) override 142 void fire(LocalFrame* frame) override
143 { 143 {
144 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or(); 144 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or();
145 FrameLoadRequest request(originDocument(), url(), "_self"); 145 FrameLoadRequest request(originDocument(), url(), "_self");
146 request.setReplacesCurrentItem(replacesCurrentItem()); 146 request.setReplacesCurrentItem(replacesCurrentItem());
147 if (equalIgnoringFragmentIdentifier(frame->document()->url(), request.re sourceRequest().url())) 147 if (equalIgnoringFragmentIdentifier(frame->document()->url(), request.re sourceRequest().url()))
148 request.resourceRequest().setCachePolicy(ValidatingCacheData); 148 request.resourceRequest().setCachePolicy(ValidatingCacheData);
149 request.setClientRedirect(ClientRedirect); 149 request.setClientRedirect(ClientRedirect);
150 frame->loader().load(request); 150 frame->loader().load(request);
151 } 151 }
152 152
153 private: 153 private:
154 ScheduledRedirect(double delay, Document* originDocument, const String& url, bool replacesCurrentItem) 154 ScheduledRedirect(double delay, Document* originDocument, const String& url, bool replacesCurrentItem)
155 : ScheduledURLNavigation(delay, originDocument, url, replacesCurrentItem , false) 155 : ScheduledURLNavigation(delay, originDocument, url, replacesCurrentItem , false)
156 { 156 {
157 clearUserGesture(); 157 clearUserGesture();
158 } 158 }
159 }; 159 };
160 160
161 class ScheduledLocationChange final : public ScheduledURLNavigation { 161 class ScheduledLocationChange final : public ScheduledURLNavigation {
162 public: 162 public:
163 static PassOwnPtrWillBeRawPtr<ScheduledLocationChange> create(Document* orig inDocument, const String& url, bool replacesCurrentItem) 163 static RawPtr<ScheduledLocationChange> create(Document* originDocument, cons t String& url, bool replacesCurrentItem)
164 { 164 {
165 return adoptPtrWillBeNoop(new ScheduledLocationChange(originDocument, ur l, replacesCurrentItem)); 165 return new ScheduledLocationChange(originDocument, url, replacesCurrentI tem);
166 } 166 }
167 167
168 private: 168 private:
169 ScheduledLocationChange(Document* originDocument, const String& url, bool re placesCurrentItem) 169 ScheduledLocationChange(Document* originDocument, const String& url, bool re placesCurrentItem)
170 : ScheduledURLNavigation(0.0, originDocument, url, replacesCurrentItem, !protocolIsJavaScript(url)) { } 170 : ScheduledURLNavigation(0.0, originDocument, url, replacesCurrentItem, !protocolIsJavaScript(url)) { }
171 }; 171 };
172 172
173 class ScheduledReload final : public ScheduledNavigation { 173 class ScheduledReload final : public ScheduledNavigation {
174 public: 174 public:
175 static PassOwnPtrWillBeRawPtr<ScheduledReload> create() 175 static RawPtr<ScheduledReload> create()
176 { 176 {
177 return adoptPtrWillBeNoop(new ScheduledReload); 177 return adoptPtrWillBeNoop(new ScheduledReload);
178 } 178 }
179 179
180 void fire(LocalFrame* frame) override 180 void fire(LocalFrame* frame) override
181 { 181 {
182 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or(); 182 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or();
183 ResourceRequest resourceRequest = 183 ResourceRequest resourceRequest =
184 frame->loader().resourceRequestForReload(FrameLoadTypeReload, KURL() , ClientRedirect); 184 frame->loader().resourceRequestForReload(FrameLoadTypeReload, KURL() , ClientRedirect);
185 if (resourceRequest.isNull()) 185 if (resourceRequest.isNull())
186 return; 186 return;
187 FrameLoadRequest request = FrameLoadRequest(nullptr, resourceRequest); 187 FrameLoadRequest request = FrameLoadRequest(nullptr, resourceRequest);
188 request.setClientRedirect(ClientRedirect); 188 request.setClientRedirect(ClientRedirect);
189 frame->loader().load(request, FrameLoadTypeReload); 189 frame->loader().load(request, FrameLoadTypeReload);
190 } 190 }
191 191
192 private: 192 private:
193 ScheduledReload() 193 ScheduledReload()
194 : ScheduledNavigation(0.0, nullptr, true, true) 194 : ScheduledNavigation(0.0, nullptr, true, true)
195 { 195 {
196 } 196 }
197 }; 197 };
198 198
199 class ScheduledPageBlock final : public ScheduledURLNavigation { 199 class ScheduledPageBlock final : public ScheduledURLNavigation {
200 public: 200 public:
201 static PassOwnPtrWillBeRawPtr<ScheduledPageBlock> create(Document* originDoc ument, const String& url) 201 static RawPtr<ScheduledPageBlock> create(Document* originDocument, const Str ing& url)
202 { 202 {
203 return adoptPtrWillBeNoop(new ScheduledPageBlock(originDocument, url)); 203 return new ScheduledPageBlock(originDocument, url);
204 } 204 }
205 205
206 void fire(LocalFrame* frame) override 206 void fire(LocalFrame* frame) override
207 { 207 {
208 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or(); 208 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or();
209 SubstituteData substituteData(SharedBuffer::create(), "text/plain", "UTF -8", KURL(), ForceSynchronousLoad); 209 SubstituteData substituteData(SharedBuffer::create(), "text/plain", "UTF -8", KURL(), ForceSynchronousLoad);
210 FrameLoadRequest request(originDocument(), url(), substituteData); 210 FrameLoadRequest request(originDocument(), url(), substituteData);
211 request.setReplacesCurrentItem(true); 211 request.setReplacesCurrentItem(true);
212 request.setClientRedirect(ClientRedirect); 212 request.setClientRedirect(ClientRedirect);
213 frame->loader().load(request); 213 frame->loader().load(request);
214 } 214 }
215 private: 215 private:
216 ScheduledPageBlock(Document* originDocument, const String& url) 216 ScheduledPageBlock(Document* originDocument, const String& url)
217 : ScheduledURLNavigation(0.0, originDocument, url, true, true) 217 : ScheduledURLNavigation(0.0, originDocument, url, true, true)
218 { 218 {
219 } 219 }
220 220
221 }; 221 };
222 222
223 class ScheduledFormSubmission final : public ScheduledNavigation { 223 class ScheduledFormSubmission final : public ScheduledNavigation {
224 public: 224 public:
225 static PassOwnPtrWillBeRawPtr<ScheduledFormSubmission> create(Document* docu ment, PassRefPtrWillBeRawPtr<FormSubmission> submission, bool replacesCurrentIte m) 225 static RawPtr<ScheduledFormSubmission> create(Document* document, RawPtr<For mSubmission> submission, bool replacesCurrentItem)
226 { 226 {
227 return adoptPtrWillBeNoop(new ScheduledFormSubmission(document, submissi on, replacesCurrentItem)); 227 return new ScheduledFormSubmission(document, submission, replacesCurrent Item);
228 } 228 }
229 229
230 void fire(LocalFrame* frame) override 230 void fire(LocalFrame* frame) override
231 { 231 {
232 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or(); 232 OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicat or();
233 FrameLoadRequest frameRequest(originDocument()); 233 FrameLoadRequest frameRequest(originDocument());
234 m_submission->populateFrameLoadRequest(frameRequest); 234 m_submission->populateFrameLoadRequest(frameRequest);
235 frameRequest.setReplacesCurrentItem(replacesCurrentItem()); 235 frameRequest.setReplacesCurrentItem(replacesCurrentItem());
236 frameRequest.setTriggeringEvent(m_submission->event()); 236 frameRequest.setTriggeringEvent(m_submission->event());
237 frameRequest.setForm(m_submission->form()); 237 frameRequest.setForm(m_submission->form());
238 frame->loader().load(frameRequest); 238 frame->loader().load(frameRequest);
239 } 239 }
240 240
241 DEFINE_INLINE_VIRTUAL_TRACE() 241 DEFINE_INLINE_VIRTUAL_TRACE()
242 { 242 {
243 visitor->trace(m_submission); 243 visitor->trace(m_submission);
244 ScheduledNavigation::trace(visitor); 244 ScheduledNavigation::trace(visitor);
245 } 245 }
246 246
247 private: 247 private:
248 ScheduledFormSubmission(Document* document, PassRefPtrWillBeRawPtr<FormSubmi ssion> submission, bool replacesCurrentItem) 248 ScheduledFormSubmission(Document* document, RawPtr<FormSubmission> submissio n, bool replacesCurrentItem)
249 : ScheduledNavigation(0, document, replacesCurrentItem, true) 249 : ScheduledNavigation(0, document, replacesCurrentItem, true)
250 , m_submission(submission) 250 , m_submission(submission)
251 { 251 {
252 ASSERT(m_submission->form()); 252 ASSERT(m_submission->form());
253 } 253 }
254 254
255 RefPtrWillBeMember<FormSubmission> m_submission; 255 Member<FormSubmission> m_submission;
256 }; 256 };
257 257
258 NavigationScheduler::NavigationScheduler(LocalFrame* frame) 258 NavigationScheduler::NavigationScheduler(LocalFrame* frame)
259 : m_frame(frame) 259 : m_frame(frame)
260 , m_navigateTaskFactory(CancellableTaskFactory::create(this, &NavigationSche duler::navigateTask)) 260 , m_navigateTaskFactory(CancellableTaskFactory::create(this, &NavigationSche duler::navigateTask))
261 { 261 {
262 } 262 }
263 263
264 NavigationScheduler::~NavigationScheduler() 264 NavigationScheduler::~NavigationScheduler()
265 { 265 {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 schedule(ScheduledLocationChange::create(originDocument, url, replacesCurren tItem)); 343 schedule(ScheduledLocationChange::create(originDocument, url, replacesCurren tItem));
344 } 344 }
345 345
346 void NavigationScheduler::schedulePageBlock(Document* originDocument) 346 void NavigationScheduler::schedulePageBlock(Document* originDocument)
347 { 347 {
348 ASSERT(m_frame->page()); 348 ASSERT(m_frame->page());
349 const KURL& url = m_frame->document()->url(); 349 const KURL& url = m_frame->document()->url();
350 schedule(ScheduledPageBlock::create(originDocument, url)); 350 schedule(ScheduledPageBlock::create(originDocument, url));
351 } 351 }
352 352
353 void NavigationScheduler::scheduleFormSubmission(Document* document, PassRefPtrW illBeRawPtr<FormSubmission> submission) 353 void NavigationScheduler::scheduleFormSubmission(Document* document, RawPtr<Form Submission> submission)
354 { 354 {
355 ASSERT(m_frame->page()); 355 ASSERT(m_frame->page());
356 schedule(ScheduledFormSubmission::create(document, submission, mustReplaceCu rrentItem(m_frame))); 356 schedule(ScheduledFormSubmission::create(document, submission, mustReplaceCu rrentItem(m_frame)));
357 } 357 }
358 358
359 void NavigationScheduler::scheduleReload() 359 void NavigationScheduler::scheduleReload()
360 { 360 {
361 if (!shouldScheduleReload()) 361 if (!shouldScheduleReload())
362 return; 362 return;
363 if (m_frame->document()->url().isEmpty()) 363 if (m_frame->document()->url().isEmpty())
364 return; 364 return;
365 schedule(ScheduledReload::create()); 365 schedule(ScheduledReload::create());
366 } 366 }
367 367
368 void NavigationScheduler::navigateTask() 368 void NavigationScheduler::navigateTask()
369 { 369 {
370 Platform::current()->currentThread()->scheduler()->removePendingNavigation() ; 370 Platform::current()->currentThread()->scheduler()->removePendingNavigation() ;
371 371
372 if (!m_frame->page()) 372 if (!m_frame->page())
373 return; 373 return;
374 if (m_frame->page()->defersLoading()) { 374 if (m_frame->page()->defersLoading()) {
375 InspectorInstrumentation::frameClearedScheduledNavigation(m_frame); 375 InspectorInstrumentation::frameClearedScheduledNavigation(m_frame);
376 return; 376 return;
377 } 377 }
378 378
379 RefPtrWillBeRawPtr<LocalFrame> protect(m_frame.get()); 379 RawPtr<LocalFrame> protect(m_frame.get());
380 380
381 OwnPtrWillBeRawPtr<ScheduledNavigation> redirect(m_redirect.release()); 381 RawPtr<ScheduledNavigation> redirect(m_redirect.release());
382 redirect->fire(m_frame); 382 redirect->fire(m_frame);
383 InspectorInstrumentation::frameClearedScheduledNavigation(m_frame); 383 InspectorInstrumentation::frameClearedScheduledNavigation(m_frame);
384 } 384 }
385 385
386 void NavigationScheduler::schedule(PassOwnPtrWillBeRawPtr<ScheduledNavigation> r edirect) 386 void NavigationScheduler::schedule(RawPtr<ScheduledNavigation> redirect)
387 { 387 {
388 ASSERT(m_frame->page()); 388 ASSERT(m_frame->page());
389 389
390 // In a back/forward navigation, we sometimes restore history state to ifram es, even though the state was generated 390 // In a back/forward navigation, we sometimes restore history state to ifram es, even though the state was generated
391 // dynamically and JS will try to put something different in the iframe. In this case, we will load stale things 391 // dynamically and JS will try to put something different in the iframe. In this case, we will load stale things
392 // and/or confuse the JS when it shortly thereafter tries to schedule a loca tion change. Let the JS have its way. 392 // and/or confuse the JS when it shortly thereafter tries to schedule a loca tion change. Let the JS have its way.
393 // FIXME: This check seems out of place. 393 // FIXME: This check seems out of place.
394 if (!m_frame->loader().stateMachine()->committedFirstRealDocumentLoad() && m _frame->loader().provisionalDocumentLoader()) { 394 if (!m_frame->loader().stateMachine()->committedFirstRealDocumentLoad() && m _frame->loader().provisionalDocumentLoader()) {
395 RefPtrWillBeRawPtr<LocalFrame> protect(m_frame.get()); 395 RawPtr<LocalFrame> protect(m_frame.get());
396 m_frame->loader().stopAllLoaders(); 396 m_frame->loader().stopAllLoaders();
397 if (!m_frame->host()) 397 if (!m_frame->host())
398 return; 398 return;
399 } 399 }
400 400
401 cancel(); 401 cancel();
402 m_redirect = redirect; 402 m_redirect = redirect;
403 startTimer(); 403 startTimer();
404 } 404 }
405 405
(...skipping 26 matching lines...) Expand all
432 m_redirect.clear(); 432 m_redirect.clear();
433 } 433 }
434 434
435 DEFINE_TRACE(NavigationScheduler) 435 DEFINE_TRACE(NavigationScheduler)
436 { 436 {
437 visitor->trace(m_frame); 437 visitor->trace(m_frame);
438 visitor->trace(m_redirect); 438 visitor->trace(m_redirect);
439 } 439 }
440 440
441 } // namespace blink 441 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698