blob: 3f2ad8af5fb1d63475ad71732b9da42a15540ec3 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_VR_CONTENT_INPUT_DELEGATE_H_
#define CHROME_BROWSER_VR_CONTENT_INPUT_DELEGATE_H_
#include <memory>
#include <queue>
#include "base/bind.h"
#include "base/callback.h"
#include "base/macros.h"
#include "chrome/browser/vr/macros.h"
#include "chrome/browser/vr/model/text_input_info.h"
#include "chrome/browser/vr/platform_ui_input_delegate.h"
#include "chrome/browser/vr/text_edit_action.h"
#include "chrome/browser/vr/vr_export.h"
namespace vr {
class PlatformInputHandler;
// This class is responsible for processing all events and gestures for
// ContentElement.
class VR_EXPORT ContentInputDelegate : public PlatformUiInputDelegate {
public:
ContentInputDelegate();
explicit ContentInputDelegate(PlatformInputHandler* content);
~ContentInputDelegate() override;
// Text Input specific.
void OnFocusChanged(bool focused);
void OnWebInputEdited(const EditedText& info, bool commit);
void OnSwapContents(int new_content_id);
// This should be called in reponse to selection and composition changes.
// The given callback will may be called asynchronously with the updated text
// state. This is because we may have to query content for the text after the
// index change.
VIRTUAL_FOR_MOCKS void OnWebInputIndicesChanged(
int selection_start,
int selection_end,
int composition_start,
int compositon_end,
base::OnceCallback<void(const TextInputInfo&)> callback);
void OnWebInputTextChangedForTest(const base::string16& text) {
OnWebInputTextChanged(text);
}
void ClearTextInputState();
protected:
void SendGestureToTarget(std::unique_ptr<InputEvent> event) override;
private:
enum TextRequestState {
kNoPendingRequest,
kRequested,
kResponseReceived,
};
bool ContentGestureIsLocked(InputEvent::Type type);
void OnWebInputTextChanged(const base::string16& text);
int content_id_ = 0;
int locked_content_id_ = 0;
EditedText last_keyboard_edit_;
TextRequestState pending_text_request_state_ = kNoPendingRequest;
TextInputInfo pending_text_input_info_;
std::queue<base::OnceCallback<void(const TextInputInfo&)>>
update_state_callbacks_;
DISALLOW_COPY_AND_ASSIGN(ContentInputDelegate);
};
} // namespace vr
#endif // CHROME_BROWSER_VR_CONTENT_INPUT_DELEGATE_H_