Commit 2bafe648 authored by Christopher Grant's avatar Christopher Grant Committed by Commit Bot

VR: Allow clicks on the URL to open the editable omnibox

For now, this capability is gated by the keyboard-enabled flag.

BUG=

Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I050b9dff9552ce3cff6c82f81296f4657d810ccf
Reviewed-on: https://chromium-review.googlesource.com/811064
Commit-Queue: Christopher Grant <cjgrant@chromium.org>
Reviewed-by: default avatarYash Malik <ymalik@chromium.org>
Cr-Commit-Position: refs/heads/master@{#522258}
parent c8676375
......@@ -37,9 +37,10 @@ TextInput::TextInput(int maximum_width_pixels,
text = base::MakeUnique<Text>(maximum_width_pixels, font_height_meters);
text->set_type(kTypeTextInputText);
text->set_draw_phase(kPhaseForeground);
text->set_hit_testable(false);
text->set_hit_testable(true);
text->set_x_anchoring(LEFT);
text->set_x_centering(LEFT);
text->set_bubble_events(true);
text->SetSize(1, 1);
text->SetMultiLine(false);
text->SetTextAlignment(UiTexture::kTextAlignmentLeft);
......
......@@ -9,12 +9,15 @@
namespace vr {
UrlBar::UrlBar(int preferred_width,
const base::Callback<void()>& back_button_callback,
const base::Callback<void(UiUnsupportedMode)>& failure_callback)
UrlBar::UrlBar(
int preferred_width,
const base::RepeatingCallback<void()>& back_button_callback,
const base::RepeatingCallback<void()>& url_click_callback,
const base::RepeatingCallback<void(UiUnsupportedMode)>& failure_callback)
: TexturedElement(preferred_width),
texture_(base::MakeUnique<UrlBarTexture>(failure_callback)),
back_button_callback_(back_button_callback),
url_click_callback_(url_click_callback),
failure_callback_(failure_callback) {}
UrlBar::~UrlBar() = default;
......@@ -38,20 +41,25 @@ void UrlBar::OnMove(const gfx::PointF& position) {
void UrlBar::OnButtonDown(const gfx::PointF& position) {
if (texture_->HitsBackButton(position))
down_ = true;
back_button_down_ = true;
else if (texture_->HitsSecurityRegion(position))
security_region_down_ = true;
else if (texture_->HitsUrlBar(position))
url_down_ = true;
OnStateUpdated(position);
}
void UrlBar::OnButtonUp(const gfx::PointF& position) {
down_ = false;
OnStateUpdated(position);
if (can_go_back_ && texture_->HitsBackButton(position))
back_button_callback_.Run();
else if (security_region_down_ && texture_->HitsSecurityRegion(position))
failure_callback_.Run(UiUnsupportedMode::kUnhandledPageInfo);
else if (url_down_ && texture_->HitsUrlBar(position))
url_click_callback_.Run();
back_button_down_ = false;
security_region_down_ = false;
url_down_ = false;
}
bool UrlBar::LocalHitTest(const gfx::PointF& position) const {
......@@ -73,7 +81,7 @@ void UrlBar::SetColors(const UrlBarColors& colors) {
void UrlBar::OnStateUpdated(const gfx::PointF& position) {
const bool hovered = texture_->HitsBackButton(position);
const bool pressed = hovered ? down_ : false;
const bool pressed = hovered ? back_button_down_ : false;
texture_->SetBackButtonHovered(hovered);
texture_->SetBackButtonPressed(pressed);
......
......@@ -23,9 +23,11 @@ struct UrlBarColors;
class UrlBar : public TexturedElement {
public:
UrlBar(int preferred_width,
const base::Callback<void()>& back_button_callback,
const base::Callback<void(UiUnsupportedMode)>& failure_callback);
UrlBar(
int preferred_width,
const base::RepeatingCallback<void()>& back_button_callback,
const base::RepeatingCallback<void()>& url_click_callback,
const base::RepeatingCallback<void(UiUnsupportedMode)>& failure_callback);
~UrlBar() override;
void OnHoverEnter(const gfx::PointF& position) override;
......@@ -45,11 +47,14 @@ class UrlBar : public TexturedElement {
void OnStateUpdated(const gfx::PointF& position);
std::unique_ptr<UrlBarTexture> texture_;
base::Callback<void()> back_button_callback_;
base::Callback<void(UiUnsupportedMode)> failure_callback_;
base::RepeatingCallback<void()> back_button_callback_;
base::RepeatingCallback<void()> url_click_callback_;
base::RepeatingCallback<void(UiUnsupportedMode)> failure_callback_;
bool can_go_back_ = false;
bool down_ = false;
bool back_button_down_ = false;
bool security_region_down_ = false;
bool url_down_ = false;
DISALLOW_COPY_AND_ASSIGN(UrlBar);
};
......
......@@ -91,6 +91,9 @@ VrTestContext::VrTestContext() : view_scale_factor_(kDefaultViewScaleFactor) {
base::i18n::InitializeICU();
// TODO(cjgrant): Remove this when the keyboard is enabled by default.
base::FeatureList::InitializeInstance("VrBrowserKeyboard", "");
text_input_delegate_ = base::MakeUnique<vr::TextInputDelegate>();
keyboard_delegate_ = base::MakeUnique<vr::TestKeyboardDelegate>();
......@@ -376,7 +379,6 @@ void VrTestContext::CreateFakeOmniboxSuggestions() {
"if not truncated through some other means."),
AutocompleteMatch::Type::VOICE_SUGGEST, GURL("http://www.test.com/")));
}
model_->omnibox_input_active = true;
ui_->SetOmniboxSuggestions(std::move(result));
num_suggestions++;
......
......@@ -133,6 +133,11 @@ TEST_F(TextInputSceneTest, InputFieldEdit) {
EXPECT_EQ(info, *text_input_info_);
}
TEST_F(TextInputSceneTest, ClickOnTextGrabsFocus) {
EXPECT_CALL(*text_input_delegate_, RequestFocus(_));
text_input_->get_text_element()->OnButtonUp({0, 0});
}
TEST(TextInputTest, HintText) {
UiScene scene;
......
......@@ -48,6 +48,7 @@
#include "chrome/browser/vr/ui_scene.h"
#include "chrome/browser/vr/ui_scene_constants.h"
#include "chrome/browser/vr/vector_icons/vector_icons.h"
#include "chrome/common/chrome_features.h"
#include "chrome/grit/generated_resources.h"
#include "components/vector_icons/vector_icons.h"
#include "ui/base/l10n/l10n_util.h"
......@@ -1023,11 +1024,24 @@ void UiSceneCreator::CreateUrlBar() {
scaler->set_name(kUrlBarDmmRoot);
scene_->AddUiElement(k2dBrowsingForeground, std::move(scaler));
base::RepeatingCallback<void()> url_click_callback;
if (base::FeatureList::IsEnabled(features::kVrBrowserKeyboard)) {
url_click_callback = base::BindRepeating(
[](Model* m, UiBrowserInterface* browser) {
m->omnibox_input_active = true;
},
base::Unretained(model_), base::Unretained(browser_));
} else {
url_click_callback = base::BindRepeating([] {});
}
auto url_bar = base::MakeUnique<UrlBar>(
512,
base::Bind(&UiBrowserInterface::NavigateBack, base::Unretained(browser_)),
base::Bind(&UiBrowserInterface::OnUnsupportedMode,
base::Unretained(browser_)));
base::BindRepeating(&UiBrowserInterface::NavigateBack,
base::Unretained(browser_)),
url_click_callback,
base::BindRepeating(&UiBrowserInterface::OnUnsupportedMode,
base::Unretained(browser_)));
url_bar->set_name(kUrlBar);
url_bar->set_draw_phase(kPhaseForeground);
url_bar->SetTranslate(0, kUrlBarVerticalOffsetDMM, 0);
......
......@@ -67,7 +67,6 @@ const std::set<UiElementName> kHitTestableElements = {
kAudioPermissionPromptBackplane,
kUrlBar,
kOmniboxContainer,
kOmniboxTextField,
kLoadingIndicator,
kWebVrTimeoutSpinner,
kWebVrTimeoutMessage,
......@@ -79,7 +78,7 @@ const std::set<UiElementName> kHitTestableElements = {
const std::set<UiElementName> kSpecialHitTestableElements = {
kCloseButton, kWebVrTimeoutMessageButton,
kVoiceSearchButton, kSpeechRecognitionListeningCloseButton,
kOmniboxCloseButton,
kOmniboxCloseButton, kOmniboxTextField,
};
const std::set<UiElementName> kElementsVisibleWithExitWarning = {
kScreenDimmer, kExitWarning,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment