Commit 4f779df0 authored by Leonard Grey's avatar Leonard Grey Committed by Commit Bot

Commander: plumb composite command cancelling through frontend

Bug: 1014639
Change-Id: I6f06f2fb7cce2588130c2e2e7be323c778a683cd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2518748Reviewed-by: default avatarElly Fong-Jones <ellyjones@chromium.org>
Commit-Queue: Leonard Grey <lgrey@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824200}
parent 3de3ecb6
......@@ -206,6 +206,11 @@ void CommanderFrontendViews::OnOptionSelected(size_t option_index,
backend_->OnCommandSelected(option_index, result_set_id);
}
void CommanderFrontendViews::OnCompositeCommandCancelled() {
DCHECK(is_showing());
backend_->OnCompositeCommandCancelled();
}
void CommanderFrontendViews::OnDismiss() {
Hide();
}
......
......@@ -50,6 +50,7 @@ class CommanderFrontendViews : public commander::CommanderFrontend,
// CommanderHandler::Delegate overrides
void OnTextChanged(const base::string16& text) override;
void OnOptionSelected(size_t option_index, int result_set_id) override;
void OnCompositeCommandCancelled() override;
void OnDismiss() override;
void OnHeightChanged(int new_height) override;
void OnHandlerEnabled(bool is_enabled) override;
......
......@@ -26,6 +26,9 @@ class CommanderFrontendViewsTest : public InProcessBrowserTest {
void OnCommandSelected(size_t command_index, int result_set_id) override {
command_selected_invocations_.push_back(command_index);
}
void OnCompositeCommandCancelled() override {
composite_command_cancelled_invocation_count_++;
}
void SetUpdateCallback(commander::CommanderBackend::ViewModelUpdateCallback
callback) override {
callback_ = std::move(callback);
......@@ -46,12 +49,16 @@ class CommanderFrontendViewsTest : public InProcessBrowserTest {
return command_selected_invocations_;
}
int composite_command_cancelled_invocation_count() {
return composite_command_cancelled_invocation_count_;
}
int reset_invocation_count() { return reset_invocation_count_; }
private:
commander::CommanderBackend::ViewModelUpdateCallback callback_;
std::vector<base::string16> text_changed_invocations_;
std::vector<size_t> command_selected_invocations_;
int composite_command_cancelled_invocation_count_ = 0;
int reset_invocation_count_ = 0;
};
......@@ -263,3 +270,15 @@ IN_PROC_BROWSER_TEST_F(CommanderFrontendViewsTest, PassesOnTextChanged) {
EXPECT_EQ(backend_->text_changed_invocations().back(), input);
frontend->Hide();
}
IN_PROC_BROWSER_TEST_F(CommanderFrontendViewsTest,
PassesOnCompositeCommandCancelled) {
auto frontend = std::make_unique<CommanderFrontendViews>(backend_.get());
frontend->Show(browser());
ignore_result(WaitForCommanderWidgetAttachedTo(browser()));
EXPECT_EQ(backend_->composite_command_cancelled_invocation_count(), 0);
frontend->OnCompositeCommandCancelled();
EXPECT_EQ(backend_->composite_command_cancelled_invocation_count(), 1);
frontend->Hide();
}
......@@ -14,6 +14,8 @@ constexpr char kTextChangedMessage[] = "textChanged";
constexpr char kOptionSelectedMessage[] = "optionSelected";
constexpr char kDismissMessage[] = "dismiss";
constexpr char kHeightChangedMessage[] = "heightChanged";
constexpr char kCompositeCommandCancelledMessage[] =
"compositeCommandCancelled";
// WebUI event keys.
constexpr char kViewModelUpdatedEvent[] = "view-model-updated";
constexpr char kInitializeEvent[] = "initialize";
......@@ -39,6 +41,10 @@ void CommanderHandler::RegisterMessages() {
kOptionSelectedMessage,
base::BindRepeating(&CommanderHandler::HandleOptionSelected,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
kCompositeCommandCancelledMessage,
base::BindRepeating(&CommanderHandler::HandleCompositeCommandCancelled,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
kDismissMessage, base::BindRepeating(&CommanderHandler::HandleDismiss,
base::Unretained(this)));
......@@ -75,6 +81,14 @@ void CommanderHandler::HandleOptionSelected(const base::ListValue* args) {
delegate_->OnOptionSelected(index, result_set_id);
}
void CommanderHandler::HandleCompositeCommandCancelled(
const base::ListValue* args) {
if (!delegate_)
return;
AllowJavascript();
delegate_->OnCompositeCommandCancelled();
}
void CommanderHandler::HandleDismiss(const base::ListValue* args) {
if (delegate_)
delegate_->OnDismiss();
......
......@@ -22,6 +22,8 @@ class CommanderHandler : public content::WebUIMessageHandler {
// Called when an option is selected (clicked or enter pressed) in the WebUI
// interface.
virtual void OnOptionSelected(size_t option_index, int result_set_id) = 0;
// Called when the user has cancelled entering a composite command.
virtual void OnCompositeCommandCancelled() = 0;
// Called when the WebUI interface wants to dismiss the UI.
virtual void OnDismiss() = 0;
// Called when the WebUI interface's content height has changed.
......@@ -58,6 +60,9 @@ class CommanderHandler : public content::WebUIMessageHandler {
// commander::CommanderViewModel).
void HandleOptionSelected(const base::ListValue* args);
// Handles the user cancelling a composite command. No arguments expected.
void HandleCompositeCommandCancelled(const base::ListValue* args);
// Handles the user pressing "Escape", or otherwise indicating they would
// like to dismiss the UI. No arguments expected.
void HandleDismiss(const base::ListValue* args);
......
......@@ -65,6 +65,10 @@ class CommanderUITest : public InProcessBrowserTest,
option_selected_invocations_.emplace_back(option_index, result_set_id);
}
void OnCompositeCommandCancelled() override {
composite_command_cancelled_invocation_count_++;
}
void OnDismiss() override { dismiss_invocation_count_++; }
void OnHeightChanged(int new_height) override {
......@@ -82,20 +86,24 @@ class CommanderUITest : public InProcessBrowserTest,
return height_changed_invocations_;
}
size_t dismiss_invocation_count() { return dismiss_invocation_count_; }
int composite_command_cancelled_invocation_count() {
return composite_command_cancelled_invocation_count_;
}
int dismiss_invocation_count() { return dismiss_invocation_count_; }
private:
std::unique_ptr<content::WebContents> contents_;
size_t dismiss_invocation_count_ = 0;
int dismiss_invocation_count_ = 0;
int composite_command_cancelled_invocation_count_ = 0;
std::vector<base::string16> text_changed_invocations_;
std::vector<std::pair<size_t, int>> option_selected_invocations_;
std::vector<int> height_changed_invocations_;
};
IN_PROC_BROWSER_TEST_F(CommanderUITest, Dismiss) {
EXPECT_EQ(dismiss_invocation_count(), 0u);
EXPECT_EQ(dismiss_invocation_count(), 0);
ExecuteJS("chrome.send('dismiss')");
EXPECT_EQ(dismiss_invocation_count(), 1u);
EXPECT_EQ(dismiss_invocation_count(), 1);
}
IN_PROC_BROWSER_TEST_F(CommanderUITest, HeightChanged) {
......@@ -120,6 +128,12 @@ IN_PROC_BROWSER_TEST_F(CommanderUITest, OptionSelected) {
ASSERT_EQ(option_selected_invocations().back(), expected);
}
IN_PROC_BROWSER_TEST_F(CommanderUITest, CompositeCommandCancelled) {
EXPECT_EQ(composite_command_cancelled_invocation_count(), 0);
ExecuteJS("chrome.send('compositeCommandCancelled')");
EXPECT_EQ(composite_command_cancelled_invocation_count(), 1);
}
TEST(CommanderHandlerTest, ViewModelPassed) {
content::TestWebUI test_web_ui;
auto handler = std::make_unique<TestCommanderHandler>(&test_web_ui);
......
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