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

Side by Side Diff: chrome/browser/ui/app_list/extension_app_item.cc

Issue 10918103: Give platform apps control over launcher right-click context menu. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/app_list/extension_app_item.h" 5 #include "chrome/browser/ui/app_list/extension_app_item.h"
6 6
7 #include "base/utf_string_conversions.h" 7 #include "base/utf_string_conversions.h"
8 #include "chrome/app/chrome_command_ids.h"
9 #include "chrome/browser/extensions/context_menu_manager.h"
8 #include "chrome/browser/extensions/extension_prefs.h" 10 #include "chrome/browser/extensions/extension_prefs.h"
9 #include "chrome/browser/extensions/extension_service.h" 11 #include "chrome/browser/extensions/extension_service.h"
10 #include "chrome/browser/extensions/extension_system.h" 12 #include "chrome/browser/extensions/extension_system.h"
11 #include "chrome/browser/extensions/extension_uninstall_dialog.h" 13 #include "chrome/browser/extensions/extension_uninstall_dialog.h"
12 #include "chrome/browser/extensions/management_policy.h" 14 #include "chrome/browser/extensions/management_policy.h"
13 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/ui/app_list/app_list_controller.h" 16 #include "chrome/browser/ui/app_list/app_list_controller.h"
15 #include "chrome/browser/ui/browser.h" 17 #include "chrome/browser/ui/browser.h"
16 #include "chrome/browser/ui/browser_navigator.h" 18 #include "chrome/browser/ui/browser_navigator.h"
17 #include "chrome/browser/ui/browser_tabstrip.h" 19 #include "chrome/browser/ui/browser_tabstrip.h"
18 #include "chrome/browser/ui/browser_window.h" 20 #include "chrome/browser/ui/browser_window.h"
19 #include "chrome/common/extensions/extension.h" 21 #include "chrome/common/extensions/extension.h"
20 #include "chrome/common/extensions/extension_constants.h" 22 #include "chrome/common/extensions/extension_constants.h"
21 #include "chrome/common/extensions/extension_icon_set.h" 23 #include "chrome/common/extensions/extension_icon_set.h"
24 #include "content/public/common/context_menu_params.h"
22 #include "grit/chromium_strings.h" 25 #include "grit/chromium_strings.h"
23 #include "grit/generated_resources.h" 26 #include "grit/generated_resources.h"
24 #include "ui/base/l10n/l10n_util.h" 27 #include "ui/base/l10n/l10n_util.h"
25 #include "ui/gfx/image/image.h" 28 #include "ui/gfx/image/image.h"
26 29
27 using extensions::Extension; 30 using extensions::Extension;
28 31
29 namespace { 32 namespace {
30 33
31 enum CommandId { 34 enum CommandId {
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 } else { 207 } else {
205 NOTREACHED(); 208 NOTREACHED();
206 return string16(); 209 return string16();
207 } 210 }
208 } 211 }
209 212
210 bool ExtensionAppItem::IsCommandIdChecked(int command_id) const { 213 bool ExtensionAppItem::IsCommandIdChecked(int command_id) const {
211 if (command_id >= LAUNCH_TYPE_START && command_id < LAUNCH_TYPE_LAST) { 214 if (command_id >= LAUNCH_TYPE_START && command_id < LAUNCH_TYPE_LAST) {
212 return static_cast<int>(GetExtensionLaunchType(profile_, extension_id_)) + 215 return static_cast<int>(GetExtensionLaunchType(profile_, extension_id_)) +
213 LAUNCH_TYPE_START == command_id; 216 LAUNCH_TYPE_START == command_id;
217 } else if (command_id >= IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST &&
218 command_id <= IDC_EXTENSIONS_CONTEXT_CUSTOM_LAST) {
219 return context_menu_manager_->IsCommandIdChecked(command_id);
214 } 220 }
215 return false; 221 return false;
216 } 222 }
217 223
218 bool ExtensionAppItem::IsCommandIdEnabled(int command_id) const { 224 bool ExtensionAppItem::IsCommandIdEnabled(int command_id) const {
219 if (command_id == TOGGLE_PIN) { 225 if (command_id == TOGGLE_PIN) {
220 return controller_->CanPin(); 226 return controller_->CanPin();
221 } else if (command_id == OPTIONS) { 227 } else if (command_id == OPTIONS) {
222 const Extension* extension = GetExtension(); 228 const Extension* extension = GetExtension();
223 return IsExtensionEnabled(profile_, extension_id_) && extension && 229 return IsExtensionEnabled(profile_, extension_id_) && extension &&
224 !extension->options_url().is_empty(); 230 !extension->options_url().is_empty();
225 } else if (command_id == UNINSTALL) { 231 } else if (command_id == UNINSTALL) {
226 const Extension* extension = GetExtension(); 232 const Extension* extension = GetExtension();
227 const extensions::ManagementPolicy* policy = 233 const extensions::ManagementPolicy* policy =
228 extensions::ExtensionSystem::Get(profile_)->management_policy(); 234 extensions::ExtensionSystem::Get(profile_)->management_policy();
229 return extension && 235 return extension &&
230 policy->UserMayModifySettings(extension, NULL); 236 policy->UserMayModifySettings(extension, NULL);
231 } else if (command_id == DETAILS) { 237 } else if (command_id == DETAILS) {
232 const Extension* extension = GetExtension(); 238 const Extension* extension = GetExtension();
233 return extension && extension->from_webstore(); 239 return extension && extension->from_webstore();
240 } else if (command_id >= IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST &&
241 command_id <= IDC_EXTENSIONS_CONTEXT_CUSTOM_LAST) {
242 return context_menu_manager_->IsCommandIdEnabled(command_id);
234 } 243 }
235 return true; 244 return true;
236 } 245 }
237 246
238 bool ExtensionAppItem::GetAcceleratorForCommandId( 247 bool ExtensionAppItem::GetAcceleratorForCommandId(
239 int command_id, 248 int command_id,
240 ui::Accelerator* acclelrator) { 249 ui::Accelerator* acclelrator) {
241 return false; 250 return false;
242 } 251 }
243 252
(...skipping 10 matching lines...) Expand all
254 SetExtensionLaunchType(profile_, 263 SetExtensionLaunchType(profile_,
255 extension_id_, 264 extension_id_,
256 static_cast<extensions::ExtensionPrefs::LaunchType>( 265 static_cast<extensions::ExtensionPrefs::LaunchType>(
257 command_id - LAUNCH_TYPE_START)); 266 command_id - LAUNCH_TYPE_START));
258 } else if (command_id == OPTIONS) { 267 } else if (command_id == OPTIONS) {
259 ShowExtensionOptions(); 268 ShowExtensionOptions();
260 } else if (command_id == UNINSTALL) { 269 } else if (command_id == UNINSTALL) {
261 StartExtensionUninstall(); 270 StartExtensionUninstall();
262 } else if (command_id == DETAILS) { 271 } else if (command_id == DETAILS) {
263 ShowExtensionDetails(); 272 ShowExtensionDetails();
273 } else if (command_id >= IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST &&
274 command_id <= IDC_EXTENSIONS_CONTEXT_CUSTOM_LAST) {
275 content::ContextMenuParams params;
276 // TODO(mek): maybe make page_url not required?
asargent_no_longer_on_chrome 2012/09/10 20:25:20 Yeah, I think it would be good to make page_url be
Marijn Kruisselbrink 2012/09/10 23:16:57 Done.
277 params.page_url = GURL("about:blank");
278 context_menu_manager_->ExecuteCommand(command_id, params);
264 } 279 }
265 } 280 }
266 281
267 void ExtensionAppItem::Activate(int event_flags) { 282 void ExtensionAppItem::Activate(int event_flags) {
268 const Extension* extension = GetExtension(); 283 const Extension* extension = GetExtension();
269 if (!extension) 284 if (!extension)
270 return; 285 return;
271 286
272 controller_->ActivateApp(profile_, extension->id(), event_flags); 287 controller_->ActivateApp(profile_, extension->id(), event_flags);
273 } 288 }
274 289
275 ui::MenuModel* ExtensionAppItem::GetContextMenuModel() { 290 ui::MenuModel* ExtensionAppItem::GetContextMenuModel() {
276 // No context menu for Chrome app. 291 // No context menu for Chrome app.
277 if (extension_id_ == extension_misc::kChromeAppId) 292 if (extension_id_ == extension_misc::kChromeAppId)
278 return NULL; 293 return NULL;
279 294
280 if (!context_menu_model_.get()) { 295 if (!context_menu_model_.get()) {
281 context_menu_model_.reset(new ui::SimpleMenuModel(this)); 296 context_menu_model_.reset(new ui::SimpleMenuModel(this));
297 context_menu_manager_.reset(new extensions::ContextMenuManager(
298 profile_, this, context_menu_model_.get(),
299 base::Bind(extensions::ContextMenuManager::ContextIsLauncher)));
300
282 context_menu_model_->AddItem(LAUNCH, UTF8ToUTF16(title())); 301 context_menu_model_->AddItem(LAUNCH, UTF8ToUTF16(title()));
302
303 int index = 0;
304 context_menu_manager_->AppendExtensionItems(extension_id_, string16(),
305 &index);
306
283 context_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); 307 context_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR);
284 context_menu_model_->AddItemWithStringId( 308 context_menu_model_->AddItemWithStringId(
285 TOGGLE_PIN, 309 TOGGLE_PIN,
286 controller_->IsAppPinned(extension_id_) ? 310 controller_->IsAppPinned(extension_id_) ?
287 IDS_APP_LIST_CONTEXT_MENU_UNPIN : 311 IDS_APP_LIST_CONTEXT_MENU_UNPIN :
288 IDS_APP_LIST_CONTEXT_MENU_PIN); 312 IDS_APP_LIST_CONTEXT_MENU_PIN);
289 context_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); 313 context_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR);
290 context_menu_model_->AddCheckItemWithStringId( 314 context_menu_model_->AddCheckItemWithStringId(
291 LAUNCH_TYPE_REGULAR_TAB, 315 LAUNCH_TYPE_REGULAR_TAB,
292 IDS_APP_CONTEXT_MENU_OPEN_REGULAR); 316 IDS_APP_CONTEXT_MENU_OPEN_REGULAR);
(...skipping 10 matching lines...) Expand all
303 IDS_APP_CONTEXT_MENU_OPEN_MAXIMIZED); 327 IDS_APP_CONTEXT_MENU_OPEN_MAXIMIZED);
304 context_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR); 328 context_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR);
305 context_menu_model_->AddItemWithStringId(OPTIONS, IDS_NEW_TAB_APP_OPTIONS); 329 context_menu_model_->AddItemWithStringId(OPTIONS, IDS_NEW_TAB_APP_OPTIONS);
306 context_menu_model_->AddItemWithStringId(DETAILS, IDS_NEW_TAB_APP_DETAILS); 330 context_menu_model_->AddItemWithStringId(DETAILS, IDS_NEW_TAB_APP_DETAILS);
307 context_menu_model_->AddItemWithStringId(UNINSTALL, 331 context_menu_model_->AddItemWithStringId(UNINSTALL,
308 IDS_EXTENSIONS_UNINSTALL); 332 IDS_EXTENSIONS_UNINSTALL);
309 } 333 }
310 334
311 return context_menu_model_.get(); 335 return context_menu_model_.get();
312 } 336 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698