#include "chrome/browser/app_mode/app_mode_utils.h"
#include "chrome/browser/autocomplete/autocomplete_classifier.h"
#include "chrome/browser/autocomplete/autocomplete_classifier_factory.h"
+#include "chrome/browser/autocomplete/autocomplete_input.h"
#include "chrome/browser/autocomplete/autocomplete_match.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/extensions/devtools_util.h"
#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/google/google_util.h"
#include "chrome/browser/plugins/chrome_plugin_service_filter.h"
#include "chrome/browser/prefs/incognito_mode_prefs.h"
#include "chrome/browser/tab_contents/spellchecker_submenu_observer.h"
#include "chrome/browser/tab_contents/spelling_menu_observer.h"
#include "chrome/browser/translate/translate_manager.h"
-#include "chrome/browser/translate/translate_prefs.h"
#include "chrome/browser/translate/translate_tab_helper.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/content_restriction.h"
-#include "chrome/common/extensions/extension.h"
#include "chrome/common/net/url_util.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/spellcheck_messages.h"
#include "chrome/common/url_constants.h"
+#include "components/translate/core/browser/translate_download_manager.h"
+#include "components/translate/core/browser/translate_prefs.h"
#include "content/public/browser/child_process_security_policy.h"
#include "content/public/browser/download_manager.h"
#include "content/public/browser/download_save_info.h"
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/notification_service.h"
+#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/common/menu_item.h"
#include "content/public/common/ssl_status.h"
#include "content/public/common/url_utils.h"
+#include "extensions/browser/extension_system.h"
#include "extensions/browser/view_type_utils.h"
+#include "extensions/common/extension.h"
#include "grit/generated_resources.h"
#include "net/base/escape.h"
#include "third_party/WebKit/public/web/WebContextMenuData.h"
#endif // defined(ENABLE_FULL_PRINTING)
#endif // defined(ENABLE_PRINTING)
-using WebKit::WebContextMenuData;
-using WebKit::WebMediaPlayerAction;
-using WebKit::WebPluginAction;
-using WebKit::WebString;
-using WebKit::WebURL;
+using base::UserMetricsAction;
+using blink::WebContextMenuData;
+using blink::WebMediaPlayerAction;
+using blink::WebPluginAction;
+using blink::WebString;
+using blink::WebURL;
using content::BrowserContext;
using content::ChildProcessSecurityPolicy;
using content::DownloadManager;
using content::NavigationController;
using content::NavigationEntry;
using content::OpenURLParams;
+using content::RenderFrameHost;
using content::RenderViewHost;
using content::SSLStatus;
-using content::UserMetricsAction;
using content::WebContents;
using extensions::Extension;
using extensions::MenuItem;
}
// Helper function to escape "&" as "&&".
-void EscapeAmpersands(string16* text) {
- const char16 ampersand[] = {'&', 0};
- ReplaceChars(*text, ampersand, ASCIIToUTF16("&&"), text);
+void EscapeAmpersands(base::string16* text) {
+ const base::char16 ampersand[] = {'&', 0};
+ base::ReplaceChars(*text, ampersand, base::ASCIIToUTF16("&&"), text);
}
} // namespace
// static
bool RenderViewContextMenu::IsDevToolsURL(const GURL& url) {
- return url.SchemeIs(chrome::kChromeDevToolsScheme);
+ return url.SchemeIs(content::kChromeDevToolsScheme);
}
// static
bool RenderViewContextMenu::IsInternalResourcesURL(const GURL& url) {
- if (!url.SchemeIs(chrome::kChromeUIScheme))
+ if (!url.SchemeIs(content::kChromeUIScheme))
return false;
return url.host() == chrome::kChromeUISyncResourcesHost;
}
static const int kSpellcheckRadioGroup = 1;
RenderViewContextMenu::RenderViewContextMenu(
- WebContents* web_contents,
+ content::RenderFrameHost* render_frame_host,
const content::ContextMenuParams& params)
: params_(params),
- source_web_contents_(web_contents),
- profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())),
+ source_web_contents_(WebContents::FromRenderFrameHost(render_frame_host)),
+ render_process_id_(render_frame_host->GetProcess()->GetID()),
+ render_frame_id_(render_frame_host->GetRoutingID()),
+ profile_(Profile::FromBrowserContext(
+ source_web_contents_->GetBrowserContext())),
menu_model_(this),
extension_items_(profile_, this, &menu_model_,
base::Bind(MenuItemMatchesParams, params_)),
- external_(false),
speech_input_submenu_model_(this),
protocol_handler_submenu_model_(this),
protocol_handler_registry_(
extensions::ExtensionSystem::Get(profile_)->extension_service();
if (!service)
return; // In unit-tests, we may not have an ExtensionService.
- MenuManager* menu_manager = service->menu_manager();
- string16 printable_selection_text = PrintableSelectionText();
+ MenuManager* menu_manager = MenuManager::Get(profile_);
+ if (!menu_manager)
+ return;
+
+ base::string16 printable_selection_text = PrintableSelectionText();
EscapeAmpersands(&printable_selection_text);
// Get a list of extension id's that have context menu items, and sort by the
}
void RenderViewContextMenu::AddMenuItem(int command_id,
- const string16& title) {
+ const base::string16& title) {
menu_model_.AddItem(command_id, title);
}
void RenderViewContextMenu::AddCheckItem(int command_id,
- const string16& title) {
+ const base::string16& title) {
menu_model_.AddCheckItem(command_id, title);
}
}
void RenderViewContextMenu::AddSubMenu(int command_id,
- const string16& label,
+ const base::string16& label,
ui::MenuModel* model) {
menu_model_.AddSubMenu(command_id, label, model);
}
void RenderViewContextMenu::UpdateMenuItem(int command_id,
bool enabled,
bool hidden,
- const string16& label) {
+ const base::string16& label) {
// This function needs platform-specific implementation.
NOTIMPLEMENTED();
}
AppendProtocolHandlerSubMenu();
}
- if (!external_) {
- menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD,
- IDS_CONTENT_CONTEXT_OPENLINKOFFTHERECORD);
- }
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD,
+ IDS_CONTENT_CONTEXT_OPENLINKOFFTHERECORD);
menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_SAVELINKAS,
IDS_CONTENT_CONTEXT_SAVELINKAS);
}
const TemplateURL* const default_provider =
TemplateURLServiceFactory::GetForProfile(profile_)->
GetDefaultSearchProvider();
- if (params_.has_image_contents && default_provider &&
+ if (!is_guest_ && params_.has_image_contents && default_provider &&
!default_provider->image_url().empty() &&
default_provider->image_url_ref().IsValid()) {
menu_model_.AddItem(
if (TranslateManager::IsTranslatableURL(params_.page_url)) {
std::string locale = g_browser_process->GetApplicationLocale();
- locale = TranslateManager::GetLanguageCode(locale);
- string16 language = l10n_util::GetDisplayNameForLocale(locale, locale,
- true);
+ locale = TranslateDownloadManager::GetLanguageCode(locale);
+ base::string16 language =
+ l10n_util::GetDisplayNameForLocale(locale, locale, true);
menu_model_.AddItem(
IDC_CONTENT_CONTEXT_TRANSLATE,
l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_TRANSLATE, language));
menu_model_.AddItemWithStringId(IDC_VIEW_SOURCE,
IDS_CONTENT_CONTEXT_VIEWPAGESOURCE);
- // Only add View Page Info if there's a browser. This is a temporary thing
- // while View Page Info crashes Chrome Frame; see http://crbug.com/120901.
- // TODO(grt) Remove this once page info is back for Chrome Frame.
- if (!external_) {
- menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWPAGEINFO,
- IDS_CONTENT_CONTEXT_VIEWPAGEINFO);
- }
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWPAGEINFO,
+ IDS_CONTENT_CONTEXT_VIEWPAGEINFO);
}
void RenderViewContextMenu::AppendFrameItems() {
// IDS_CONTENT_CONTEXT_PRINTFRAME
menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE,
IDS_CONTENT_CONTEXT_VIEWFRAMESOURCE);
- // Only add View Frame Info if there's a browser. This is a temporary thing
- // while View Frame Info crashes Chrome Frame; see http://crbug.com/120901.
- // TODO(grt) Remove this once frame info is back for Chrome Frame.
- if (!external_) {
- menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWFRAMEINFO,
- IDS_CONTENT_CONTEXT_VIEWFRAMEINFO);
- }
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_VIEWFRAMEINFO,
+ IDS_CONTENT_CONTEXT_VIEWFRAMEINFO);
}
void RenderViewContextMenu::AppendCopyItem() {
if (params_.selection_text.empty())
return;
- ReplaceChars(params_.selection_text, AutocompleteMatch::kInvalidChars,
- ASCIIToUTF16(" "), ¶ms_.selection_text);
+ base::ReplaceChars(params_.selection_text, AutocompleteMatch::kInvalidChars,
+ base::ASCIIToUTF16(" "), ¶ms_.selection_text);
AutocompleteMatch match;
AutocompleteClassifierFactory::GetForProfile(profile_)->Classify(
- params_.selection_text, false, false, &match, NULL);
+ params_.selection_text, false, false, AutocompleteInput::INVALID_SPEC,
+ &match, NULL);
selection_navigation_url_ = match.destination_url;
if (!selection_navigation_url_.is_valid())
return;
- string16 printable_selection_text = PrintableSelectionText();
+ base::string16 printable_selection_text = PrintableSelectionText();
EscapeAmpersands(&printable_selection_text);
if (AutocompleteMatch::IsSearchType(match.type)) {
if (!translate_tab_helper)
return false;
std::string original_lang =
- translate_tab_helper->language_state().original_language();
+ translate_tab_helper->GetLanguageState().original_language();
std::string target_lang = g_browser_process->GetApplicationLocale();
- target_lang = TranslateManager::GetLanguageCode(target_lang);
+ target_lang = TranslateDownloadManager::GetLanguageCode(target_lang);
// Note that we intentionally enable the menu even if the original and
// target languages are identical. This is to give a way to user to
// translate a page that might contains text fragments in a different
// language.
return ((params_.edit_flags & WebContextMenuData::CanTranslate) != 0) &&
!original_lang.empty() && // Did we receive the page language yet?
- !translate_tab_helper->language_state().IsPageTranslated() &&
+ !translate_tab_helper->GetLanguageState().IsPageTranslated() &&
!source_web_contents_->GetInterstitialPage() &&
// There are some application locales which can't be used as a
// target language for translation.
- TranslateManager::IsSupportedLanguage(target_lang) &&
+ TranslateDownloadManager::IsSupportedLanguage(target_lang) &&
// Disable on the Instant Extended NTP.
!chrome::IsInstantNTP(source_web_contents_);
}
case IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB:
case IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE:
return params_.src_url.is_valid() &&
- (params_.src_url.scheme() != chrome::kChromeUIScheme);
+ (params_.src_url.scheme() != content::kChromeUIScheme);
case IDC_CONTENT_CONTEXT_COPYIMAGE:
return params_.has_image_contents;
#if defined(ENABLE_PLUGINS)
if (context.request_id && !context.is_pepper_menu) {
ChromePluginServiceFilter::GetInstance()->AuthorizeAllPlugins(
- rvh->GetProcess()->GetID());
+ source_web_contents_, false, std::string());
}
#endif
- rvh->ExecuteCustomContextMenuCommand(action, context);
+ RenderFrameHost* render_frame_host =
+ RenderFrameHost::FromID(render_process_id_, render_frame_id_);
+ if (render_frame_host)
+ render_frame_host->ExecuteCustomContextMenuCommand(action, context);
return;
}
break;
case IDC_RELOAD:
- // Prevent the modal "Resubmit form post" dialog from appearing in the
- // context of an external context menu.
- source_web_contents_->GetController().Reload(!external_);
+ source_web_contents_->GetController().Reload(true);
break;
case IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP: {
TranslateTabHelper* translate_tab_helper =
TranslateTabHelper::FromWebContents(source_web_contents_);
if (!translate_tab_helper ||
- translate_tab_helper->language_state().IsPageTranslated() ||
- translate_tab_helper->language_state().translation_pending()) {
+ translate_tab_helper->GetLanguageState().IsPageTranslated() ||
+ translate_tab_helper->GetLanguageState().translation_pending()) {
return;
}
std::string original_lang =
- translate_tab_helper->language_state().original_language();
+ translate_tab_helper->GetLanguageState().original_language();
std::string target_lang = g_browser_process->GetApplicationLocale();
- target_lang = TranslateManager::GetLanguageCode(target_lang);
+ target_lang = TranslateDownloadManager::GetLanguageCode(target_lang);
// Since the user decided to translate for that language and site, clears
// any preferences for not translating them.
- TranslatePrefs prefs(profile_->GetPrefs());
- prefs.UnblockLanguage(original_lang);
- prefs.RemoveSiteFromBlacklist(params_.page_url.HostNoBrackets());
+ scoped_ptr<TranslatePrefs> prefs(
+ TranslateTabHelper::CreateTranslatePrefs(profile_->GetPrefs()));
+ prefs->UnblockLanguage(original_lang);
+ prefs->RemoveSiteFromBlacklist(params_.page_url.HostNoBrackets());
TranslateManager::GetInstance()->TranslatePage(
source_web_contents_, original_lang, target_lang);
break;
SearchEngineTabHelper::FromWebContents(source_web_contents_);
if (search_engine_tab_helper &&
search_engine_tab_helper->delegate()) {
- string16 keyword(TemplateURLService::GenerateKeyword(params_.page_url));
+ base::string16 keyword(
+ TemplateURLService::GenerateKeyword(params_.page_url));
TemplateURLData data;
data.short_name = keyword;
data.SetKeyword(keyword);
source_web_contents_->GetRenderWidgetHostView();
if (view)
view->SetShowingContextMenu(false);
- RenderViewHost* rvh = source_web_contents_->GetRenderViewHost();
- if (rvh) {
- rvh->NotifyContextMenuClosed(params_.custom_context);
- }
+ RenderFrameHost* render_frame_host =
+ RenderFrameHost::FromID(render_process_id_, render_frame_id_);
+ if (render_frame_host)
+ render_frame_host->NotifyContextMenuClosed(params_.custom_context);
if (!command_executed_) {
FOR_EACH_OBSERVER(RenderViewContextMenuObserver,
return true;
}
-string16 RenderViewContextMenu::PrintableSelectionText() {
+base::string16 RenderViewContextMenu::PrintableSelectionText() {
return gfx::TruncateString(params_.selection_text,
kMaxSelectionTextLength);
}