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

Side by Side Diff: chrome/browser/ui/toolbar/media_router_contextual_menu.cc

Issue 2721953002: [Media Router] Add "Hide in menu/Show in toolbar" option to Cast toolbar icon (Closed)
Patch Set: Address Jennifer's and Mike's comments Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/toolbar/media_router_contextual_menu.h" 5 #include "chrome/browser/ui/toolbar/media_router_contextual_menu.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/metrics/user_metrics.h" 10 #include "base/metrics/user_metrics.h"
(...skipping 11 matching lines...) Expand all
22 #include "chrome/common/url_constants.h" 22 #include "chrome/common/url_constants.h"
23 #include "chrome/grit/chromium_strings.h" 23 #include "chrome/grit/chromium_strings.h"
24 #include "chrome/grit/generated_resources.h" 24 #include "chrome/grit/generated_resources.h"
25 #include "components/signin/core/browser/signin_manager.h" 25 #include "components/signin/core/browser/signin_manager.h"
26 #include "extensions/common/constants.h" 26 #include "extensions/common/constants.h"
27 #include "ui/base/models/menu_model_delegate.h" 27 #include "ui/base/models/menu_model_delegate.h"
28 #include "ui/gfx/color_palette.h" 28 #include "ui/gfx/color_palette.h"
29 #include "ui/gfx/paint_vector_icon.h" 29 #include "ui/gfx/paint_vector_icon.h"
30 #include "ui/gfx/vector_icons_public.h" 30 #include "ui/gfx/vector_icons_public.h"
31 31
32 MediaRouterContextualMenu::MediaRouterContextualMenu(Browser* browser) 32 // static
33 : MediaRouterContextualMenu( 33 std::unique_ptr<MediaRouterContextualMenu>
34 browser, 34 MediaRouterContextualMenu::CreateForToolbar(Browser* browser) {
35 MediaRouterActionController::IsActionShownByPolicy( 35 return base::MakeUnique<MediaRouterContextualMenu>(
36 browser->profile())) {} 36 browser, true,
37 MediaRouterActionController::IsActionShownByPolicy(browser->profile()));
38 }
39
40 // static
41 std::unique_ptr<MediaRouterContextualMenu>
42 MediaRouterContextualMenu::CreateForOverflowMenu(Browser* browser) {
43 return base::MakeUnique<MediaRouterContextualMenu>(
44 browser, false,
45 MediaRouterActionController::IsActionShownByPolicy(browser->profile()));
46 }
37 47
38 MediaRouterContextualMenu::MediaRouterContextualMenu(Browser* browser, 48 MediaRouterContextualMenu::MediaRouterContextualMenu(Browser* browser,
49 bool is_action_in_toolbar,
39 bool shown_by_policy) 50 bool shown_by_policy)
40 : browser_(browser), menu_model_(this) { 51 : browser_(browser),
52 menu_model_(this),
53 is_action_in_toolbar_(is_action_in_toolbar) {
41 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_ABOUT, 54 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_ABOUT,
42 IDS_MEDIA_ROUTER_ABOUT); 55 IDS_MEDIA_ROUTER_ABOUT);
43 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 56 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR);
44 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_LEARN_MORE, 57 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_LEARN_MORE,
45 IDS_MEDIA_ROUTER_LEARN_MORE); 58 IDS_MEDIA_ROUTER_LEARN_MORE);
46 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_HELP, 59 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_HELP,
47 IDS_MEDIA_ROUTER_HELP); 60 IDS_MEDIA_ROUTER_HELP);
48 if (shown_by_policy) { 61 if (shown_by_policy) {
49 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_SHOWN_BY_POLICY, 62 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_SHOWN_BY_POLICY,
50 IDS_MEDIA_ROUTER_SHOWN_BY_POLICY); 63 IDS_MEDIA_ROUTER_SHOWN_BY_POLICY);
51 menu_model_.SetIcon( 64 menu_model_.SetIcon(
52 menu_model_.GetIndexOfCommandId(IDC_MEDIA_ROUTER_SHOWN_BY_POLICY), 65 menu_model_.GetIndexOfCommandId(IDC_MEDIA_ROUTER_SHOWN_BY_POLICY),
53 gfx::Image(gfx::CreateVectorIcon(gfx::VectorIconId::BUSINESS, 16, 66 gfx::Image(gfx::CreateVectorIcon(gfx::VectorIconId::BUSINESS, 16,
54 gfx::kChromeIconGrey))); 67 gfx::kChromeIconGrey)));
55 } else { 68 } else {
56 menu_model_.AddCheckItemWithStringId( 69 menu_model_.AddCheckItemWithStringId(
57 IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION, 70 IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION,
58 IDS_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION); 71 IDS_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION);
59 } 72 }
73 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_SHOW_IN_TOOLBAR,
74 GetChangeVisibilityTextId());
60 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 75 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR);
61 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) 76 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
62 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_MANAGE_DEVICES, 77 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_MANAGE_DEVICES,
63 IDS_MEDIA_ROUTER_MANAGE_DEVICES); 78 IDS_MEDIA_ROUTER_MANAGE_DEVICES);
64 #endif 79 #endif
65 menu_model_.AddCheckItemWithStringId(IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE, 80 menu_model_.AddCheckItemWithStringId(IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE,
66 IDS_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE); 81 IDS_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE);
67 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_REPORT_ISSUE, 82 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_REPORT_ISSUE,
68 IDS_MEDIA_ROUTER_REPORT_ISSUE); 83 IDS_MEDIA_ROUTER_REPORT_ISSUE);
69 } 84 }
(...skipping 14 matching lines...) Expand all
84 if (command_id == IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE) { 99 if (command_id == IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE) {
85 return browser_->profile()->GetPrefs()->GetBoolean( 100 return browser_->profile()->GetPrefs()->GetBoolean(
86 prefs::kMediaRouterEnableCloudServices); 101 prefs::kMediaRouterEnableCloudServices);
87 } 102 }
88 if (command_id == IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION) 103 if (command_id == IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION)
89 return GetAlwaysShowActionPref(); 104 return GetAlwaysShowActionPref();
90 return false; 105 return false;
91 } 106 }
92 107
93 bool MediaRouterContextualMenu::IsCommandIdEnabled(int command_id) const { 108 bool MediaRouterContextualMenu::IsCommandIdEnabled(int command_id) const {
109 // If the action is in the ephemeral state, disable the menu item for moving
110 // it between the toolbar and the overflow menu, since the preference would
111 // not persist.
112 if (command_id == IDC_MEDIA_ROUTER_SHOW_IN_TOOLBAR)
113 return GetAlwaysShowActionPref();
94 return command_id != IDC_MEDIA_ROUTER_SHOWN_BY_POLICY; 114 return command_id != IDC_MEDIA_ROUTER_SHOWN_BY_POLICY;
95 } 115 }
96 116
97 bool MediaRouterContextualMenu::IsCommandIdVisible(int command_id) const { 117 bool MediaRouterContextualMenu::IsCommandIdVisible(int command_id) const {
98 if (command_id == IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE) { 118 if (command_id == IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE) {
99 // Cloud services preference is not set or used if the user is not signed 119 // Cloud services preference is not set or used if the user is not signed
100 // in. 120 // in.
101 SigninManagerBase* signin_manager = 121 SigninManagerBase* signin_manager =
102 SigninManagerFactory::GetForProfile(browser_->profile()); 122 SigninManagerFactory::GetForProfile(browser_->profile());
103 return signin_manager && signin_manager->IsAuthenticated(); 123 return signin_manager && signin_manager->IsAuthenticated();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 chrome::ShowSingletonTab(browser_, GURL(kCastLearnMorePageUrl)); 159 chrome::ShowSingletonTab(browser_, GURL(kCastLearnMorePageUrl));
140 break; 160 break;
141 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) 161 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
142 case IDC_MEDIA_ROUTER_MANAGE_DEVICES: 162 case IDC_MEDIA_ROUTER_MANAGE_DEVICES:
143 chrome::ShowSingletonTab(browser_, GURL(chrome::kChromeUICastURL)); 163 chrome::ShowSingletonTab(browser_, GURL(chrome::kChromeUICastURL));
144 break; 164 break;
145 #endif 165 #endif
146 case IDC_MEDIA_ROUTER_REPORT_ISSUE: 166 case IDC_MEDIA_ROUTER_REPORT_ISSUE:
147 ReportIssue(); 167 ReportIssue();
148 break; 168 break;
169 case IDC_MEDIA_ROUTER_SHOW_IN_TOOLBAR:
170 ToolbarActionsModel::Get(browser_->profile())
171 ->SetActionVisibility(
172 ComponentToolbarActionsFactory::kMediaRouterActionId,
173 !is_action_in_toolbar_);
174 break;
149 default: 175 default:
150 NOTREACHED(); 176 NOTREACHED();
151 } 177 }
152 } 178 }
153 179
154 void MediaRouterContextualMenu::ReportIssue() { 180 void MediaRouterContextualMenu::ReportIssue() {
155 // Opens feedback page loaded from the media router extension. 181 // Opens feedback page loaded from the media router extension.
156 // This is temporary until feedback UI is redesigned. 182 // This is temporary until feedback UI is redesigned.
157 // TODO(crbug.com/597778): remove reference to MediaRouterMojoImpl 183 // TODO(crbug.com/597778): remove reference to MediaRouterMojoImpl
158 media_router::MediaRouterMojoImpl* media_router = 184 media_router::MediaRouterMojoImpl* media_router =
159 static_cast<media_router::MediaRouterMojoImpl*>( 185 static_cast<media_router::MediaRouterMojoImpl*>(
160 media_router::MediaRouterFactory::GetApiForBrowserContext( 186 media_router::MediaRouterFactory::GetApiForBrowserContext(
161 static_cast<content::BrowserContext*>(browser_->profile()))); 187 static_cast<content::BrowserContext*>(browser_->profile())));
162 if (media_router->media_route_provider_extension_id().empty()) 188 if (media_router->media_route_provider_extension_id().empty())
163 return; 189 return;
164 std::string feedback_url(extensions::kExtensionScheme + 190 std::string feedback_url(extensions::kExtensionScheme +
165 std::string(url::kStandardSchemeSeparator) + 191 std::string(url::kStandardSchemeSeparator) +
166 media_router->media_route_provider_extension_id() + 192 media_router->media_route_provider_extension_id() +
167 "/feedback.html"); 193 "/feedback.html");
168 chrome::ShowSingletonTab(browser_, GURL(feedback_url)); 194 chrome::ShowSingletonTab(browser_, GURL(feedback_url));
169 } 195 }
196
197 int MediaRouterContextualMenu::GetChangeVisibilityTextId() {
198 return is_action_in_toolbar_ ? IDS_EXTENSIONS_HIDE_BUTTON_IN_MENU
199 : IDS_EXTENSIONS_SHOW_BUTTON_IN_TOOLBAR;
200 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698