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

Side by Side Diff: chrome/browser/renderer_context_menu/render_view_context_menu.cc

Issue 359493005: Extend contextMenus API to support browser/page actions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed AppendExtensionItemsImpl, minor cleanup, comments Created 6 years, 5 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/renderer_context_menu/render_view_context_menu.h" 5 #include "chrome/browser/renderer_context_menu/render_view_context_menu.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 10
11 #include "apps/app_load_service.h" 11 #include "apps/app_load_service.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/metrics/histogram.h" 14 #include "base/metrics/histogram.h"
15 #include "base/prefs/pref_member.h" 15 #include "base/prefs/pref_member.h"
16 #include "base/prefs/pref_service.h" 16 #include "base/prefs/pref_service.h"
17 #include "base/stl_util.h" 17 #include "base/stl_util.h"
18 #include "base/strings/string_util.h" 18 #include "base/strings/string_util.h"
19 #include "base/strings/stringprintf.h" 19 #include "base/strings/stringprintf.h"
20 #include "base/strings/utf_string_conversions.h" 20 #include "base/strings/utf_string_conversions.h"
21 #include "base/time/time.h" 21 #include "base/time/time.h"
Devlin 2014/07/15 21:25:08 nit: remove this.
gpdavis 2014/07/15 22:18:13 Nice catch! Taken care of.
22 #include "chrome/app/chrome_command_ids.h" 22 #include "chrome/app/chrome_command_ids.h"
23 #include "chrome/browser/app_mode/app_mode_utils.h" 23 #include "chrome/browser/app_mode/app_mode_utils.h"
24 #include "chrome/browser/autocomplete/autocomplete_classifier.h" 24 #include "chrome/browser/autocomplete/autocomplete_classifier.h"
25 #include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" 25 #include "chrome/browser/autocomplete/autocomplete_classifier_factory.h"
26 #include "chrome/browser/autocomplete/autocomplete_match.h" 26 #include "chrome/browser/autocomplete/autocomplete_match.h"
27 #include "chrome/browser/browser_process.h" 27 #include "chrome/browser/browser_process.h"
28 #include "chrome/browser/chrome_notification_types.h" 28 #include "chrome/browser/chrome_notification_types.h"
29 #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" 29 #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h"
30 #include "chrome/browser/devtools/devtools_window.h" 30 #include "chrome/browser/devtools/devtools_window.h"
31 #include "chrome/browser/download/download_service.h" 31 #include "chrome/browser/download/download_service.h"
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 return; 526 return;
527 527
528 base::string16 printable_selection_text = PrintableSelectionText(); 528 base::string16 printable_selection_text = PrintableSelectionText();
529 EscapeAmpersands(&printable_selection_text); 529 EscapeAmpersands(&printable_selection_text);
530 530
531 // Get a list of extension id's that have context menu items, and sort by the 531 // Get a list of extension id's that have context menu items, and sort by the
532 // top level context menu title of the extension. 532 // top level context menu title of the extension.
533 std::set<MenuItem::ExtensionKey> ids = menu_manager->ExtensionIds(); 533 std::set<MenuItem::ExtensionKey> ids = menu_manager->ExtensionIds();
534 std::vector<base::string16> sorted_menu_titles; 534 std::vector<base::string16> sorted_menu_titles;
535 std::map<base::string16, std::string> map_ids; 535 std::map<base::string16, std::string> map_ids;
536 for (std::set<MenuItem::ExtensionKey>::iterator i = ids.begin(); 536 for (std::set<MenuItem::ExtensionKey>::iterator iter = ids.begin();
537 i != ids.end(); 537 iter != ids.end();
538 ++i) { 538 ++iter) {
539 const Extension* extension = 539 const Extension* extension =
540 service->GetExtensionById(i->extension_id, false); 540 service->GetExtensionById(iter->extension_id, false);
541 // Platform apps have their context menus created directly in 541 // Platform apps have their context menus created directly in
542 // AppendPlatformAppItems. 542 // AppendPlatformAppItems.
543 if (extension && !extension->is_platform_app()) { 543 if (extension && !extension->is_platform_app()) {
544 base::string16 menu_title = extension_items_.GetTopLevelContextMenuTitle( 544 base::string16 menu_title = extension_items_.GetTopLevelContextMenuTitle(
545 *i, printable_selection_text); 545 *iter, printable_selection_text);
546 map_ids[menu_title] = i->extension_id; 546 map_ids[menu_title] = iter->extension_id;
547 sorted_menu_titles.push_back(menu_title); 547 sorted_menu_titles.push_back(menu_title);
548 } 548 }
549 } 549 }
550 if (sorted_menu_titles.empty()) 550 if (sorted_menu_titles.empty())
551 return; 551 return;
552 552
553 const std::string app_locale = g_browser_process->GetApplicationLocale(); 553 const std::string app_locale = g_browser_process->GetApplicationLocale();
554 l10n_util::SortStrings16(app_locale, &sorted_menu_titles); 554 l10n_util::SortStrings16(app_locale, &sorted_menu_titles);
555 555
556 int index = 0; 556 int index = 0;
557 base::TimeTicks begin = base::TimeTicks::Now(); 557 for (std::vector<base::string16>::iterator iter = sorted_menu_titles.begin();
558 for (size_t i = 0; i < sorted_menu_titles.size(); ++i) { 558 iter != sorted_menu_titles.end();
559 const std::string& id = map_ids[sorted_menu_titles[i]]; 559 ++iter) {
560 const MenuItem::ExtensionKey extension_key(id); 560 const std::string& id = map_ids[*iter];
561 extension_items_.AppendExtensionItems( 561 extension_items_.AppendExtensionItems(MenuItem::ExtensionKey(id),
562 extension_key, printable_selection_text, &index); 562 printable_selection_text,
563 &index,
564 true); // include_icons
Yoyo Zhou 2014/07/15 23:35:00 nit: two spaces before // comments
gpdavis 2014/07/16 01:11:10 Done.
563 } 565 }
564
565 UMA_HISTOGRAM_TIMES("Extensions.ContextMenus_BuildTime",
566 base::TimeTicks::Now() - begin);
567 UMA_HISTOGRAM_COUNTS("Extensions.ContextMenus_ItemCount", index);
568 } 566 }
569 567
570 void RenderViewContextMenu::AppendCurrentExtensionItems() { 568 void RenderViewContextMenu::AppendCurrentExtensionItems() {
571 // Avoid appending extension related items when |extension| is null. 569 // Avoid appending extension related items when |extension| is null.
572 // For Panel, this happens when the panel is navigated to a url outside of the 570 // For Panel, this happens when the panel is navigated to a url outside of the
573 // extension's package. 571 // extension's package.
574 const Extension* extension = GetExtension(); 572 const Extension* extension = GetExtension();
575 if (extension) { 573 if (extension) {
576 // Only add extension items from this extension. 574 // Only add extension items from this extension.
577 int index = 0; 575 int index = 0;
578 const MenuItem::ExtensionKey key( 576 const MenuItem::ExtensionKey key(
579 extension->id(), WebViewGuest::GetViewInstanceId(source_web_contents_)); 577 extension->id(), WebViewGuest::GetViewInstanceId(source_web_contents_));
580 extension_items_.AppendExtensionItems( 578 extension_items_.AppendExtensionItems(key,
581 key, PrintableSelectionText(), &index); 579 PrintableSelectionText(),
580 &index,
581 true); // include_icons
582 } 582 }
583 } 583 }
584 584
585 void RenderViewContextMenu::InitMenu() { 585 void RenderViewContextMenu::InitMenu() {
586 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_CUSTOM)) { 586 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_CUSTOM)) {
587 AppendCustomItems(); 587 AppendCustomItems();
588 588
589 const bool has_selection = !params_.selection_text.empty(); 589 const bool has_selection = !params_.selection_text.empty();
590 if (has_selection) { 590 if (has_selection) {
591 // We will add more items if there's a selection, so add a separator. 591 // We will add more items if there's a selection, so add a separator.
(...skipping 1401 matching lines...) Expand 10 before | Expand all | Expand 10 after
1993 source_web_contents_->GetRenderViewHost()-> 1993 source_web_contents_->GetRenderViewHost()->
1994 ExecuteMediaPlayerActionAtLocation(location, action); 1994 ExecuteMediaPlayerActionAtLocation(location, action);
1995 } 1995 }
1996 1996
1997 void RenderViewContextMenu::PluginActionAt( 1997 void RenderViewContextMenu::PluginActionAt(
1998 const gfx::Point& location, 1998 const gfx::Point& location,
1999 const WebPluginAction& action) { 1999 const WebPluginAction& action) {
2000 source_web_contents_->GetRenderViewHost()-> 2000 source_web_contents_->GetRenderViewHost()->
2001 ExecutePluginActionAtLocation(location, action); 2001 ExecutePluginActionAtLocation(location, action);
2002 } 2002 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698