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

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

Issue 235983016: Add support for setting password value gated on user's gesture in a page (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: OVERRIDE added 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 | « Source/platform/UserGestureIndicator.h ('k') | Source/web/WebViewImpl.h » ('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 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 105
106 } 106 }
107 107
108 static bool isDefinite(ProcessingUserGestureState state) 108 static bool isDefinite(ProcessingUserGestureState state)
109 { 109 {
110 return state == DefinitelyProcessingNewUserGesture || state == DefinitelyPro cessingUserGesture || state == DefinitelyNotProcessingUserGesture; 110 return state == DefinitelyProcessingNewUserGesture || state == DefinitelyPro cessingUserGesture || state == DefinitelyNotProcessingUserGesture;
111 } 111 }
112 112
113 ProcessingUserGestureState UserGestureIndicator::s_state = DefinitelyNotProcessi ngUserGesture; 113 ProcessingUserGestureState UserGestureIndicator::s_state = DefinitelyNotProcessi ngUserGesture;
114 UserGestureIndicator* UserGestureIndicator::s_topmostIndicator = 0; 114 UserGestureIndicator* UserGestureIndicator::s_topmostIndicator = 0;
115 bool UserGestureIndicator::s_processedUserGestureInPast = false;
115 116
116 UserGestureIndicator::UserGestureIndicator(ProcessingUserGestureState state) 117 UserGestureIndicator::UserGestureIndicator(ProcessingUserGestureState state)
117 : m_previousState(s_state) 118 : m_previousState(s_state)
118 { 119 {
119 // Silently ignore UserGestureIndicators on non-main threads. 120 // Silently ignore UserGestureIndicators on non-main threads.
120 if (!isMainThread()) 121 if (!isMainThread())
121 return; 122 return;
122 123
123 // 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.
124 if (isDefinite(state)) { 125 if (isDefinite(state)) {
125 if (!s_topmostIndicator) { 126 if (!s_topmostIndicator) {
126 s_topmostIndicator = this; 127 s_topmostIndicator = this;
127 m_token = GestureToken::create(); 128 m_token = GestureToken::create();
128 } else { 129 } else {
129 m_token = s_topmostIndicator->currentToken(); 130 m_token = s_topmostIndicator->currentToken();
130 } 131 }
131 s_state = state; 132 s_state = state;
133 if (state == DefinitelyProcessingNewUserGesture || state == DefinitelyPr ocessingUserGesture)
134 s_processedUserGestureInPast = true;
jochen (gone - plz use gerrit) 2014/04/16 14:05:16 i think you only want to do this when we actually
vabr (Chromium) 2014/04/16 16:24:16 Done.
132 } 135 }
133 136
134 if (state == DefinitelyProcessingNewUserGesture) 137 if (state == DefinitelyProcessingNewUserGesture)
135 static_cast<GestureToken*>(m_token.get())->addGesture(); 138 static_cast<GestureToken*>(m_token.get())->addGesture();
136 else if (state == DefinitelyProcessingUserGesture && s_topmostIndicator == t his) 139 else if (state == DefinitelyProcessingUserGesture && s_topmostIndicator == t his)
137 static_cast<GestureToken*>(m_token.get())->addGesture(); 140 static_cast<GestureToken*>(m_token.get())->addGesture();
138 ASSERT(isDefinite(s_state)); 141 ASSERT(isDefinite(s_state));
139 } 142 }
140 143
141 UserGestureIndicator::UserGestureIndicator(PassRefPtr<UserGestureToken> token) 144 UserGestureIndicator::UserGestureIndicator(PassRefPtr<UserGestureToken> token)
142 : m_previousState(s_state) 145 : m_previousState(s_state)
143 { 146 {
144 // Silently ignore UserGestureIndicators on non-main threads. 147 // Silently ignore UserGestureIndicators on non-main threads.
145 if (!isMainThread()) 148 if (!isMainThread())
146 return; 149 return;
147 150
148 if (token) { 151 if (token) {
149 static_cast<GestureToken*>(token.get())->resetTimestamp(); 152 static_cast<GestureToken*>(token.get())->resetTimestamp();
150 if (!s_topmostIndicator) { 153 if (!s_topmostIndicator) {
151 s_topmostIndicator = this; 154 s_topmostIndicator = this;
152 m_token = token; 155 m_token = token;
153 } else { 156 } else {
154 m_token = s_topmostIndicator->currentToken(); 157 m_token = s_topmostIndicator->currentToken();
155 if (static_cast<GestureToken*>(token.get())->hasGestures()) { 158 if (static_cast<GestureToken*>(token.get())->hasGestures()) {
156 static_cast<GestureToken*>(m_token.get())->addGesture(); 159 static_cast<GestureToken*>(m_token.get())->addGesture();
157 static_cast<GestureToken*>(token.get())->consumeGesture(); 160 static_cast<GestureToken*>(token.get())->consumeGesture();
158 } 161 }
159 } 162 }
160 s_state = DefinitelyProcessingUserGesture; 163 s_state = DefinitelyProcessingUserGesture;
164 s_processedUserGestureInPast = true;
161 } 165 }
162 166
163 ASSERT(isDefinite(s_state)); 167 ASSERT(isDefinite(s_state));
164 } 168 }
165 169
166 UserGestureIndicator::~UserGestureIndicator() 170 UserGestureIndicator::~UserGestureIndicator()
167 { 171 {
168 if (!isMainThread()) 172 if (!isMainThread())
169 return; 173 return;
170 s_state = m_previousState; 174 s_state = m_previousState;
(...skipping 16 matching lines...) Expand all
187 return static_cast<GestureToken*>(s_topmostIndicator->currentToken())->consu meGesture(); 191 return static_cast<GestureToken*>(s_topmostIndicator->currentToken())->consu meGesture();
188 } 192 }
189 193
190 UserGestureToken* UserGestureIndicator::currentToken() 194 UserGestureToken* UserGestureIndicator::currentToken()
191 { 195 {
192 if (!isMainThread() || !s_topmostIndicator) 196 if (!isMainThread() || !s_topmostIndicator)
193 return 0; 197 return 0;
194 return s_topmostIndicator->m_token.get(); 198 return s_topmostIndicator->m_token.get();
195 } 199 }
196 200
201 void UserGestureIndicator::clearProcessedUserGestureInPast()
202 {
203 if (isMainThread())
204 s_processedUserGestureInPast = true;
jochen (gone - plz use gerrit) 2014/04/16 14:05:16 false?
vabr (Chromium) 2014/04/16 16:24:16 True! :) (Thanks for catching this!)
205 }
206
207 bool UserGestureIndicator::processedUserGestureInPast()
208 {
209 if (!isMainThread())
210 return false;
211 return s_processedUserGestureInPast;
212 }
213
197 UserGestureIndicatorDisabler::UserGestureIndicatorDisabler() 214 UserGestureIndicatorDisabler::UserGestureIndicatorDisabler()
198 : m_savedState(UserGestureIndicator::s_state) 215 : m_savedState(UserGestureIndicator::s_state)
199 , m_savedIndicator(UserGestureIndicator::s_topmostIndicator) 216 , m_savedIndicator(UserGestureIndicator::s_topmostIndicator)
200 { 217 {
201 RELEASE_ASSERT(isMainThread()); 218 RELEASE_ASSERT(isMainThread());
202 UserGestureIndicator::s_state = DefinitelyNotProcessingUserGesture; 219 UserGestureIndicator::s_state = DefinitelyNotProcessingUserGesture;
203 UserGestureIndicator::s_topmostIndicator = 0; 220 UserGestureIndicator::s_topmostIndicator = 0;
204 } 221 }
205 222
206 UserGestureIndicatorDisabler::~UserGestureIndicatorDisabler() 223 UserGestureIndicatorDisabler::~UserGestureIndicatorDisabler()
207 { 224 {
208 RELEASE_ASSERT(isMainThread()); 225 RELEASE_ASSERT(isMainThread());
209 UserGestureIndicator::s_state = m_savedState; 226 UserGestureIndicator::s_state = m_savedState;
210 UserGestureIndicator::s_topmostIndicator = m_savedIndicator; 227 UserGestureIndicator::s_topmostIndicator = m_savedIndicator;
211 } 228 }
212 229
213 } 230 }
OLDNEW
« no previous file with comments | « Source/platform/UserGestureIndicator.h ('k') | Source/web/WebViewImpl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698