| 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 #include "platform/SharedBuffer.h" | 49 #include "platform/SharedBuffer.h" |
| 50 #include "platform/UserGestureIndicator.h" | 50 #include "platform/UserGestureIndicator.h" |
| 51 #include "platform/scheduler/CancellableTaskFactory.h" | 51 #include "platform/scheduler/CancellableTaskFactory.h" |
| 52 #include "public/platform/Platform.h" | 52 #include "public/platform/Platform.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 FrameNavigationDisabler::FrameNavigationDisabler(LocalFrame* frame) | |
| 60 : m_navigationScheduler(&frame->navigationScheduler()) | |
| 61 { | |
| 62 m_navigationScheduler->disableFrameNavigation(); | |
| 63 } | |
| 64 | |
| 65 FrameNavigationDisabler::~FrameNavigationDisabler() | |
| 66 { | |
| 67 m_navigationScheduler->enableFrameNavigation(); | |
| 68 } | |
| 69 | |
| 70 class ScheduledNavigation : public NoBaseWillBeGarbageCollectedFinalized<Schedul
edNavigation> { | 59 class ScheduledNavigation : public NoBaseWillBeGarbageCollectedFinalized<Schedul
edNavigation> { |
| 71 WTF_MAKE_NONCOPYABLE(ScheduledNavigation); USING_FAST_MALLOC_WILL_BE_REMOVED
(ScheduledNavigation); | 60 WTF_MAKE_NONCOPYABLE(ScheduledNavigation); USING_FAST_MALLOC_WILL_BE_REMOVED
(ScheduledNavigation); |
| 72 public: | 61 public: |
| 73 ScheduledNavigation(double delay, Document* originDocument, bool replacesCur
rentItem, bool isLocationChange) | 62 ScheduledNavigation(double delay, Document* originDocument, bool replacesCur
rentItem, bool isLocationChange) |
| 74 : m_delay(delay) | 63 : m_delay(delay) |
| 75 , m_originDocument(originDocument) | 64 , m_originDocument(originDocument) |
| 76 , m_replacesCurrentItem(replacesCurrentItem) | 65 , m_replacesCurrentItem(replacesCurrentItem) |
| 77 , m_isLocationChange(isLocationChange) | 66 , m_isLocationChange(isLocationChange) |
| 78 , m_wasUserGesture(UserGestureIndicator::processingUserGesture()) | 67 , m_wasUserGesture(UserGestureIndicator::processingUserGesture()) |
| 79 { | 68 { |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 { | 251 { |
| 263 ASSERT(m_submission->form()); | 252 ASSERT(m_submission->form()); |
| 264 } | 253 } |
| 265 | 254 |
| 266 RefPtrWillBeMember<FormSubmission> m_submission; | 255 RefPtrWillBeMember<FormSubmission> m_submission; |
| 267 }; | 256 }; |
| 268 | 257 |
| 269 NavigationScheduler::NavigationScheduler(LocalFrame* frame) | 258 NavigationScheduler::NavigationScheduler(LocalFrame* frame) |
| 270 : m_frame(frame) | 259 : m_frame(frame) |
| 271 , m_navigateTaskFactory(CancellableTaskFactory::create(this, &NavigationSche
duler::navigateTask)) | 260 , m_navigateTaskFactory(CancellableTaskFactory::create(this, &NavigationSche
duler::navigateTask)) |
| 272 , m_navigationDisableCount(0) | |
| 273 { | 261 { |
| 274 } | 262 } |
| 275 | 263 |
| 276 NavigationScheduler::~NavigationScheduler() | 264 NavigationScheduler::~NavigationScheduler() |
| 277 { | 265 { |
| 278 // TODO(alexclarke): Can remove this if oilpan is on since any pending task
should | 266 // TODO(alexclarke): Can remove this if oilpan is on since any pending task
should |
| 279 // keep the NavigationScheduler alive. | 267 // keep the NavigationScheduler alive. |
| 280 if (m_navigateTaskFactory->isPending()) | 268 if (m_navigateTaskFactory->isPending()) |
| 281 Platform::current()->currentThread()->scheduler()->removePendingNavigati
on(); | 269 Platform::current()->currentThread()->scheduler()->removePendingNavigati
on(); |
| 282 } | 270 } |
| 283 | 271 |
| 284 bool NavigationScheduler::locationChangePending() | 272 bool NavigationScheduler::locationChangePending() |
| 285 { | 273 { |
| 286 return m_redirect && m_redirect->isLocationChange(); | 274 return m_redirect && m_redirect->isLocationChange(); |
| 287 } | 275 } |
| 288 | 276 |
| 289 bool NavigationScheduler::isNavigationScheduled() const | 277 bool NavigationScheduler::isNavigationScheduled() const |
| 290 { | 278 { |
| 291 return m_redirect; | 279 return m_redirect; |
| 292 } | 280 } |
| 293 | 281 |
| 294 inline bool NavigationScheduler::shouldScheduleReload() const | 282 inline bool NavigationScheduler::shouldScheduleReload() const |
| 295 { | 283 { |
| 296 return m_frame->page() && isFrameNavigationAllowed() && NavigationDisablerFo
rBeforeUnload::isNavigationAllowed(); | 284 return m_frame->page() && m_frame->isNavigationAllowed() && NavigationDisabl
erForBeforeUnload::isNavigationAllowed(); |
| 297 } | 285 } |
| 298 | 286 |
| 299 inline bool NavigationScheduler::shouldScheduleNavigation(const String& url) con
st | 287 inline bool NavigationScheduler::shouldScheduleNavigation(const String& url) con
st |
| 300 { | 288 { |
| 301 return m_frame->page() && isFrameNavigationAllowed() && (protocolIsJavaScrip
t(url) || NavigationDisablerForBeforeUnload::isNavigationAllowed()); | 289 return m_frame->page() && m_frame->isNavigationAllowed() && (protocolIsJavaS
cript(url) || NavigationDisablerForBeforeUnload::isNavigationAllowed()); |
| 302 } | 290 } |
| 303 | 291 |
| 304 void NavigationScheduler::scheduleRedirect(double delay, const String& url) | 292 void NavigationScheduler::scheduleRedirect(double delay, const String& url) |
| 305 { | 293 { |
| 306 if (!shouldScheduleNavigation(url)) | 294 if (!shouldScheduleNavigation(url)) |
| 307 return; | 295 return; |
| 308 if (delay < 0 || delay > INT_MAX / 1000) | 296 if (delay < 0 || delay > INT_MAX / 1000) |
| 309 return; | 297 return; |
| 310 if (url.isEmpty()) | 298 if (url.isEmpty()) |
| 311 return; | 299 return; |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 m_redirect.clear(); | 432 m_redirect.clear(); |
| 445 } | 433 } |
| 446 | 434 |
| 447 DEFINE_TRACE(NavigationScheduler) | 435 DEFINE_TRACE(NavigationScheduler) |
| 448 { | 436 { |
| 449 visitor->trace(m_frame); | 437 visitor->trace(m_frame); |
| 450 visitor->trace(m_redirect); | 438 visitor->trace(m_redirect); |
| 451 } | 439 } |
| 452 | 440 |
| 453 } // namespace blink | 441 } // namespace blink |
| OLD | NEW |