Commit 2f7a70c3 authored by David Black's avatar David Black Committed by Commit Bot

Moves open URL logic to AssistantController.

Logic was previously in AssistantInteractionController.

Bug: b:80542452
Change-Id: I3e92d2ed8cbf1afa3577a7180eef5260a592f8d6
Reviewed-on: https://chromium-review.googlesource.com/1112656
Commit-Queue: David Black <dmblack@google.com>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Reviewed-by: default avatarXiaohui Chen <xiaohuic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#570291}
parent 110bd3eb
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "ash/assistant/assistant_interaction_controller.h" #include "ash/assistant/assistant_interaction_controller.h"
#include "ash/assistant/assistant_ui_controller.h" #include "ash/assistant/assistant_ui_controller.h"
#include "ash/new_window_controller.h"
#include "ash/session/session_controller.h" #include "ash/session/session_controller.h"
#include "ash/shell.h" #include "ash/shell.h"
#include "base/bind.h" #include "base/bind.h"
...@@ -17,7 +18,7 @@ namespace ash { ...@@ -17,7 +18,7 @@ namespace ash {
AssistantController::AssistantController() AssistantController::AssistantController()
: assistant_interaction_controller_( : assistant_interaction_controller_(
std::make_unique<AssistantInteractionController>()), std::make_unique<AssistantInteractionController>(this)),
assistant_ui_controller_(std::make_unique<AssistantUiController>(this)) { assistant_ui_controller_(std::make_unique<AssistantUiController>(this)) {
// Note that the sub-controllers have a circular dependency. // Note that the sub-controllers have a circular dependency.
// TODO(dmblack): Remove this circular dependency. // TODO(dmblack): Remove this circular dependency.
...@@ -107,10 +108,9 @@ void AssistantController::ManageWebContents( ...@@ -107,10 +108,9 @@ void AssistantController::ManageWebContents(
params->account_id = user_session->user_info->account_id; params->account_id = user_session->user_info->account_id;
// Specify that we will handle top level browser requests. // Specify that we will handle top level browser requests.
// TODO(dmblack): Make AssistantController the OpenUrl delegate.
ash::mojom::ManagedWebContentsOpenUrlDelegatePtr ptr; ash::mojom::ManagedWebContentsOpenUrlDelegatePtr ptr;
web_contents_open_url_delegate_bindings_.AddBinding( web_contents_open_url_delegate_bindings_.AddBinding(this,
assistant_interaction_controller_.get(), mojo::MakeRequest(&ptr)); mojo::MakeRequest(&ptr));
params->open_url_delegate_ptr_info = ptr.PassInterface(); params->open_url_delegate_ptr_info = ptr.PassInterface();
web_contents_manager_->ManageWebContents(id_token, std::move(params), web_contents_manager_->ManageWebContents(id_token, std::move(params),
...@@ -151,4 +151,15 @@ void AssistantController::OnHighlighterSelectionRecognized( ...@@ -151,4 +151,15 @@ void AssistantController::OnHighlighterSelectionRecognized(
NOTIMPLEMENTED(); NOTIMPLEMENTED();
} }
void AssistantController::OnOpenUrlFromTab(const GURL& url) {
OpenUrl(url);
}
void AssistantController::OpenUrl(const GURL& url) {
Shell::Get()->new_window_controller()->NewTabWithUrl(url);
// We dismiss Assistant UI when opening a new browser tab.
assistant_ui_controller_->HideUi(AssistantSource::kUnspecified);
}
} // namespace ash } // namespace ash
...@@ -29,7 +29,8 @@ class AssistantInteractionController; ...@@ -29,7 +29,8 @@ class AssistantInteractionController;
class AssistantUiController; class AssistantUiController;
class AssistantController : public mojom::AssistantController, class AssistantController : public mojom::AssistantController,
public HighlighterController::Observer { public HighlighterController::Observer,
public mojom::ManagedWebContentsOpenUrlDelegate {
public: public:
AssistantController(); AssistantController();
~AssistantController() override; ~AssistantController() override;
...@@ -75,6 +76,13 @@ class AssistantController : public mojom::AssistantController, ...@@ -75,6 +76,13 @@ class AssistantController : public mojom::AssistantController,
// HighlighterController::Observer: // HighlighterController::Observer:
void OnHighlighterSelectionRecognized(const gfx::Rect& rect) override; void OnHighlighterSelectionRecognized(const gfx::Rect& rect) override;
// mojom::ManagedWebContentsOpenUrlDelegate:
void OnOpenUrlFromTab(const GURL& url) override;
// Opens the specified |url| in a new browser tab.
// TODO(dmblack): Support opening specific URLs in the Assistant container.
void OpenUrl(const GURL& url);
AssistantInteractionController* interaction_controller() { AssistantInteractionController* interaction_controller() {
DCHECK(assistant_interaction_controller_); DCHECK(assistant_interaction_controller_);
return assistant_interaction_controller_.get(); return assistant_interaction_controller_.get();
......
...@@ -9,14 +9,15 @@ ...@@ -9,14 +9,15 @@
#include "ash/assistant/model/assistant_interaction_model_observer.h" #include "ash/assistant/model/assistant_interaction_model_observer.h"
#include "ash/assistant/model/assistant_query.h" #include "ash/assistant/model/assistant_query.h"
#include "ash/assistant/model/assistant_ui_element.h" #include "ash/assistant/model/assistant_ui_element.h"
#include "ash/new_window_controller.h"
#include "ash/shell.h" #include "ash/shell.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
namespace ash { namespace ash {
AssistantInteractionController::AssistantInteractionController() AssistantInteractionController::AssistantInteractionController(
: assistant_event_subscriber_binding_(this) { AssistantController* assistant_controller)
: assistant_controller_(assistant_controller),
assistant_event_subscriber_binding_(this) {
AddModelObserver(this); AddModelObserver(this);
Shell::Get()->highlighter_controller()->AddObserver(this); Shell::Get()->highlighter_controller()->AddObserver(this);
} }
...@@ -144,7 +145,7 @@ void AssistantInteractionController::OnSuggestionChipPressed(int id) { ...@@ -144,7 +145,7 @@ void AssistantInteractionController::OnSuggestionChipPressed(int id) {
// If the suggestion contains a non-empty action url, we will handle the // If the suggestion contains a non-empty action url, we will handle the
// suggestion chip pressed event by launching the action url in the browser. // suggestion chip pressed event by launching the action url in the browser.
if (!suggestion->action_url.is_empty()) { if (!suggestion->action_url.is_empty()) {
OpenUrl(suggestion->action_url); assistant_controller_->OpenUrl(suggestion->action_url);
return; return;
} }
...@@ -208,12 +209,7 @@ void AssistantInteractionController::OnOpenUrlResponse(const GURL& url) { ...@@ -208,12 +209,7 @@ void AssistantInteractionController::OnOpenUrlResponse(const GURL& url) {
InteractionState::kActive) { InteractionState::kActive) {
return; return;
} }
assistant_controller_->OpenUrl(url);
OpenUrl(url);
}
void AssistantInteractionController::OnOpenUrlFromTab(const GURL& url) {
OpenUrl(url);
} }
void AssistantInteractionController::OnDialogPlateButtonPressed( void AssistantInteractionController::OnDialogPlateButtonPressed(
...@@ -272,13 +268,4 @@ void AssistantInteractionController::StopActiveInteraction() { ...@@ -272,13 +268,4 @@ void AssistantInteractionController::StopActiveInteraction() {
assistant_->StopActiveInteraction(); assistant_->StopActiveInteraction();
} }
// TODO(dmblack): Move OpenUrl logic into AssistantController. The interaction
// sub-controller shouldn't need to talk to the UI controller directly.
void AssistantInteractionController::OpenUrl(const GURL& url) {
Shell::Get()->new_window_controller()->NewTabWithUrl(url);
if (assistant_ui_controller_)
assistant_ui_controller_->HideUi(AssistantSource::kUnspecified);
}
} // namespace ash } // namespace ash
...@@ -14,13 +14,13 @@ ...@@ -14,13 +14,13 @@
#include "ash/assistant/model/assistant_ui_model_observer.h" #include "ash/assistant/model/assistant_ui_model_observer.h"
#include "ash/assistant/ui/dialog_plate/dialog_plate.h" #include "ash/assistant/ui/dialog_plate/dialog_plate.h"
#include "ash/highlighter/highlighter_controller.h" #include "ash/highlighter/highlighter_controller.h"
#include "ash/public/interfaces/web_contents_manager.mojom.h"
#include "base/macros.h" #include "base/macros.h"
#include "chromeos/services/assistant/public/mojom/assistant.mojom.h" #include "chromeos/services/assistant/public/mojom/assistant.mojom.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding.h"
namespace ash { namespace ash {
class AssistantController;
class AssistantInteractionModelObserver; class AssistantInteractionModelObserver;
class AssistantUiController; class AssistantUiController;
...@@ -29,8 +29,7 @@ class AssistantInteractionController ...@@ -29,8 +29,7 @@ class AssistantInteractionController
public AssistantInteractionModelObserver, public AssistantInteractionModelObserver,
public AssistantUiModelObserver, public AssistantUiModelObserver,
public HighlighterController::Observer, public HighlighterController::Observer,
public DialogPlateObserver, public DialogPlateObserver {
public mojom::ManagedWebContentsOpenUrlDelegate {
public: public:
using AssistantSuggestion = chromeos::assistant::mojom::AssistantSuggestion; using AssistantSuggestion = chromeos::assistant::mojom::AssistantSuggestion;
using AssistantSuggestionPtr = using AssistantSuggestionPtr =
...@@ -38,7 +37,8 @@ class AssistantInteractionController ...@@ -38,7 +37,8 @@ class AssistantInteractionController
using AssistantInteractionResolution = using AssistantInteractionResolution =
chromeos::assistant::mojom::AssistantInteractionResolution; chromeos::assistant::mojom::AssistantInteractionResolution;
AssistantInteractionController(); explicit AssistantInteractionController(
AssistantController* assistant_controller);
~AssistantInteractionController() override; ~AssistantInteractionController() override;
// Provides a pointer to the |assistant| owned by AssistantController. // Provides a pointer to the |assistant| owned by AssistantController.
...@@ -87,9 +87,6 @@ class AssistantInteractionController ...@@ -87,9 +87,6 @@ class AssistantInteractionController
void OnSpeechRecognitionFinalResult(const std::string& final_result) override; void OnSpeechRecognitionFinalResult(const std::string& final_result) override;
void OnSpeechLevelUpdated(float speech_level) override; void OnSpeechLevelUpdated(float speech_level) override;
// mojom::ManagedWebContentsOpenUrlDelegate:
void OnOpenUrlFromTab(const GURL& url) override;
// DialogPlateObserver: // DialogPlateObserver:
void OnDialogPlateButtonPressed(DialogPlateButtonId id) override; void OnDialogPlateButtonPressed(DialogPlateButtonId id) override;
void OnDialogPlateContentsCommitted(const std::string& text) override; void OnDialogPlateContentsCommitted(const std::string& text) override;
...@@ -101,6 +98,8 @@ class AssistantInteractionController ...@@ -101,6 +98,8 @@ class AssistantInteractionController
void OpenUrl(const GURL& url); void OpenUrl(const GURL& url);
AssistantController* const assistant_controller_; // Owned by Shell.
// Owned by AssistantController. // Owned by AssistantController.
chromeos::assistant::mojom::Assistant* assistant_ = nullptr; chromeos::assistant::mojom::Assistant* assistant_ = nullptr;
......
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