12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/session_length_limiter.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <queue> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utility> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/location.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/testing_pref_service.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/single_thread_task_runner.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/thread_task_runner_handle.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::Invoke; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::Mock; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::NiceMock; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockSessionLengthLimiterDelegate : public SessionLengthLimiter::Delegate { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_CONST_METHOD0(GetCurrentTime, const base::TimeTicks(void)); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(StopSession, void(void)); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A SingleThreadTaskRunner that mocks the current time and allows it to be 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// fast-forwarded. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockTimeSingleThreadTaskRunner : public base::SingleThreadTaskRunner { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockTimeSingleThreadTaskRunner(); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // base::SingleThreadTaskRunner: 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool RunsTasksOnCurrentThread() const OVERRIDE; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool PostDelayedTask(const tracked_objects::Location& from_here, 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& task, 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta delay) OVERRIDE; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool PostNonNestableDelayedTask( 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const tracked_objects::Location& from_here, 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& task, 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta delay) OVERRIDE; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::TimeTicks& GetCurrentTime() const; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void FastForwardBy(const base::TimeDelta& time_delta); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void FastForwardUntilNoTasksRemain(); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Strict weak temporal ordering of tasks. 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TemporalOrder { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator()( 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::pair<base::TimeTicks, base::Closure>& first_task, 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::pair<base::TimeTicks, base::Closure>& second_task) const; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MockTimeSingleThreadTaskRunner(); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeTicks now_; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::priority_queue<std::pair<base::TimeTicks, base::Closure>, 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<std::pair<base::TimeTicks, base::Closure> >, 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TemporalOrder> tasks_; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SessionLengthLimiterTest : public testing::Test { 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionLengthLimiterTest(); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // testing::Test: 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE; 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void SetSessionUserActivitySeenPref(bool user_activity_seen); 901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void ClearSessionUserActivitySeenPref(); 911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool IsSessionUserActivitySeenPrefSet(); 921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool GetSessionUserActivitySeenPref(); 931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void SetSessionStartTimePref(const base::TimeTicks& session_start_time); 951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void ClearSessionStartTimePref(); 961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool IsSessionStartTimePrefSet(); 971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::TimeTicks GetSessionStartTimePref(); 981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void SetSessionLengthLimitPref(const base::TimeDelta& session_length_limit); 1001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void ClearSessionLengthLimitPref(); 1011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void SetWaitForInitialUserActivityPref(bool wait_for_initial_user_activity); 1031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void SimulateUserActivity(); 1051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void UpdateSessionStartTimeIfWaitingForUserActivity(); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ExpectStopSession(); 1091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void SaveSessionStopTime(); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Clears the session state by resetting |user_activity_| and 1121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // |session_start_time_| and creates a new SessionLengthLimiter. 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CreateSessionLengthLimiter(bool browser_restarted); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void DestroySessionLengthLimiter(); 1161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<MockTimeSingleThreadTaskRunner> runner_; 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeTicks session_start_time_; 1191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::TimeTicks session_stop_time_; 1201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private: 1221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestingPrefServiceSimple local_state_; 1231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool user_activity_seen_; 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockSessionLengthLimiterDelegate* delegate_; // Owned by 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // session_length_limiter_. 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<SessionLengthLimiter> session_length_limiter_; 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)MockTimeSingleThreadTaskRunner::MockTimeSingleThreadTaskRunner() 1311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : now_(base::TimeTicks::FromInternalValue(1000)) { 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MockTimeSingleThreadTaskRunner::RunsTasksOnCurrentThread() const { 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MockTimeSingleThreadTaskRunner::PostDelayedTask( 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const tracked_objects::Location& from_here, 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& task, 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta delay) { 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tasks_.push(std::pair<base::TimeTicks, base::Closure>(now_ + delay, task)); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MockTimeSingleThreadTaskRunner::PostNonNestableDelayedTask( 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const tracked_objects::Location& from_here, 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& task, 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta delay) { 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::TimeTicks& MockTimeSingleThreadTaskRunner::GetCurrentTime() const { 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return now_; 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void MockTimeSingleThreadTaskRunner::FastForwardBy( 1591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::TimeDelta& time_delta) { 1601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::TimeTicks latest = now_ + time_delta; 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (!tasks_.empty() && tasks_.top().first <= latest) { 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) now_ = tasks_.top().first; 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure task = tasks_.top().second; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tasks_.pop(); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task.Run(); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) now_ = latest; 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MockTimeSingleThreadTaskRunner::FastForwardUntilNoTasksRemain() { 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (!tasks_.empty()) { 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) now_ = tasks_.top().first; 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure task = tasks_.top().second; 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tasks_.pop(); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) task.Run(); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MockTimeSingleThreadTaskRunner::TemporalOrder::operator()( 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::pair<base::TimeTicks, base::Closure>& first_task, 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::pair<base::TimeTicks, base::Closure>& second_task) const { 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return first_task.first > second_task.first; 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MockTimeSingleThreadTaskRunner::~MockTimeSingleThreadTaskRunner() { 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)SessionLengthLimiterTest::SessionLengthLimiterTest() 1891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : user_activity_seen_(false), 1901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) delegate_(NULL) { 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SessionLengthLimiterTest::SetUp() { 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionLengthLimiter::RegisterPrefs(local_state_.registry()); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) runner_ = new MockTimeSingleThreadTaskRunner; 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SessionLengthLimiterTest::TearDown() { 2001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) session_length_limiter_.reset(); 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetLocalState(NULL); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SessionLengthLimiterTest::SetSessionUserActivitySeenPref( 2051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool user_activity_seen) { 2061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) local_state_.SetUserPref(prefs::kSessionUserActivitySeen, 2071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new base::FundamentalValue(user_activity_seen)); 2081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SessionLengthLimiterTest::ClearSessionUserActivitySeenPref() { 2111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) local_state_.ClearPref(prefs::kSessionUserActivitySeen); 2121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool SessionLengthLimiterTest::IsSessionUserActivitySeenPrefSet() { 2151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return local_state_.HasPrefPath(prefs::kSessionUserActivitySeen); 2161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool SessionLengthLimiterTest::GetSessionUserActivitySeenPref() { 2191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(IsSessionUserActivitySeenPrefSet()); 2201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return local_state_.GetBoolean(prefs::kSessionUserActivitySeen); 2211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SessionLengthLimiterTest::SetSessionStartTimePref( 2241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::TimeTicks& session_start_time) { 2251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) local_state_.SetUserPref( 2261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs::kSessionStartTime, 2271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new base::StringValue( 2281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Int64ToString(session_start_time.ToInternalValue()))); 2291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SessionLengthLimiterTest::ClearSessionStartTimePref() { 2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) local_state_.ClearPref(prefs::kSessionStartTime); 2331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool SessionLengthLimiterTest::IsSessionStartTimePrefSet() { 2361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return local_state_.HasPrefPath(prefs::kSessionStartTime); 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)base::TimeTicks SessionLengthLimiterTest::GetSessionStartTimePref() { 2401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(IsSessionStartTimePrefSet()); 2411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return base::TimeTicks::FromInternalValue( 2421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) local_state_.GetInt64(prefs::kSessionStartTime)); 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SessionLengthLimiterTest::SetSessionLengthLimitPref( 2461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::TimeDelta& session_length_limit) { 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) local_state_.SetUserPref(prefs::kSessionLengthLimit, 2481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new base::FundamentalValue( 2491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static_cast<int>(session_length_limit.InMilliseconds()))); 2501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UpdateSessionStartTimeIfWaitingForUserActivity(); 2511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SessionLengthLimiterTest::ClearSessionLengthLimitPref() { 2541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) local_state_.RemoveUserPref(prefs::kSessionLengthLimit); 2551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UpdateSessionStartTimeIfWaitingForUserActivity(); 2561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SessionLengthLimiterTest::SetWaitForInitialUserActivityPref( 2591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool wait_for_initial_user_activity) { 2601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UpdateSessionStartTimeIfWaitingForUserActivity(); 2611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) local_state_.SetUserPref( 2621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs::kSessionWaitForInitialUserActivity, 2631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) new base::FundamentalValue(wait_for_initial_user_activity)); 2641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SessionLengthLimiterTest::SimulateUserActivity() { 2671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (session_length_limiter_) 2681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) session_length_limiter_->OnUserActivity(NULL); 2691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UpdateSessionStartTimeIfWaitingForUserActivity(); 2701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) user_activity_seen_ = true; 2711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SessionLengthLimiterTest:: 2741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UpdateSessionStartTimeIfWaitingForUserActivity() { 2751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!user_activity_seen_ && 2761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) local_state_.GetBoolean(prefs::kSessionWaitForInitialUserActivity)) { 2771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) session_start_time_ = runner_->GetCurrentTime(); 2781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SessionLengthLimiterTest::ExpectStopSession() { 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mock::VerifyAndClearExpectations(delegate_); 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(*delegate_, StopSession()) 2841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) .Times(1) 2851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) .WillOnce(Invoke(this, &SessionLengthLimiterTest::SaveSessionStopTime)); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SessionLengthLimiterTest::SaveSessionStopTime() { 2891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) session_stop_time_ = runner_->GetCurrentTime(); 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SessionLengthLimiterTest::CreateSessionLengthLimiter( 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool browser_restarted) { 2941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) user_activity_seen_ = false; 2951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) session_start_time_ = runner_->GetCurrentTime(); 2961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(delegate_); 2981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) delegate_ = new NiceMock<MockSessionLengthLimiterDelegate>; 2991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ON_CALL(*delegate_, GetCurrentTime()) 3001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) .WillByDefault(Invoke(runner_.get(), 3011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &MockTimeSingleThreadTaskRunner::GetCurrentTime)); 3021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_CALL(*delegate_, StopSession()).Times(0); 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) session_length_limiter_.reset( 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new SessionLengthLimiter(delegate_, browser_restarted)); 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void SessionLengthLimiterTest::DestroySessionLengthLimiter() { 3081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) session_length_limiter_.reset(); 3091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) delegate_ = NULL; 3101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 3111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verifies that when not instructed to wait for initial user activity, the 3131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// session start time is set and the pref indicating user activity is cleared 3141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// in local state during login. 3151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SessionLengthLimiterTest, StartDoNotWaitForInitialUserActivity) { 3161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity not set. Session start time not set. 3171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionUserActivitySeenPref(); 3181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionStartTimePref(); 3191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 3201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 3211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 3221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 3231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity set. Session start time not set. 3251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionUserActivitySeenPref(true); 3261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionStartTimePref(); 3271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 3281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 3291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 3301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 3311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity not set. Session start time in the future. 3331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionUserActivitySeenPref(); 3341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionStartTimePref(session_start_time_ + base::TimeDelta::FromHours(2)); 3351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 3361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 3371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 3381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 3391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity set. Session start time in the future. 3411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionUserActivitySeenPref(true); 3421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionStartTimePref(session_start_time_ + base::TimeDelta::FromHours(2)); 3431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 3441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 3451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 3461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 3471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity not set. Session start time valid. 3491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionUserActivitySeenPref(); 3501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionStartTimePref(session_start_time_ - base::TimeDelta::FromHours(2)); 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSessionLengthLimiter(false); 3521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 3531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 3541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 3551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity set. Session start time valid. 3571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionUserActivitySeenPref(true); 3581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionStartTimePref(session_start_time_ - base::TimeDelta::FromHours(2)); 3591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 3601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 3611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 3621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verifies that when instructed to wait for initial user activity, the session 3661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// start time and the pref indicating user activity are cleared in local state 3671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// during login. 3681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SessionLengthLimiterTest, StartWaitForInitialUserActivity) { 3691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetWaitForInitialUserActivityPref(true); 3701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity not set. Session start time not set. 3721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionUserActivitySeenPref(); 3731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionStartTimePref(); 3741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 3751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 3761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 3771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 3781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity set. Session start time not set. 3801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionUserActivitySeenPref(true); 3811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionStartTimePref(); 3821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 3831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 3841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 3851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 3861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity not set. Session start time in the future. 3881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionUserActivitySeenPref(); 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetSessionStartTimePref( 3901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->GetCurrentTime() + base::TimeDelta::FromHours(2)); 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSessionLengthLimiter(false); 3921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 3931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 3941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity set. Session start time in the future. 3971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionUserActivitySeenPref(true); 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetSessionStartTimePref( 3991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->GetCurrentTime() + base::TimeDelta::FromHours(2)); 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSessionLengthLimiter(false); 4011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 4021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 4031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 4041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity not set. Session start time valid. 4061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionUserActivitySeenPref(); 4071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionStartTimePref( 4081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->GetCurrentTime() - base::TimeDelta::FromHours(2)); 4091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 4101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 4111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 4121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 4131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity set. Session start time valid. 4151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionUserActivitySeenPref(true); 4161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionStartTimePref( 4171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->GetCurrentTime() - base::TimeDelta::FromHours(2)); 4181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 4191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 4201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 4211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verifies that when not instructed to wait for initial user activity, local 4251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// state is correctly updated during restart after a crash: 4261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// * If no valid session start time is found in local state, the session start 4271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// time is set and the pref indicating user activity is cleared. 4281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// * If a valid session start time is found in local state, the session start 4291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// time and the pref indicating user activity are *not* modified. 4301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SessionLengthLimiterTest, RestartDoNotWaitForInitialUserActivity) { 4311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity not set. Session start time not set. 4321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionUserActivitySeenPref(); 4331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionStartTimePref(); 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSessionLengthLimiter(true); 4351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 4361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 4371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 4381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity set. Session start time not set. 4401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionUserActivitySeenPref(true); 4411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionStartTimePref(); 4421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(true); 4431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 4441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 4451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 4461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity not set. Session start time in the future. 4481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionUserActivitySeenPref(); 4491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionStartTimePref( 4501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->GetCurrentTime() + base::TimeDelta::FromHours(2)); 4511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(true); 4521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 4531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 4541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity set. Session start time in the future. 4571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionUserActivitySeenPref(true); 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetSessionStartTimePref( 4591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->GetCurrentTime() + base::TimeDelta::FromHours(2)); 4601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(true); 4611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 4621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 4631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 4641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::TimeTicks stored_session_start_time = 4661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->GetCurrentTime() - base::TimeDelta::FromHours(2); 4671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity not set. Session start time valid. 4691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionUserActivitySeenPref(); 4701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionStartTimePref(stored_session_start_time); 4711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(true); 4721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 4731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(stored_session_start_time, GetSessionStartTimePref()); 4741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 4751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity set. Session start time valid. 4771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionUserActivitySeenPref(true); 4781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionStartTimePref(stored_session_start_time); 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSessionLengthLimiter(true); 4801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(IsSessionUserActivitySeenPrefSet()); 4811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(GetSessionUserActivitySeenPref()); 4821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(stored_session_start_time, GetSessionStartTimePref()); 4831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verifies that when instructed to wait for initial user activity, local state 4871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// is correctly updated during restart after a crash: 4881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// * If no valid session start time is found in local state, the session start 4891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// time and the pref indicating user activity are cleared. 4901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// * If a valid session start time is found in local state, the session start 4911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// time and the pref indicating user activity are *not* modified. 4921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SessionLengthLimiterTest, RestartWaitForInitialUserActivity) { 4931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetWaitForInitialUserActivityPref(true); 4941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity not set. Session start time not set. 4961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionUserActivitySeenPref(); 4971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionStartTimePref(); 4981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(true); 4991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 5001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 5011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 5021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity set. Session start time not set. 5041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionUserActivitySeenPref(true); 5051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionStartTimePref(); 5061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(true); 5071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 5081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 5091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 5101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity not set. Session start time in the future. 5121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionUserActivitySeenPref(); 5131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionStartTimePref( 5141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->GetCurrentTime() + base::TimeDelta::FromHours(2)); 5151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(true); 5161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 5171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 5181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 5191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity set. Session start time in the future. 5211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionUserActivitySeenPref(true); 5221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionStartTimePref( 5231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->GetCurrentTime() + base::TimeDelta::FromHours(2)); 5241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(true); 5251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 5261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 5271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 5281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::TimeTicks stored_session_start_time = 5301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->GetCurrentTime() - base::TimeDelta::FromHours(2); 5311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity not set. Session start time valid. 5331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionUserActivitySeenPref(); 5341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionStartTimePref(stored_session_start_time); 5351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(true); 5361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 5371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(stored_session_start_time, GetSessionStartTimePref()); 5381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 5391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Pref indicating user activity set. Session start time valid. 5411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionUserActivitySeenPref(true); 5421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionStartTimePref(stored_session_start_time); 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSessionLengthLimiter(true); 5441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(IsSessionUserActivitySeenPrefSet()); 5451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(GetSessionUserActivitySeenPref()); 5461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(stored_session_start_time, GetSessionStartTimePref()); 5471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DestroySessionLengthLimiter(); 5481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 5491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verifies that local state is correctly updated when waiting for initial user 5511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// activity is toggled and no user activity has occurred yet. 5521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SessionLengthLimiterTest, ToggleWaitForInitialUserActivity) { 5531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 5541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that the pref indicating user activity was not set and the session 5561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // start time was set. 5571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 5581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 5591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Enable waiting for initial user activity. 5611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(1)); 5621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetWaitForInitialUserActivityPref(true); 5631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that the session start time was cleared and the pref indicating user 5651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // activity was not set. 5661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 5671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 5681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Disable waiting for initial user activity. 5701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(1)); 5711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetWaitForInitialUserActivityPref(false); 5721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that the pref indicating user activity was not set and the session 5741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // start time was. 5751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 5761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 5771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 5781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verifies that local state is correctly updated when instructed not to wait 5801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// for initial user activity and user activity occurs. Also verifies that once 5811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// initial user activity has occurred, neither the session start time nor the 5821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// pref indicating user activity change in local state anymore. 5831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SessionLengthLimiterTest, UserActivityWhileNotWaiting) { 5841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 5851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that the pref indicating user activity was not set and the session 5871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // start time was set. 5881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 5891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 5901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Simulate user activity. 5921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(1)); 5931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SimulateUserActivity(); 5941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that the pref indicating user activity and the session start time 5961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // were set. 5971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(IsSessionUserActivitySeenPrefSet()); 5981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(GetSessionUserActivitySeenPref()); 5991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 6001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Simulate user activity. 6021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(1)); 6031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SimulateUserActivity(); 6041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that the pref indicating user activity and the session start time 6061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // were not changed. 6071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(IsSessionUserActivitySeenPrefSet()); 6081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(GetSessionUserActivitySeenPref()); 6091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 6101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Enable waiting for initial user activity. 6121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(1)); 6131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetWaitForInitialUserActivityPref(true); 6141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that the pref indicating user activity and the session start time 6161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // were not changed. 6171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(IsSessionUserActivitySeenPrefSet()); 6181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(GetSessionUserActivitySeenPref()); 6191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 6201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 6211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verifies that local state is correctly updated when instructed to wait for 6231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// initial user activity and user activity occurs. Also verifies that once 6241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// initial user activity has occurred, neither the session start time nor the 6251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// pref indicating user activity change in local state anymore. 6261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SessionLengthLimiterTest, UserActivityWhileWaiting) { 6271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetWaitForInitialUserActivityPref(true); 6281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 6301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that the pref indicating user activity and the session start time 6321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // were not set. 6331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionUserActivitySeenPrefSet()); 6341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 6351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Simulate user activity. 6371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(1)); 6381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SimulateUserActivity(); 6391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that the pref indicating user activity and the session start time 6411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // were set. 6421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(IsSessionUserActivitySeenPrefSet()); 6431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(GetSessionUserActivitySeenPref()); 6441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 6451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Simulate user activity. 6471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(1)); 6481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SimulateUserActivity(); 6491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that the pref indicating user activity and the session start time 6511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // were not changed. 6521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(IsSessionUserActivitySeenPrefSet()); 6531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(GetSessionUserActivitySeenPref()); 6541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 6551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Disable waiting for initial user activity. 6571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(1)); 6581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetWaitForInitialUserActivityPref(false); 6591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that the pref indicating user activity and the session start time 6611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // were not changed. 6621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(IsSessionUserActivitySeenPrefSet()); 6631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(GetSessionUserActivitySeenPref()); 6641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Creates a SessionLengthLimiter without setting a limit. Verifies that the 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// limiter does not start a timer. 6691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SessionLengthLimiterTest, RunWithoutLimit) { 6701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::ThreadTaskRunnerHandle runner_handler(runner_); 6711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 6731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that no timer fires to terminate the session. 6751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardUntilNoTasksRemain(); 6761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 6771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Creates a SessionLengthLimiter after setting a limit and instructs it not to 6791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// wait for user activity. Verifies that the limiter starts a timer even if no 6801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// user activity occurs and that when the session length reaches the limit, the 6811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// session is terminated. 6821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SessionLengthLimiterTest, RunWithoutUserActivityWhileNotWaiting) { 6831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::ThreadTaskRunnerHandle runner_handler(runner_); 6841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Set a 60 second session time limit. 6861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionLengthLimitPref(base::TimeDelta::FromSeconds(60)); 6871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 6891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 6901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that the timer fires and the session is terminated when the session 6921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // length limit is reached. 6931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ExpectStopSession(); 6941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardUntilNoTasksRemain(); 6951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_ + base::TimeDelta::FromSeconds(60), 6961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) session_stop_time_); 6971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 6981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Creates a SessionLengthLimiter after setting a limit and instructs it to wait 7001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// for initial user activity. Verifies that if no user activity occurs, the 7011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// limiter does not start a timer. 7021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SessionLengthLimiterTest, RunWithoutUserActivityWhileWaiting) { 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ThreadTaskRunnerHandle runner_handler(runner_); 7041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetWaitForInitialUserActivityPref(true); 7051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 7061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Set a 60 second session time limit. 7071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionLengthLimitPref(base::TimeDelta::FromSeconds(60)); 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSessionLengthLimiter(false); 7101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no timer fires to terminate the session. 7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) runner_->FastForwardUntilNoTasksRemain(); 7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Creates a SessionLengthLimiter after setting a limit and instructs it not to 7171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// wait for user activity. Verifies that the limiter starts a timer and that 7181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// when the session length reaches the limit, the session is terminated. Also 7191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// verifies that user activity does not affect the timer. 7205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(SessionLengthLimiterTest, RunWithUserActivityWhileNotWaiting) { 7211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::ThreadTaskRunnerHandle runner_handler(runner_); 7221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 7231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Set a 60 second session time limit. 7241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionLengthLimitPref(base::TimeDelta::FromSeconds(60)); 7251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 7261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CreateSessionLengthLimiter(false); 7271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 7281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 7291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Simulate user activity after 20 seconds. 7301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(20)); 7311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SimulateUserActivity(); 7321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 7331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 7341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Verify that the timer fires and the session is terminated when the session 7351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // length limit is reached. 7361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ExpectStopSession(); 7371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardUntilNoTasksRemain(); 7381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_ + base::TimeDelta::FromSeconds(60), 7391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) session_stop_time_); 7401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 7411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 7421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Creates a SessionLengthLimiter after setting a limit and instructs it to wait 7431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// for initial user activity. Verifies that once user activity occurs, the 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// limiter starts a timer and that when the session length reaches the limit, 7451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// the session is terminated. Also verifies that further user activity does not 7461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// affect the timer. 7471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(SessionLengthLimiterTest, RunWithUserActivityWhileWaiting) { 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ThreadTaskRunnerHandle runner_handler(runner_); 7491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetWaitForInitialUserActivityPref(true); 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set a 60 second session time limit. 7521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionLengthLimitPref(base::TimeDelta::FromSeconds(60)); 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSessionLengthLimiter(false); 7551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(IsSessionStartTimePrefSet()); 7561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 7571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Simulate user activity after 20 seconds. 7581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(20)); 7591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SimulateUserActivity(); 7601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 7611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 7621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Simulate user activity after 20 seconds. 7631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(20)); 7641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SimulateUserActivity(); 7651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_, GetSessionStartTimePref()); 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the timer fires and the session is terminated when the session 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // length limit is reached. 7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectStopSession(); 7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) runner_->FastForwardUntilNoTasksRemain(); 7711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_ + base::TimeDelta::FromSeconds(60), 7721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) session_stop_time_); 7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Creates a SessionLengthLimiter after setting a 60 second limit, allows 50 7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// seconds of session time to pass, then increases the limit to 90 seconds. 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the session time reaches the new 90 second limit, the 7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// session is terminated. 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SessionLengthLimiterTest, RunAndIncreaseSessionLengthLimit) { 7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ThreadTaskRunnerHandle runner_handler(runner_); 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set a 60 second session time limit. 7831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionLengthLimitPref(base::TimeDelta::FromSeconds(60)); 7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSessionLengthLimiter(false); 7862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the time by 50 seconds, verifying that no timer fires to 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // terminate the session. 7891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(50)); 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Increase the session length limit to 90 seconds. 7921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionLengthLimitPref(base::TimeDelta::FromSeconds(90)); 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that the the timer fires and the session is terminated when the 7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // session length limit is reached. 7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectStopSession(); 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) runner_->FastForwardUntilNoTasksRemain(); 7981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_ + base::TimeDelta::FromSeconds(90), 7991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) session_stop_time_); 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Creates a SessionLengthLimiter after setting a 60 second limit, allows 50 8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// seconds of session time to pass, then decreases the limit to 40 seconds. 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verifies that when the limit is decreased to 40 seconds after 50 seconds of 8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// session time have passed, the next timer tick causes the session to be 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// terminated. 8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SessionLengthLimiterTest, RunAndDecreaseSessionLengthLimit) { 8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ThreadTaskRunnerHandle runner_handler(runner_); 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set a 60 second session time limit. 8111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionLengthLimitPref(base::TimeDelta::FromSeconds(60)); 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSessionLengthLimiter(false); 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the time by 50 seconds, verifying that no timer fires to 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // terminate the session. 8171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(50)); 8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that reducing the session length limit below the 50 seconds that 8202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // have already elapsed causes the session to be terminated immediately. 8212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectStopSession(); 8221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionLengthLimitPref(base::TimeDelta::FromSeconds(40)); 8231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(session_start_time_ + base::TimeDelta::FromSeconds(50), 8241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) session_stop_time_); 8252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Creates a SessionLengthLimiter after setting a 60 second limit, allows 50 8282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// seconds of session time to pass, then removes the limit. Verifies that after 8292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the limit is removed, the session is not terminated when the session time 8302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// reaches the original 60 second limit. 8312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SessionLengthLimiterTest, RunAndRemoveSessionLengthLimit) { 8322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ThreadTaskRunnerHandle runner_handler(runner_); 8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set a 60 second session time limit. 8351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetSessionLengthLimitPref(base::TimeDelta::FromSeconds(60)); 8362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateSessionLengthLimiter(false); 8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fast forward the time by 50 seconds, verifying that no timer fires to 8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // terminate the session. 8411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) runner_->FastForwardBy(base::TimeDelta::FromSeconds(50)); 8422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove the session length limit. 8441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ClearSessionLengthLimitPref(); 8452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that no timer fires to terminate the session. 8472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) runner_->FastForwardUntilNoTasksRemain(); 8482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 851