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

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

Issue 2332693003: Show media router toolbar icon ephemerally for active local routes and issues (Closed)
Patch Set: Address Mike's comments 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 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 <string>
6
5 #include "base/logging.h" 7 #include "base/logging.h"
6 #include "base/metrics/user_metrics.h" 8 #include "base/metrics/user_metrics.h"
7 #include "chrome/app/chrome_command_ids.h" 9 #include "chrome/app/chrome_command_ids.h"
8 #include "chrome/browser/extensions/component_migration_helper.h" 10 #include "chrome/browser/extensions/component_migration_helper.h"
9 #include "chrome/browser/media/router/media_router_factory.h" 11 #include "chrome/browser/media/router/media_router_factory.h"
10 #include "chrome/browser/media/router/mojo/media_router_mojo_impl.h" 12 #include "chrome/browser/media/router/mojo/media_router_mojo_impl.h"
11 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/ui/browser.h" 14 #include "chrome/browser/ui/browser.h"
13 #include "chrome/browser/ui/singleton_tabs.h" 15 #include "chrome/browser/ui/singleton_tabs.h"
14 #include "chrome/browser/ui/toolbar/component_toolbar_actions_factory.h" 16 #include "chrome/browser/ui/toolbar/component_toolbar_actions_factory.h"
15 #include "chrome/browser/ui/toolbar/media_router_contextual_menu.h" 17 #include "chrome/browser/ui/toolbar/media_router_contextual_menu.h"
16 #include "chrome/browser/ui/toolbar/toolbar_actions_model.h" 18 #include "chrome/browser/ui/toolbar/toolbar_actions_model.h"
19 #include "chrome/common/pref_names.h"
17 #include "chrome/common/url_constants.h" 20 #include "chrome/common/url_constants.h"
18 #include "chrome/grit/chromium_strings.h" 21 #include "chrome/grit/chromium_strings.h"
19 #include "chrome/grit/generated_resources.h" 22 #include "chrome/grit/generated_resources.h"
20 #include "extensions/common/constants.h" 23 #include "extensions/common/constants.h"
21 #include "ui/base/models/menu_model_delegate.h" 24 #include "ui/base/models/menu_model_delegate.h"
22 25
23 #if defined(GOOGLE_CHROME_BUILD) 26 #if defined(GOOGLE_CHROME_BUILD)
24 #include "chrome/browser/signin/signin_manager_factory.h" 27 #include "chrome/browser/signin/signin_manager_factory.h"
25 #include "chrome/common/pref_names.h"
26 #include "components/prefs/pref_service.h"
27 #include "components/signin/core/browser/signin_manager.h" 28 #include "components/signin/core/browser/signin_manager.h"
28 #endif // defined(GOOGLE_CHROME_BUILD) 29 #endif // defined(GOOGLE_CHROME_BUILD)
29 30
30 MediaRouterContextualMenu::MediaRouterContextualMenu(Browser* browser) 31 MediaRouterContextualMenu::MediaRouterContextualMenu(Browser* browser)
32 : MediaRouterContextualMenu(browser,
33 ToolbarActionsModel::Get(browser->profile())) {}
34
35 MediaRouterContextualMenu::~MediaRouterContextualMenu() {}
36
37 MediaRouterContextualMenu::MediaRouterContextualMenu(
38 Browser* browser,
39 ToolbarActionsModel* toolbar_actions_model)
31 : browser_(browser), 40 : browser_(browser),
32 menu_model_(this) { 41 menu_model_(this),
42 toolbar_actions_model_(toolbar_actions_model) {
Devlin 2016/09/21 17:15:12 It looks like we only ever use this for the Compon
takumif 2016/09/21 17:27:15 This is to be able to inject a non-NULL ToolbarAct
Devlin 2016/09/21 17:32:57 What uses it that needs it to be non-null, rather
takumif 2016/09/21 17:45:45 Right, it's only used for the migration helper. Bu
Devlin 2016/09/21 17:52:45 Why? We have a ctor explicitly for injecting depe
takumif 2016/09/21 17:59:16 I was thinking that if the real ctor gets called i
Devlin 2016/09/21 18:17:30 So these are tests that construct a MediaRouterCon
takumif 2016/09/21 18:49:31 Sorry, I'd mistakenly thought that both the MRCont
33 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_ABOUT, 43 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_ABOUT,
34 IDS_MEDIA_ROUTER_ABOUT); 44 IDS_MEDIA_ROUTER_ABOUT);
35 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 45 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR);
36 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_LEARN_MORE, 46 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_LEARN_MORE,
37 IDS_MEDIA_ROUTER_LEARN_MORE); 47 IDS_MEDIA_ROUTER_LEARN_MORE);
38 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_HELP, 48 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_HELP,
39 IDS_MEDIA_ROUTER_HELP); 49 IDS_MEDIA_ROUTER_HELP);
40 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_REMOVE_TOOLBAR_ACTION, 50 menu_model_.AddCheckItemWithStringId(
41 IDS_MEDIA_ROUTER_REMOVE_TOOLBAR_ACTION); 51 IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION,
52 IDS_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION);
42 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); 53 menu_model_.AddSeparator(ui::NORMAL_SEPARATOR);
43 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) 54 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
44 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_MANAGE_DEVICES, 55 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_MANAGE_DEVICES,
45 IDS_MEDIA_ROUTER_MANAGE_DEVICES); 56 IDS_MEDIA_ROUTER_MANAGE_DEVICES);
46 #endif 57 #endif
47 #if defined(GOOGLE_CHROME_BUILD) 58 #if defined(GOOGLE_CHROME_BUILD)
48 menu_model_.AddCheckItemWithStringId(IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE, 59 menu_model_.AddCheckItemWithStringId(IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE,
49 IDS_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE); 60 IDS_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE);
50 #endif // defined(GOOGLE_CHROME_BUILD) 61 #endif // defined(GOOGLE_CHROME_BUILD)
51 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_REPORT_ISSUE, 62 menu_model_.AddItemWithStringId(IDC_MEDIA_ROUTER_REPORT_ISSUE,
52 IDS_MEDIA_ROUTER_REPORT_ISSUE); 63 IDS_MEDIA_ROUTER_REPORT_ISSUE);
53 } 64 }
54 65
55 MediaRouterContextualMenu::~MediaRouterContextualMenu() { 66 bool MediaRouterContextualMenu::GetAlwaysShowActionPref() const {
67 return toolbar_actions_model_->component_migration_helper()
68 ->GetComponentActionPref(
69 ComponentToolbarActionsFactory::kMediaRouterActionId);
70 }
71
72 void MediaRouterContextualMenu::SetAlwaysShowActionPref(bool always_show) {
73 toolbar_actions_model_->component_migration_helper()->SetComponentActionPref(
74 ComponentToolbarActionsFactory::kMediaRouterActionId, always_show);
56 } 75 }
57 76
58 bool MediaRouterContextualMenu::IsCommandIdChecked(int command_id) const { 77 bool MediaRouterContextualMenu::IsCommandIdChecked(int command_id) const {
59 #if defined(GOOGLE_CHROME_BUILD) 78 #if defined(GOOGLE_CHROME_BUILD)
60 if (command_id == IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE) { 79 if (command_id == IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE) {
61 return browser_->profile()->GetPrefs()->GetBoolean( 80 return browser_->profile()->GetPrefs()->GetBoolean(
62 prefs::kMediaRouterEnableCloudServices); 81 prefs::kMediaRouterEnableCloudServices);
63 } 82 }
64 #endif // defined(GOOGLE_CHROME_BUILD) 83 #endif // defined(GOOGLE_CHROME_BUILD)
84 if (command_id == IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION) {
85 return GetAlwaysShowActionPref();
86 }
65 return false; 87 return false;
66 } 88 }
67 89
68 bool MediaRouterContextualMenu::IsCommandIdEnabled(int command_id) const { 90 bool MediaRouterContextualMenu::IsCommandIdEnabled(int command_id) const {
69 return true; 91 return true;
70 } 92 }
71 93
72 bool MediaRouterContextualMenu::IsCommandIdVisible(int command_id) const { 94 bool MediaRouterContextualMenu::IsCommandIdVisible(int command_id) const {
73 #if defined(GOOGLE_CHROME_BUILD) 95 #if defined(GOOGLE_CHROME_BUILD)
74 if (command_id == IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE) { 96 if (command_id == IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE) {
(...skipping 16 matching lines...) Expand all
91 const char kCastLearnMorePageUrl[] = 113 const char kCastLearnMorePageUrl[] =
92 "https://support.google.com/chromecast/answer/2998338"; 114 "https://support.google.com/chromecast/answer/2998338";
93 115
94 #if defined(GOOGLE_CHROME_BUILD) 116 #if defined(GOOGLE_CHROME_BUILD)
95 PrefService* pref_service; 117 PrefService* pref_service;
96 #endif // defined(GOOGLE_CHROME_BUILD) 118 #endif // defined(GOOGLE_CHROME_BUILD)
97 switch (command_id) { 119 switch (command_id) {
98 case IDC_MEDIA_ROUTER_ABOUT: 120 case IDC_MEDIA_ROUTER_ABOUT:
99 chrome::ShowSingletonTab(browser_, GURL(kAboutPageUrl)); 121 chrome::ShowSingletonTab(browser_, GURL(kAboutPageUrl));
100 break; 122 break;
123 case IDC_MEDIA_ROUTER_ALWAYS_SHOW_TOOLBAR_ACTION:
124 SetAlwaysShowActionPref(!GetAlwaysShowActionPref());
125 break;
101 #if defined(GOOGLE_CHROME_BUILD) 126 #if defined(GOOGLE_CHROME_BUILD)
102 case IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE: 127 case IDC_MEDIA_ROUTER_CLOUD_SERVICES_TOGGLE:
103 pref_service = browser_->profile()->GetPrefs(); 128 pref_service = browser_->profile()->GetPrefs();
104 pref_service->SetBoolean(prefs::kMediaRouterEnableCloudServices, 129 pref_service->SetBoolean(prefs::kMediaRouterEnableCloudServices,
105 !pref_service->GetBoolean(prefs::kMediaRouterEnableCloudServices)); 130 !pref_service->GetBoolean(prefs::kMediaRouterEnableCloudServices));
106 131
107 // If this has been set before, this is a no-op. 132 // If this has been set before, this is a no-op.
108 pref_service->SetBoolean(prefs::kMediaRouterCloudServicesPrefSet, 133 pref_service->SetBoolean(prefs::kMediaRouterCloudServicesPrefSet, true);
109 true);
110 break; 134 break;
111 #endif // defined(GOOGLE_CHROME_BUILD) 135 #endif // defined(GOOGLE_CHROME_BUILD)
112 case IDC_MEDIA_ROUTER_HELP: 136 case IDC_MEDIA_ROUTER_HELP:
113 chrome::ShowSingletonTab(browser_, GURL(kCastHelpCenterPageUrl)); 137 chrome::ShowSingletonTab(browser_, GURL(kCastHelpCenterPageUrl));
114 base::RecordAction(base::UserMetricsAction( 138 base::RecordAction(base::UserMetricsAction(
115 "MediaRouter_Ui_Navigate_Help")); 139 "MediaRouter_Ui_Navigate_Help"));
116 break; 140 break;
117 case IDC_MEDIA_ROUTER_LEARN_MORE: 141 case IDC_MEDIA_ROUTER_LEARN_MORE:
118 chrome::ShowSingletonTab(browser_, GURL(kCastLearnMorePageUrl)); 142 chrome::ShowSingletonTab(browser_, GURL(kCastLearnMorePageUrl));
119 break; 143 break;
120 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) 144 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
121 case IDC_MEDIA_ROUTER_MANAGE_DEVICES: 145 case IDC_MEDIA_ROUTER_MANAGE_DEVICES:
122 chrome::ShowSingletonTab(browser_, GURL(chrome::kChromeUICastURL)); 146 chrome::ShowSingletonTab(browser_, GURL(chrome::kChromeUICastURL));
123 break; 147 break;
124 #endif 148 #endif
125 case IDC_MEDIA_ROUTER_REMOVE_TOOLBAR_ACTION:
126 RemoveMediaRouterComponentAction();
127 break;
128 case IDC_MEDIA_ROUTER_REPORT_ISSUE: 149 case IDC_MEDIA_ROUTER_REPORT_ISSUE:
129 ReportIssue(); 150 ReportIssue();
130 break; 151 break;
131 default: 152 default:
132 NOTREACHED(); 153 NOTREACHED();
133 } 154 }
134 } 155 }
135 156
136 void MediaRouterContextualMenu::ReportIssue() { 157 void MediaRouterContextualMenu::ReportIssue() {
137 // Opens feedback page loaded from the media router extension. 158 // Opens feedback page loaded from the media router extension.
138 // This is temporary until feedback UI is redesigned. 159 // This is temporary until feedback UI is redesigned.
139 // TODO(crbug.com/597778): remove reference to MediaRouterMojoImpl 160 // TODO(crbug.com/597778): remove reference to MediaRouterMojoImpl
140 media_router::MediaRouterMojoImpl* media_router = 161 media_router::MediaRouterMojoImpl* media_router =
141 static_cast<media_router::MediaRouterMojoImpl*>( 162 static_cast<media_router::MediaRouterMojoImpl*>(
142 media_router::MediaRouterFactory::GetApiForBrowserContext( 163 media_router::MediaRouterFactory::GetApiForBrowserContext(
143 static_cast<content::BrowserContext*>(browser_->profile()))); 164 static_cast<content::BrowserContext*>(browser_->profile())));
144 if (media_router->media_route_provider_extension_id().empty()) 165 if (media_router->media_route_provider_extension_id().empty())
145 return; 166 return;
146 std::string feedback_url(extensions::kExtensionScheme + 167 std::string feedback_url(extensions::kExtensionScheme +
147 std::string(url::kStandardSchemeSeparator) + 168 std::string(url::kStandardSchemeSeparator) +
148 media_router->media_route_provider_extension_id() + 169 media_router->media_route_provider_extension_id() +
149 "/feedback.html"); 170 "/feedback.html");
150 chrome::ShowSingletonTab(browser_, GURL(feedback_url)); 171 chrome::ShowSingletonTab(browser_, GURL(feedback_url));
151 } 172 }
152
153 void MediaRouterContextualMenu::RemoveMediaRouterComponentAction() {
154 ToolbarActionsModel::Get(browser_->profile())->component_migration_helper()
155 ->OnActionRemoved(ComponentToolbarActionsFactory::kMediaRouterActionId);
156 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698