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

Side by Side Diff: Source/platform/UserGestureIndicator.cpp

Issue 239963005: Fixes in UserGestureIndicator (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Now with test Created 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/web/tests/WebUserGestureTokenTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2010 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 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 123
124 // We overwrite s_state only if the caller is definite about the gesture sta te. 124 // We overwrite s_state only if the caller is definite about the gesture sta te.
125 if (isDefinite(state)) { 125 if (isDefinite(state)) {
126 if (!s_topmostIndicator) { 126 if (!s_topmostIndicator) {
127 s_topmostIndicator = this; 127 s_topmostIndicator = this;
128 m_token = GestureToken::create(); 128 m_token = GestureToken::create();
129 } else { 129 } else {
130 m_token = s_topmostIndicator->currentToken(); 130 m_token = s_topmostIndicator->currentToken();
131 } 131 }
132 s_state = state; 132 s_state = state;
133 if (state == DefinitelyProcessingNewUserGesture || state == DefinitelyPr ocessingUserGesture)
134 s_processedUserGestureInPast = true;
135 } 133 }
136 134
137 if (state == DefinitelyProcessingNewUserGesture) 135 if (state == DefinitelyProcessingNewUserGesture) {
138 static_cast<GestureToken*>(m_token.get())->addGesture(); 136 static_cast<GestureToken*>(m_token.get())->addGesture();
139 else if (state == DefinitelyProcessingUserGesture && s_topmostIndicator == t his) 137 s_processedUserGestureInPast = true;
138 } else if (state == DefinitelyProcessingUserGesture && s_topmostIndicator == this) {
140 static_cast<GestureToken*>(m_token.get())->addGesture(); 139 static_cast<GestureToken*>(m_token.get())->addGesture();
140 s_processedUserGestureInPast = true;
141 }
141 ASSERT(isDefinite(s_state)); 142 ASSERT(isDefinite(s_state));
142 } 143 }
143 144
144 UserGestureIndicator::UserGestureIndicator(PassRefPtr<UserGestureToken> token) 145 UserGestureIndicator::UserGestureIndicator(PassRefPtr<UserGestureToken> token)
145 : m_previousState(s_state) 146 : m_previousState(s_state)
146 { 147 {
147 // Silently ignore UserGestureIndicators on non-main threads. 148 // Silently ignore UserGestureIndicators on non-main threads.
148 if (!isMainThread()) 149 if (!isMainThread())
149 return; 150 return;
150 151
151 if (token) { 152 if (token) {
152 static_cast<GestureToken*>(token.get())->resetTimestamp(); 153 static_cast<GestureToken*>(token.get())->resetTimestamp();
153 if (!s_topmostIndicator) { 154 if (!s_topmostIndicator) {
154 s_topmostIndicator = this; 155 s_topmostIndicator = this;
155 m_token = token; 156 m_token = token;
156 } else { 157 } else {
157 m_token = s_topmostIndicator->currentToken(); 158 m_token = s_topmostIndicator->currentToken();
158 if (static_cast<GestureToken*>(token.get())->hasGestures()) { 159 if (static_cast<GestureToken*>(token.get())->hasGestures()) {
160 s_processedUserGestureInPast = true;
jochen (gone - plz use gerrit) 2014/04/17 08:25:38 here we're not really adding a gesture, we're just
vabr (Chromium) 2014/04/17 13:55:56 Good point, I will remove the line. The flag was f
159 static_cast<GestureToken*>(m_token.get())->addGesture(); 161 static_cast<GestureToken*>(m_token.get())->addGesture();
160 static_cast<GestureToken*>(token.get())->consumeGesture(); 162 static_cast<GestureToken*>(token.get())->consumeGesture();
161 } 163 }
162 } 164 }
163 s_state = DefinitelyProcessingUserGesture; 165 s_state = DefinitelyProcessingUserGesture;
164 s_processedUserGestureInPast = true;
165 } 166 }
166 167
167 ASSERT(isDefinite(s_state)); 168 ASSERT(isDefinite(s_state));
168 } 169 }
169 170
170 UserGestureIndicator::~UserGestureIndicator() 171 UserGestureIndicator::~UserGestureIndicator()
171 { 172 {
172 if (!isMainThread()) 173 if (!isMainThread())
173 return; 174 return;
174 s_state = m_previousState; 175 s_state = m_previousState;
(...skipping 19 matching lines...) Expand all
194 UserGestureToken* UserGestureIndicator::currentToken() 195 UserGestureToken* UserGestureIndicator::currentToken()
195 { 196 {
196 if (!isMainThread() || !s_topmostIndicator) 197 if (!isMainThread() || !s_topmostIndicator)
197 return 0; 198 return 0;
198 return s_topmostIndicator->m_token.get(); 199 return s_topmostIndicator->m_token.get();
199 } 200 }
200 201
201 void UserGestureIndicator::clearProcessedUserGestureInPast() 202 void UserGestureIndicator::clearProcessedUserGestureInPast()
202 { 203 {
203 if (isMainThread()) 204 if (isMainThread())
204 s_processedUserGestureInPast = true; 205 s_processedUserGestureInPast = false;
205 } 206 }
206 207
207 bool UserGestureIndicator::processedUserGestureInPast() 208 bool UserGestureIndicator::processedUserGestureInPast()
208 { 209 {
209 if (!isMainThread()) 210 if (!isMainThread())
210 return false; 211 return false;
211 return s_processedUserGestureInPast; 212 return s_processedUserGestureInPast;
212 } 213 }
213 214
214 UserGestureIndicatorDisabler::UserGestureIndicatorDisabler() 215 UserGestureIndicatorDisabler::UserGestureIndicatorDisabler()
215 : m_savedState(UserGestureIndicator::s_state) 216 : m_savedState(UserGestureIndicator::s_state)
216 , m_savedIndicator(UserGestureIndicator::s_topmostIndicator) 217 , m_savedIndicator(UserGestureIndicator::s_topmostIndicator)
217 { 218 {
218 RELEASE_ASSERT(isMainThread()); 219 RELEASE_ASSERT(isMainThread());
219 UserGestureIndicator::s_state = DefinitelyNotProcessingUserGesture; 220 UserGestureIndicator::s_state = DefinitelyNotProcessingUserGesture;
220 UserGestureIndicator::s_topmostIndicator = 0; 221 UserGestureIndicator::s_topmostIndicator = 0;
221 } 222 }
222 223
223 UserGestureIndicatorDisabler::~UserGestureIndicatorDisabler() 224 UserGestureIndicatorDisabler::~UserGestureIndicatorDisabler()
224 { 225 {
225 RELEASE_ASSERT(isMainThread()); 226 RELEASE_ASSERT(isMainThread());
226 UserGestureIndicator::s_state = m_savedState; 227 UserGestureIndicator::s_state = m_savedState;
227 UserGestureIndicator::s_topmostIndicator = m_savedIndicator; 228 UserGestureIndicator::s_topmostIndicator = m_savedIndicator;
228 } 229 }
229 230
230 } 231 }
OLDNEW
« no previous file with comments | « no previous file | Source/web/tests/WebUserGestureTokenTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698