// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_WEB_WEB_STATE_USER_INTERACTION_STATE_H_
#define IOS_WEB_WEB_STATE_USER_INTERACTION_STATE_H_
#import <WebKit/WebKit.h>
#include <memory>
#include "base/time/time.h"
#import "ios/web/web_state/user_interaction_event.h"
namespace web {
// Records user's interaction state with web content.
class UserInteractionState {
public:
UserInteractionState();
~UserInteractionState();
// Returns `user_interaction_registered_since_page_loaded_`.
bool UserInteractionRegisteredSincePageLoaded() const;
// Sets `user_interaction_registered_since_page_loaded_`. If true, also sets
// `user_interaction_registered_since_last_url_change_` and
// `user_interaction_registered_since_web_view_created_` to true;
void SetUserInteractionRegisteredSincePageLoaded(
bool user_interaction_registered_since_page_loaded);
// Returns `user_interaction_registered_since_last_url_change_`.
bool UserInteractionRegisteredSinceLastUrlChange() const;
// Sets `user_interaction_registered_since_last_url_change_`. If true, also
// sets `user_interaction_registered_since_web_view_created_` to true.
void SetUserInteractionRegisteredSinceLastUrlChange(
bool interaction_registered_since_last_url_change);
// Returns `user_interaction_registered_since_web_view_created_`.
bool UserInteractionRegisteredSinceWebViewCreated() const;
// Sets `tap_in_progress_`.
void SetTapInProgress(bool tap_in_progress);
// Resets `last_transfer_time_` to current time.
void ResetLastTransferTime();
// Returns the raw pointer managed by `last_user_interaction_`.
web::UserInteractionEvent* LastUserInteraction() const;
// Sets `last_user_interaction_`.
void SetLastUserInteraction(
std::unique_ptr<web::UserInteractionEvent> last_user_interaction);
// Returns true if the user interacted with the page recently.
bool HasUserTappedRecently(WKWebView* web_view) const;
// Returns whether the user is interacting with the page.
bool IsUserInteracting(WKWebView* web_view) const;
private:
// Whether a user interaction has been registered since the page has loaded.
bool user_interaction_registered_since_page_loaded_;
// Whether a user interaction has been registered since the last URL change.
bool user_interaction_registered_since_last_url_change_;
// Whether a user interaction has been registered since the web view is
// created.
bool user_interaction_registered_since_web_view_created_;
// Whether a tap is in progress.
bool tap_in_progress_;
// The time of the last page transfer start.
base::TimeTicks last_transfer_time_;
// Data on the recorded last user interaction.
std::unique_ptr<web::UserInteractionEvent> last_user_interaction_;
};
} // namespace web
#endif // IOS_WEB_WEB_STATE_USER_INTERACTION_STATE_H_