Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3481)

Unified Diff: chrome/browser/ui/toolbar/media_router_action_controller.cc

Issue 2294973002: Create MediaRouterActionController and MediaRouterUIService (Closed)
Patch Set: Modify BUILD.gn files, rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/toolbar/media_router_action_controller.cc
diff --git a/chrome/browser/ui/toolbar/media_router_action_controller.cc b/chrome/browser/ui/toolbar/media_router_action_controller.cc
new file mode 100644
index 0000000000000000000000000000000000000000..722745255b949eb1d22bd56fda177439e377fe63
--- /dev/null
+++ b/chrome/browser/ui/toolbar/media_router_action_controller.cc
@@ -0,0 +1,80 @@
+// Copyright 2016 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.
+
+#include "chrome/browser/ui/toolbar/media_router_action_controller.h"
+
+#include "chrome/browser/media/router/media_router_factory.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/toolbar/component_toolbar_actions_factory.h"
+#include "chrome/browser/ui/toolbar/toolbar_actions_model.h"
+#include "chrome/common/pref_names.h"
+
+MediaRouterActionController::MediaRouterActionController(Profile* profile)
+ : MediaRouterActionController(
+ profile,
+ media_router::MediaRouterFactory::GetApiForBrowserContext(profile),
+ ToolbarActionsModel::Get(profile),
+ ToolbarActionsModel::Get(profile)->component_migration_helper()) {}
+
+MediaRouterActionController::~MediaRouterActionController() {
+ UnregisterObserver(); // media_router::IssuesObserver.
+}
+
+void MediaRouterActionController::OnIssueUpdated(
+ const media_router::Issue* issue) {
+ has_issue_ = issue != nullptr;
+ MaybeAddOrRemoveAction();
+}
+
+void MediaRouterActionController::OnRoutesUpdated(
+ const std::vector<media_router::MediaRoute>& routes,
+ const std::vector<media_router::MediaRoute::Id>& joinable_route_ids) {
+ has_local_display_route_ =
+ std::find_if(routes.begin(), routes.end(),
+ [](const media_router::MediaRoute& route) {
+ return route.is_local() && route.for_display();
+ }) != routes.end();
+
+ MaybeAddOrRemoveAction();
+}
+
+MediaRouterActionController::MediaRouterActionController(
+ Profile* profile,
+ media_router::MediaRouter* router,
+ extensions::ComponentMigrationHelper::ComponentActionDelegate*
+ component_action_delegate,
+ extensions::ComponentMigrationHelper* component_migration_helper)
+ : media_router::IssuesObserver(router),
+ media_router::MediaRoutesObserver(router),
+ profile_(profile),
+ component_action_delegate_(component_action_delegate),
+ component_migration_helper_(component_migration_helper) {
+ DCHECK(profile_);
+ DCHECK(component_action_delegate_);
+ RegisterObserver(); // media_router::IssuesObserver.
+ pref_change_registrar_.Init(profile->GetPrefs());
+ pref_change_registrar_.Add(
+ prefs::kToolbarMigratedComponentActionStatus,
+ base::Bind(&MediaRouterActionController::MaybeAddOrRemoveAction,
+ base::Unretained(this)));
+}
+
+void MediaRouterActionController::MaybeAddOrRemoveAction() {
+ if (ShouldEnableAction()) {
+ if (!component_action_delegate_->HasComponentAction(
+ ComponentToolbarActionsFactory::kMediaRouterActionId))
+ component_action_delegate_->AddComponentAction(
+ ComponentToolbarActionsFactory::kMediaRouterActionId);
+ } else if (component_action_delegate_->HasComponentAction(
+ ComponentToolbarActionsFactory::kMediaRouterActionId)) {
+ component_action_delegate_->RemoveComponentAction(
+ ComponentToolbarActionsFactory::kMediaRouterActionId);
+ }
+}
+
+bool MediaRouterActionController::ShouldEnableAction() const {
+ return has_local_display_route_ || has_issue_ ||
+ component_migration_helper_->GetComponentActionPref(
+ ComponentToolbarActionsFactory::kMediaRouterActionId);
+}

Powered by Google App Engine
This is Rietveld 408576698