1*6777b538SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_TEST_IOS_WAIT_UTIL_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_TEST_IOS_WAIT_UTIL_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #import <Foundation/Foundation.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "base/ios/block_types.h" 11*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h" 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker namespace base::test::ios { 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker // Constant for UI wait loop. 16*6777b538SAndroid Build Coastguard Worker constexpr TimeDelta kSpinDelaySeconds = Milliseconds(10); 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker // Constant for timeout while waiting for UI element. 19*6777b538SAndroid Build Coastguard Worker constexpr TimeDelta kWaitForUIElementTimeout = Seconds(4); 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker // Constant for timeout while waiting for JavaScript completion. 22*6777b538SAndroid Build Coastguard Worker constexpr TimeDelta kWaitForJSCompletionTimeout = Seconds(6); 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker // Constant for timeout while waiting for a download to complete. 25*6777b538SAndroid Build Coastguard Worker constexpr TimeDelta kWaitForDownloadTimeout = Seconds(10); 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker // Constant for timeout while waiting for a pageload to complete. 28*6777b538SAndroid Build Coastguard Worker constexpr TimeDelta kWaitForPageLoadTimeout = Seconds(10); 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker // Constant for timeout while waiting for a generic action to complete. 31*6777b538SAndroid Build Coastguard Worker constexpr TimeDelta kWaitForActionTimeout = Seconds(10); 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker // Constant for timeout while waiting for clear browsing data. It seems this 34*6777b538SAndroid Build Coastguard Worker // can take a very long time on the bots when running simulators in parallel. 35*6777b538SAndroid Build Coastguard Worker // TODO(crbug.com/993513): Investigate why this is sometimes very slow. 36*6777b538SAndroid Build Coastguard Worker constexpr TimeDelta kWaitForClearBrowsingDataTimeout = Seconds(45); 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker // Constant for timeout while waiting for cookies operations to complete. 39*6777b538SAndroid Build Coastguard Worker constexpr TimeDelta kWaitForCookiesTimeout = Seconds(4); 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker // Constant for timeout while waiting for a file operation to complete. 42*6777b538SAndroid Build Coastguard Worker constexpr TimeDelta kWaitForFileOperationTimeout = Seconds(2); 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker // Returns true when condition() becomes true, otherwise returns false after 45*6777b538SAndroid Build Coastguard Worker // |timeout|. Repetitively runs the current NSRunLoop and the current 46*6777b538SAndroid Build Coastguard Worker // MessageLoop (if |run_message_loop| is true). Passing |run_message_loop| true 47*6777b538SAndroid Build Coastguard Worker // only makes sense in unit tests. 48*6777b538SAndroid Build Coastguard Worker [[nodiscard]] bool WaitUntilConditionOrTimeout(TimeDelta timeout, 49*6777b538SAndroid Build Coastguard Worker bool run_message_loop, 50*6777b538SAndroid Build Coastguard Worker ConditionBlock condition); 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker // Same as above but `run_message_loop` is false. 53*6777b538SAndroid Build Coastguard Worker [[nodiscard]] bool WaitUntilConditionOrTimeout(TimeDelta timeout, 54*6777b538SAndroid Build Coastguard Worker ConditionBlock condition); 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Worker // Lets the run loop of the current thread process other messages 57*6777b538SAndroid Build Coastguard Worker // within the given maximum delay. This method may return before max_delay 58*6777b538SAndroid Build Coastguard Worker // elapsed. 59*6777b538SAndroid Build Coastguard Worker void SpinRunLoopWithMaxDelay(TimeDelta max_delay); 60*6777b538SAndroid Build Coastguard Worker 61*6777b538SAndroid Build Coastguard Worker // Lets the run loop of the current thread process other messages 62*6777b538SAndroid Build Coastguard Worker // within the given minimum delay. This method returns after |min_delay| 63*6777b538SAndroid Build Coastguard Worker // elapsed. 64*6777b538SAndroid Build Coastguard Worker void SpinRunLoopWithMinDelay(TimeDelta min_delay); 65*6777b538SAndroid Build Coastguard Worker 66*6777b538SAndroid Build Coastguard Worker } // namespace base::test::ios 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker #endif // BASE_TEST_IOS_WAIT_UTIL_H_ 69