OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 // second at most. | 61 // second at most. |
62 return 1.0; | 62 return 1.0; |
63 } | 63 } |
64 | 64 |
65 double DOMTimer::visiblePageAlignmentInterval() | 65 double DOMTimer::visiblePageAlignmentInterval() |
66 { | 66 { |
67 // Alignment does not apply to timers on visible pages. | 67 // Alignment does not apply to timers on visible pages. |
68 return 0; | 68 return 0; |
69 } | 69 } |
70 | 70 |
71 int DOMTimer::install(ScriptExecutionContext* context, PassOwnPtr<ScheduledActio
n> action, int timeout, bool singleShot) | 71 int DOMTimer::install(ScriptExecutionContext* context, Type type, PassOwnPtr<Sch
eduledAction> action, int timeout) |
72 { | 72 { |
73 int timeoutID = context->installNewTimeout(action, timeout, singleShot); | 73 int timeoutID = context->installNewTimeout(type, action, timeout); |
74 InspectorInstrumentation::didInstallTimer(context, timeoutID, timeout, singl
eShot); | 74 InspectorInstrumentation::didInstallTimer(context, timeoutID, timeout, type
== TimeoutType); // FIXME: Fix inspector so it can accept a DOMTimer::Type value
. |
75 return timeoutID; | 75 return timeoutID; |
76 } | 76 } |
77 | 77 |
78 void DOMTimer::removeByID(ScriptExecutionContext* context, int timeoutID) | 78 void DOMTimer::removeByIDIfTypeMatches(ScriptExecutionContext* context, Type typ
e, int timeoutID) |
79 { | 79 { |
80 context->removeTimeoutByID(timeoutID); | 80 // FIXME: Invoke didRemoveTimer() if a timer is actually removed. |
| 81 context->removeTimeoutByIDIfTypeMatches(type, timeoutID); |
81 InspectorInstrumentation::didRemoveTimer(context, timeoutID); | 82 InspectorInstrumentation::didRemoveTimer(context, timeoutID); |
82 } | 83 } |
83 | 84 |
84 DOMTimer::DOMTimer(ScriptExecutionContext* context, PassOwnPtr<ScheduledAction>
action, int interval, bool singleShot, int timeoutID) | 85 DOMTimer::DOMTimer(ScriptExecutionContext* context, Type type, PassOwnPtr<Schedu
ledAction> action, int interval, int timeoutID) |
85 : SuspendableTimer(context) | 86 : SuspendableTimer(context) |
| 87 , m_type(type) |
86 , m_timeoutID(timeoutID) | 88 , m_timeoutID(timeoutID) |
87 , m_nestingLevel(timerNestingLevel + 1) | 89 , m_nestingLevel(timerNestingLevel + 1) |
88 , m_action(action) | 90 , m_action(action) |
89 { | 91 { |
90 ASSERT(timeoutID > 0); | 92 ASSERT(timeoutID > 0); |
91 if (shouldForwardUserGesture(interval, m_nestingLevel)) | 93 if (shouldForwardUserGesture(interval, m_nestingLevel)) |
92 m_userGestureToken = UserGestureIndicator::currentToken(); | 94 m_userGestureToken = UserGestureIndicator::currentToken(); |
93 | 95 |
94 double intervalMilliseconds = max(oneMillisecond, interval * oneMillisecond)
; | 96 double intervalMilliseconds = max(oneMillisecond, interval * oneMillisecond)
; |
95 if (intervalMilliseconds < minimumInterval && m_nestingLevel >= maxTimerNest
ingLevel) | 97 if (intervalMilliseconds < minimumInterval && m_nestingLevel >= maxTimerNest
ingLevel) |
96 intervalMilliseconds = minimumInterval; | 98 intervalMilliseconds = minimumInterval; |
97 if (singleShot) | 99 switch (type) { |
| 100 case TimeoutType: |
98 startOneShot(intervalMilliseconds); | 101 startOneShot(intervalMilliseconds); |
99 else | 102 break; |
| 103 case IntervalType: |
100 startRepeating(intervalMilliseconds); | 104 startRepeating(intervalMilliseconds); |
| 105 break; |
| 106 } |
101 } | 107 } |
102 | 108 |
103 DOMTimer::~DOMTimer() | 109 DOMTimer::~DOMTimer() |
104 { | 110 { |
105 } | 111 } |
106 | 112 |
107 int DOMTimer::timeoutID() const | 113 int DOMTimer::timeoutID() const |
108 { | 114 { |
109 return m_timeoutID; | 115 return m_timeoutID; |
110 } | 116 } |
111 | 117 |
| 118 DOMTimer::Type DOMTimer::type() const |
| 119 { |
| 120 return m_type; |
| 121 } |
| 122 |
112 void DOMTimer::fired() | 123 void DOMTimer::fired() |
113 { | 124 { |
114 ScriptExecutionContext* context = scriptExecutionContext(); | 125 ScriptExecutionContext* context = scriptExecutionContext(); |
115 timerNestingLevel = m_nestingLevel; | 126 timerNestingLevel = m_nestingLevel; |
116 ASSERT(!context->activeDOMObjectsAreSuspended()); | 127 ASSERT(!context->activeDOMObjectsAreSuspended()); |
117 // Only the first execution of a multi-shot timer should get an affirmative
user gesture indicator. | 128 // Only the first execution of a multi-shot timer should get an affirmative
user gesture indicator. |
118 UserGestureIndicator gestureIndicator(m_userGestureToken.release()); | 129 UserGestureIndicator gestureIndicator(m_userGestureToken.release()); |
119 | 130 |
120 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willFireTi
mer(context, m_timeoutID); | 131 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willFireTi
mer(context, m_timeoutID); |
121 | 132 |
(...skipping 10 matching lines...) Expand all Loading... |
132 | 143 |
133 InspectorInstrumentation::didFireTimer(cookie); | 144 InspectorInstrumentation::didFireTimer(cookie); |
134 | 145 |
135 return; | 146 return; |
136 } | 147 } |
137 | 148 |
138 // Delete timer before executing the action for one-shot timers. | 149 // Delete timer before executing the action for one-shot timers. |
139 OwnPtr<ScheduledAction> action = m_action.release(); | 150 OwnPtr<ScheduledAction> action = m_action.release(); |
140 | 151 |
141 // This timer is being deleted; no access to member variables allowed after
this point. | 152 // This timer is being deleted; no access to member variables allowed after
this point. |
142 context->removeTimeoutByID(m_timeoutID); | 153 bool removed = context->removeTimeoutByIDIfTypeMatches(m_type, m_timeoutID); |
| 154 ASSERT_UNUSED(removed, removed); |
143 | 155 |
144 action->execute(context); | 156 action->execute(context); |
145 | 157 |
146 InspectorInstrumentation::didFireTimer(cookie); | 158 InspectorInstrumentation::didFireTimer(cookie); |
147 | 159 |
148 timerNestingLevel = 0; | 160 timerNestingLevel = 0; |
149 } | 161 } |
150 | 162 |
151 void DOMTimer::contextDestroyed() | 163 void DOMTimer::contextDestroyed() |
152 { | 164 { |
(...skipping 18 matching lines...) Expand all Loading... |
171 return fireTime; | 183 return fireTime; |
172 | 184 |
173 double alignedTime = ceil(fireTime / alignmentInterval) * alignmentInter
val; | 185 double alignedTime = ceil(fireTime / alignmentInterval) * alignmentInter
val; |
174 return alignedTime; | 186 return alignedTime; |
175 } | 187 } |
176 | 188 |
177 return fireTime; | 189 return fireTime; |
178 } | 190 } |
179 | 191 |
180 } // namespace WebCore | 192 } // namespace WebCore |
OLD | NEW |