| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 3 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
| 4 * Copyright (C) 2009 Adam Barth. All rights reserved. | 4 * Copyright (C) 2009 Adam Barth. All rights reserved. |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * | 9 * |
| 10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 #ifndef NavigationScheduler_h | 31 #ifndef NavigationScheduler_h |
| 32 #define NavigationScheduler_h | 32 #define NavigationScheduler_h |
| 33 | 33 |
| 34 #include "core/CoreExport.h" | 34 #include "core/CoreExport.h" |
| 35 #include "platform/Timer.h" | |
| 36 #include "platform/heap/Handle.h" | 35 #include "platform/heap/Handle.h" |
| 37 #include "platform/scheduler/CancellableTaskFactory.h" | |
| 38 #include "wtf/Forward.h" | 36 #include "wtf/Forward.h" |
| 39 #include "wtf/HashMap.h" | 37 #include "wtf/HashMap.h" |
| 40 #include "wtf/Noncopyable.h" | 38 #include "wtf/Noncopyable.h" |
| 41 #include "wtf/OwnPtr.h" | 39 #include "wtf/OwnPtr.h" |
| 42 #include "wtf/PassOwnPtr.h" | 40 #include "wtf/PassOwnPtr.h" |
| 43 #include "wtf/PassRefPtr.h" | 41 #include "wtf/PassRefPtr.h" |
| 44 #include "wtf/text/WTFString.h" | 42 #include "wtf/text/WTFString.h" |
| 45 | 43 |
| 46 namespace blink { | 44 namespace blink { |
| 47 | 45 |
| 46 class CancellableTaskFactory; |
| 48 class Document; | 47 class Document; |
| 49 class FormSubmission; | 48 class FormSubmission; |
| 50 class LocalFrame; | 49 class LocalFrame; |
| 51 class NavigationScheduler; | |
| 52 class ScheduledNavigation; | 50 class ScheduledNavigation; |
| 53 | 51 |
| 54 class NavigationDisablerForBeforeUnload { | 52 class CORE_EXPORT NavigationScheduler final : public NoBaseWillBeGarbageCollecte
dFinalized<NavigationScheduler> { |
| 55 WTF_MAKE_NONCOPYABLE(NavigationDisablerForBeforeUnload); | 53 WTF_MAKE_NONCOPYABLE(NavigationScheduler); |
| 56 STACK_ALLOCATED(); | 54 WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(NavigationScheduler); |
| 57 public: | 55 public: |
| 58 NavigationDisablerForBeforeUnload() | 56 static PassOwnPtrWillBeRawPtr<NavigationScheduler> create(LocalFrame* frame) |
| 59 { | 57 { |
| 60 s_navigationDisableCount++; | 58 return adoptPtrWillBeNoop(new NavigationScheduler(frame)); |
| 61 } | 59 } |
| 62 ~NavigationDisablerForBeforeUnload() | |
| 63 { | |
| 64 ASSERT(s_navigationDisableCount); | |
| 65 s_navigationDisableCount--; | |
| 66 } | |
| 67 static bool isNavigationAllowed() { return !s_navigationDisableCount; } | |
| 68 | 60 |
| 69 private: | |
| 70 static unsigned s_navigationDisableCount; | |
| 71 }; | |
| 72 | |
| 73 class FrameNavigationDisabler { | |
| 74 WTF_MAKE_NONCOPYABLE(FrameNavigationDisabler); | |
| 75 STACK_ALLOCATED(); | |
| 76 public: | |
| 77 explicit FrameNavigationDisabler(LocalFrame*); | |
| 78 ~FrameNavigationDisabler(); | |
| 79 | |
| 80 private: | |
| 81 FrameNavigationDisabler() = delete; | |
| 82 | |
| 83 NavigationScheduler& m_navigationScheduler; | |
| 84 }; | |
| 85 | |
| 86 class CORE_EXPORT NavigationScheduler final { | |
| 87 WTF_MAKE_NONCOPYABLE(NavigationScheduler); | |
| 88 DISALLOW_ALLOCATION(); | |
| 89 public: | |
| 90 explicit NavigationScheduler(LocalFrame*); | |
| 91 ~NavigationScheduler(); | 61 ~NavigationScheduler(); |
| 92 | 62 |
| 93 bool locationChangePending(); | 63 bool locationChangePending(); |
| 94 bool isNavigationScheduled() const; | 64 bool isNavigationScheduled() const; |
| 95 | 65 |
| 96 void scheduleRedirect(double delay, const String& url); | 66 void scheduleRedirect(double delay, const String& url); |
| 97 void scheduleLocationChange(Document*, const String& url, bool replacesCurre
ntItem = true); | 67 void scheduleLocationChange(Document*, const String& url, bool replacesCurre
ntItem = true); |
| 98 void schedulePageBlock(Document*); | 68 void schedulePageBlock(Document*); |
| 99 void scheduleFormSubmission(Document*, PassRefPtrWillBeRawPtr<FormSubmission
>); | 69 void scheduleFormSubmission(Document*, PassRefPtrWillBeRawPtr<FormSubmission
>); |
| 100 void scheduleReload(); | 70 void scheduleReload(); |
| 101 | 71 |
| 102 void startTimer(); | 72 void startTimer(); |
| 103 void cancel(); | 73 void cancel(); |
| 104 | 74 |
| 105 DECLARE_TRACE(); | 75 DECLARE_TRACE(); |
| 106 | 76 |
| 107 private: | 77 private: |
| 108 friend class FrameNavigationDisabler; | 78 friend class FrameNavigationDisabler; |
| 79 explicit NavigationScheduler(LocalFrame*); |
| 109 | 80 |
| 110 void disableFrameNavigation() { ++m_navigationDisableCount; } | 81 void disableFrameNavigation() { ++m_navigationDisableCount; } |
| 111 void enableFrameNavigation() { --m_navigationDisableCount; } | 82 void enableFrameNavigation() { --m_navigationDisableCount; } |
| 112 bool isFrameNavigationAllowed() const { return !m_navigationDisableCount; } | 83 bool isFrameNavigationAllowed() const { return !m_navigationDisableCount; } |
| 113 | 84 |
| 114 bool shouldScheduleReload() const; | 85 bool shouldScheduleReload() const; |
| 115 bool shouldScheduleNavigation(const String& url) const; | 86 bool shouldScheduleNavigation(const String& url) const; |
| 116 | 87 |
| 117 void navigateTask(); | 88 void navigateTask(); |
| 118 void schedule(PassOwnPtrWillBeRawPtr<ScheduledNavigation>); | 89 void schedule(PassOwnPtrWillBeRawPtr<ScheduledNavigation>); |
| 119 | 90 |
| 120 static bool mustReplaceCurrentItem(LocalFrame* targetFrame); | 91 static bool mustReplaceCurrentItem(LocalFrame* targetFrame); |
| 121 | 92 |
| 122 RawPtrWillBeMember<LocalFrame> m_frame; | 93 RawPtrWillBeMember<LocalFrame> m_frame; |
| 123 CancellableTaskFactory m_navigateTaskFactory; | 94 OwnPtr<CancellableTaskFactory> m_navigateTaskFactory; |
| 124 OwnPtrWillBeMember<ScheduledNavigation> m_redirect; | 95 OwnPtrWillBeMember<ScheduledNavigation> m_redirect; |
| 125 int m_navigationDisableCount; | 96 int m_navigationDisableCount; |
| 126 }; | 97 }; |
| 127 | 98 |
| 99 class NavigationDisablerForBeforeUnload { |
| 100 WTF_MAKE_NONCOPYABLE(NavigationDisablerForBeforeUnload); |
| 101 STACK_ALLOCATED(); |
| 102 public: |
| 103 NavigationDisablerForBeforeUnload() |
| 104 { |
| 105 s_navigationDisableCount++; |
| 106 } |
| 107 ~NavigationDisablerForBeforeUnload() |
| 108 { |
| 109 ASSERT(s_navigationDisableCount); |
| 110 s_navigationDisableCount--; |
| 111 } |
| 112 static bool isNavigationAllowed() { return !s_navigationDisableCount; } |
| 113 |
| 114 private: |
| 115 static unsigned s_navigationDisableCount; |
| 116 }; |
| 117 |
| 118 class FrameNavigationDisabler { |
| 119 WTF_MAKE_NONCOPYABLE(FrameNavigationDisabler); |
| 120 STACK_ALLOCATED(); |
| 121 public: |
| 122 explicit FrameNavigationDisabler(LocalFrame*); |
| 123 ~FrameNavigationDisabler(); |
| 124 |
| 125 private: |
| 126 RawPtrWillBeMember<NavigationScheduler> m_navigationScheduler; |
| 127 }; |
| 128 |
| 128 } // namespace blink | 129 } // namespace blink |
| 129 | 130 |
| 130 #endif // NavigationScheduler_h | 131 #endif // NavigationScheduler_h |
| OLD | NEW |