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

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

Issue 9235002: Enable devtools via context menu in platform apps and popup extensions. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Comment typo Created 8 years, 10 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 (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 <algorithm> 5 #include <algorithm>
6 #include <set> 6 #include <set>
7 #include <utility> 7 #include <utility>
8 8
9 #include "chrome/browser/tab_contents/render_view_context_menu.h" 9 #include "chrome/browser/tab_contents/render_view_context_menu.h"
10 10
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 for (i = sorted_ids.begin(); 518 for (i = sorted_ids.begin();
519 i != sorted_ids.end(); ++i) { 519 i != sorted_ids.end(); ++i) {
520 AppendExtensionItems(i->second, &index); 520 AppendExtensionItems(i->second, &index);
521 } 521 }
522 UMA_HISTOGRAM_TIMES("Extensions.ContextMenus_BuildTime", 522 UMA_HISTOGRAM_TIMES("Extensions.ContextMenus_BuildTime",
523 base::TimeTicks::Now() - begin); 523 base::TimeTicks::Now() - begin);
524 UMA_HISTOGRAM_COUNTS("Extensions.ContextMenus_ItemCount", index); 524 UMA_HISTOGRAM_COUNTS("Extensions.ContextMenus_ItemCount", index);
525 } 525 }
526 526
527 void RenderViewContextMenu::InitMenu() { 527 void RenderViewContextMenu::InitMenu() {
528 if (GetPlatformApp()) { 528 const Extension* extension = GetExtension();
529 AppendPlatformAppItems(); 529 if (extension) {
530 if (extension->is_platform_app())
531 AppendPlatformAppItems(extension);
532 else
533 AppendPopupExtensionItems();
530 return; 534 return;
531 } 535 }
532 536
533 bool has_link = !params_.unfiltered_link_url.is_empty(); 537 bool has_link = !params_.unfiltered_link_url.is_empty();
534 bool has_selection = !params_.selection_text.empty(); 538 bool has_selection = !params_.selection_text.empty();
535 539
536 if (AppendCustomItems()) { 540 if (AppendCustomItems()) {
537 // If there's a selection, don't early return when there are custom items, 541 // If there's a selection, don't early return when there are custom items,
538 // but fall through to adding the normal ones after the custom ones. 542 // but fall through to adding the normal ones after the custom ones.
539 if (has_selection) { 543 if (has_selection) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 break; 594 break;
591 case WebContextMenuData::MediaTypePlugin: 595 case WebContextMenuData::MediaTypePlugin:
592 AppendPluginItems(); 596 AppendPluginItems();
593 break; 597 break;
594 #ifdef WEBCONTEXT_MEDIATYPEFILE_DEFINED 598 #ifdef WEBCONTEXT_MEDIATYPEFILE_DEFINED
595 case WebContextMenuData::MediaTypeFile: 599 case WebContextMenuData::MediaTypeFile:
596 break; 600 break;
597 #endif 601 #endif
598 } 602 }
599 603
600 if (params_.is_editable) {
601 // Add a menu item that shows suggestions.
602 if (!spelling_menu_observer_.get()) {
603 spelling_menu_observer_.reset(new SpellingMenuObserver(this));
604 }
605 if (spelling_menu_observer_.get()) {
606 observers_.AddObserver(spelling_menu_observer_.get());
607 spelling_menu_observer_->InitMenu(params_);
608 }
609 }
610
611 if (params_.is_editable) 604 if (params_.is_editable)
612 AppendEditableItems(); 605 AppendEditableItems();
613 else if (has_selection) 606 else if (has_selection)
614 AppendCopyItem(); 607 AppendCopyItem();
615 608
616 if (has_selection) 609 if (has_selection)
617 AppendSearchProvider(); 610 AppendSearchProvider();
618 611
619 if (!IsDevToolsURL(params_.page_url)) 612 if (!IsDevToolsURL(params_.page_url))
620 AppendAllExtensionItems(); 613 AppendAllExtensionItems();
621 614
622 AppendDeveloperItems(); 615 AppendDeveloperItems();
623 616
624 if (!print_preview_menu_observer_.get()) { 617 if (!print_preview_menu_observer_.get()) {
625 TabContentsWrapper* wrapper = 618 TabContentsWrapper* wrapper =
626 TabContentsWrapper::GetCurrentWrapperForContents(source_web_contents_); 619 TabContentsWrapper::GetCurrentWrapperForContents(source_web_contents_);
627 print_preview_menu_observer_.reset( 620 print_preview_menu_observer_.reset(
628 new PrintPreviewContextMenuObserver(wrapper)); 621 new PrintPreviewContextMenuObserver(wrapper));
629 } 622 }
630 observers_.AddObserver(print_preview_menu_observer_.get()); 623 observers_.AddObserver(print_preview_menu_observer_.get());
631 } 624 }
632 625
633 const Extension* RenderViewContextMenu::GetPlatformApp() const { 626 const Extension* RenderViewContextMenu::GetExtension() const {
634 ExtensionProcessManager* process_manager = 627 ExtensionProcessManager* process_manager =
635 profile_->GetExtensionProcessManager(); 628 profile_->GetExtensionProcessManager();
636 // There is no process manager in some tests. 629 // There is no process manager in some tests.
637 if (!process_manager) { 630 if (!process_manager) {
638 return NULL; 631 return NULL;
639 } 632 }
640 633
641 ExtensionProcessManager::const_iterator iter; 634 ExtensionProcessManager::const_iterator iter;
642 for (iter = process_manager->begin(); iter != process_manager->end(); 635 for (iter = process_manager->begin(); iter != process_manager->end();
643 ++iter) { 636 ++iter) {
644 ExtensionHost* host = *iter; 637 ExtensionHost* host = *iter;
645 if (host->host_contents() == source_web_contents_) { 638 if (host->host_contents() == source_web_contents_)
646 if (host->extension() && host->extension()->is_platform_app()) { 639 return host->extension();
647 return host->extension();
648 }
649 }
650 } 640 }
651 641
652 return NULL; 642 return NULL;
653 } 643 }
654 644
655 void RenderViewContextMenu::AppendPlatformAppItems() { 645 void RenderViewContextMenu::AppendPlatformAppItems(
656 const Extension* platform_app = GetPlatformApp(); 646 const Extension* platform_app) {
657 DCHECK(platform_app); 647 DCHECK(platform_app);
658 int index = 0; 648 int index = 0;
659 AppendExtensionItems(platform_app->id(), &index); 649 AppendExtensionItems(platform_app->id(), &index);
650
651 // Add dev tools for unpacked extensions.
652 if (platform_app->location() == Extension::LOAD)
653 AppendDeveloperItems();
654 }
655
656 void RenderViewContextMenu::AppendPopupExtensionItems() {
657 bool has_selection = !params_.selection_text.empty();
658
659 if (params_.is_editable)
660 AppendEditableItems();
661 else if (has_selection)
662 AppendCopyItem();
663
664 if (has_selection)
665 AppendSearchProvider();
666
667 AppendAllExtensionItems();
668 AppendDeveloperItems();
660 } 669 }
661 670
662 void RenderViewContextMenu::LookUpInDictionary() { 671 void RenderViewContextMenu::LookUpInDictionary() {
663 // Used only in the Mac port. 672 // Used only in the Mac port.
664 NOTREACHED(); 673 NOTREACHED();
665 } 674 }
666 675
667 void RenderViewContextMenu::AddMenuItem(int command_id, 676 void RenderViewContextMenu::AddMenuItem(int command_id,
668 const string16& title) { 677 const string16& title) {
669 menu_model_.AddItem(command_id, title); 678 menu_model_.AddItem(command_id, title);
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 return; 917 return;
909 menu_model_.AddItem( 918 menu_model_.AddItem(
910 IDC_CONTENT_CONTEXT_SEARCHWEBFOR, 919 IDC_CONTENT_CONTEXT_SEARCHWEBFOR,
911 l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_SEARCHWEBFOR, 920 l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_SEARCHWEBFOR,
912 default_provider->short_name(), 921 default_provider->short_name(),
913 printable_selection_text)); 922 printable_selection_text));
914 } 923 }
915 } 924 }
916 925
917 void RenderViewContextMenu::AppendEditableItems() { 926 void RenderViewContextMenu::AppendEditableItems() {
927 AppendSpellingSuggestionsSubMenu();
928
918 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_UNDO, 929 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_UNDO,
919 IDS_CONTENT_CONTEXT_UNDO); 930 IDS_CONTENT_CONTEXT_UNDO);
920 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_REDO, 931 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_REDO,
921 IDS_CONTENT_CONTEXT_REDO); 932 IDS_CONTENT_CONTEXT_REDO);
922 menu_model_.AddSeparator(); 933 menu_model_.AddSeparator();
923 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_CUT, 934 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_CUT,
924 IDS_CONTENT_CONTEXT_CUT); 935 IDS_CONTENT_CONTEXT_CUT);
925 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPY, 936 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_COPY,
926 IDS_CONTENT_CONTEXT_COPY); 937 IDS_CONTENT_CONTEXT_COPY);
927 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_PASTE, 938 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_PASTE,
(...skipping 18 matching lines...) Expand all
946 // languages. 957 // languages.
947 // This functionality is exposed as a keyboard shortcut on Windows & Linux. 958 // This functionality is exposed as a keyboard shortcut on Windows & Linux.
948 AppendBidiSubMenu(); 959 AppendBidiSubMenu();
949 #endif // OS_MACOSX 960 #endif // OS_MACOSX
950 961
951 menu_model_.AddSeparator(); 962 menu_model_.AddSeparator();
952 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SELECTALL, 963 menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SELECTALL,
953 IDS_CONTENT_CONTEXT_SELECTALL); 964 IDS_CONTENT_CONTEXT_SELECTALL);
954 } 965 }
955 966
967 void RenderViewContextMenu::AppendSpellingSuggestionsSubMenu() {
968 if (!spelling_menu_observer_.get())
969 spelling_menu_observer_.reset(new SpellingMenuObserver(this));
970 observers_.AddObserver(spelling_menu_observer_.get());
971 spelling_menu_observer_->InitMenu(params_);
972 }
973
956 void RenderViewContextMenu::AppendSpellcheckOptionsSubMenu() { 974 void RenderViewContextMenu::AppendSpellcheckOptionsSubMenu() {
957 if (!spellchecker_submenu_observer_.get()) { 975 if (!spellchecker_submenu_observer_.get()) {
958 spellchecker_submenu_observer_.reset(new SpellCheckerSubMenuObserver( 976 spellchecker_submenu_observer_.reset(new SpellCheckerSubMenuObserver(
959 this, this, kSpellcheckRadioGroup)); 977 this, this, kSpellcheckRadioGroup));
960 } 978 }
961 if (spellchecker_submenu_observer_.get()) { 979 spellchecker_submenu_observer_->InitMenu(params_);
962 spellchecker_submenu_observer_->InitMenu(params_); 980 observers_.AddObserver(spellchecker_submenu_observer_.get());
963 observers_.AddObserver(spellchecker_submenu_observer_.get());
964 }
965 } 981 }
966 982
967 void RenderViewContextMenu::AppendSpeechInputOptionsSubMenu() { 983 void RenderViewContextMenu::AppendSpeechInputOptionsSubMenu() {
968 if (params_.speech_input_enabled) { 984 if (params_.speech_input_enabled) {
969 speech_input_submenu_model_.AddCheckItem( 985 speech_input_submenu_model_.AddCheckItem(
970 IDC_CONTENT_CONTEXT_SPEECH_INPUT_FILTER_PROFANITIES, 986 IDC_CONTENT_CONTEXT_SPEECH_INPUT_FILTER_PROFANITIES,
971 l10n_util::GetStringUTF16( 987 l10n_util::GetStringUTF16(
972 IDS_CONTENT_CONTEXT_SPEECH_INPUT_FILTER_PROFANITIES)); 988 IDS_CONTENT_CONTEXT_SPEECH_INPUT_FILTER_PROFANITIES));
973 989
974 speech_input_submenu_model_.AddItemWithStringId( 990 speech_input_submenu_model_.AddItemWithStringId(
(...skipping 890 matching lines...) Expand 10 before | Expand all | Expand 10 after
1865 if (view) 1881 if (view)
1866 view->ShowingContextMenu(false); 1882 view->ShowingContextMenu(false);
1867 RenderViewHost* rvh = source_web_contents_->GetRenderViewHost(); 1883 RenderViewHost* rvh = source_web_contents_->GetRenderViewHost();
1868 if (rvh) { 1884 if (rvh) {
1869 rvh->NotifyContextMenuClosed(params_.custom_context); 1885 rvh->NotifyContextMenuClosed(params_.custom_context);
1870 } 1886 }
1871 } 1887 }
1872 1888
1873 bool RenderViewContextMenu::IsDevCommandEnabled(int id) const { 1889 bool RenderViewContextMenu::IsDevCommandEnabled(int id) const {
1874 if (id == IDC_CONTENT_CONTEXT_INSPECTELEMENT) { 1890 if (id == IDC_CONTENT_CONTEXT_INSPECTELEMENT) {
1875 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 1891 // Don't enable the web inspector if JavaScript is disabled. We don't
1876 TabContentsWrapper* tab_contents_wrapper = 1892 // check this when this is the web contents of an extension (e.g.
1877 TabContentsWrapper::GetCurrentWrapperForContents( 1893 // for a popup extension or a platform app) as they have JavaScript
1878 source_web_contents_); 1894 // always enabled.
1879 if (!tab_contents_wrapper) 1895 const Extension* extension = GetExtension();
1880 return false; 1896 if (!extension) {
1881 // Don't enable the web inspector if JavaScript is disabled. 1897 TabContentsWrapper* contents_wrapper =
1882 if (!tab_contents_wrapper->prefs_tab_helper()->per_tab_prefs()->GetBoolean( 1898 TabContentsWrapper::GetCurrentWrapperForContents(
1883 prefs::kWebKitJavascriptEnabled) || 1899 source_web_contents_);
1884 command_line.HasSwitch(switches::kDisableJavaScript)) 1900 if (!contents_wrapper)
1885 return false; 1901 return false;
1902 const CommandLine* command_line = CommandLine::ForCurrentProcess();
1903 if (!contents_wrapper->prefs_tab_helper()->per_tab_prefs()->GetBoolean(
1904 prefs::kWebKitJavascriptEnabled) ||
1905 command_line->HasSwitch(switches::kDisableJavaScript))
1906 return false;
1907 #if !defined(TOOLKIT_VIEWS)
1908 } else {
1909 // Disable dev tools for popup extensions for non-views builds, as the
1910 // extension popups for these builds do not support dynamically inspecting
1911 // the popups.
1912 // TODO(benwells): Add support for these builds and remove this #if.
1913 if (!extension->is_platform_app())
1914 return false;
1915 #endif
1916 }
1917
1886 // Don't enable the web inspector if the developer tools are disabled via 1918 // Don't enable the web inspector if the developer tools are disabled via
1887 // the preference dev-tools-disabled. 1919 // the preference dev-tools-disabled.
1888 if (profile_->GetPrefs()->GetBoolean(prefs::kDevToolsDisabled)) 1920 if (profile_->GetPrefs()->GetBoolean(prefs::kDevToolsDisabled))
1889 return false; 1921 return false;
1890 } 1922 }
1891 1923
1892 return true; 1924 return true;
1893 } 1925 }
1894 1926
1895 string16 RenderViewContextMenu::PrintableSelectionText() { 1927 string16 RenderViewContextMenu::PrintableSelectionText() {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1945 source_web_contents_->GetRenderViewHost()-> 1977 source_web_contents_->GetRenderViewHost()->
1946 ExecuteMediaPlayerActionAtLocation(location, action); 1978 ExecuteMediaPlayerActionAtLocation(location, action);
1947 } 1979 }
1948 1980
1949 void RenderViewContextMenu::PluginActionAt( 1981 void RenderViewContextMenu::PluginActionAt(
1950 const gfx::Point& location, 1982 const gfx::Point& location,
1951 const WebPluginAction& action) { 1983 const WebPluginAction& action) {
1952 source_web_contents_->GetRenderViewHost()-> 1984 source_web_contents_->GetRenderViewHost()->
1953 ExecutePluginActionAtLocation(location, action); 1985 ExecutePluginActionAtLocation(location, action);
1954 } 1986 }
OLDNEW
« no previous file with comments | « chrome/browser/tab_contents/render_view_context_menu.h ('k') | chrome/browser/ui/views/extensions/extension_popup.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698