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

Unified Diff: chrome/browser/renderer_context_menu/render_view_context_menu.cc

Issue 2035033003: Split RenderViewContextMenu code into functions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/renderer_context_menu/render_view_context_menu.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/renderer_context_menu/render_view_context_menu.cc
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
index 719a329477115c372584d3fdf2d796190dd3ce9b..281ce0da514af25e52c9c938879936f19a17c0ab 100644
--- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -430,11 +430,6 @@ void WriteURLToClipboard(const GURL& url) {
scw.WriteURL(text);
}
-void WriteTextToClipboard(const base::string16& text) {
- ui::ScopedClipboardWriter scw(ui::CLIPBOARD_TYPE_COPY_PASTE);
- scw.WriteText(text);
-}
-
bool g_custom_id_ranges_initialized = false;
#if !defined(OS_CHROMEOS)
@@ -1439,25 +1434,12 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id) const {
case IDC_FORWARD:
return embedder_web_contents_->GetController().CanGoForward();
- case IDC_RELOAD: {
- CoreTabHelper* core_tab_helper =
- CoreTabHelper::FromWebContents(embedder_web_contents_);
- if (!core_tab_helper)
- return false;
-
- CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate();
- return !core_delegate ||
- core_delegate->CanReloadContents(embedder_web_contents_);
- }
+ case IDC_RELOAD:
+ return IsReloadEnabled();
case IDC_VIEW_SOURCE:
case IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE:
- if (!!extensions::MimeHandlerViewGuest::FromWebContents(
- source_web_contents_)) {
- return false;
- }
- return (params_.media_type != WebContextMenuData::MediaTypePlugin) &&
- embedder_web_contents_->GetController().CanViewSource();
+ return IsViewSourceEnabled();
case IDC_CONTENT_CONTEXT_INSPECTELEMENT:
case IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE:
@@ -1465,36 +1447,8 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id) const {
case IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP:
return IsDevCommandEnabled(id);
- case IDC_CONTENT_CONTEXT_TRANSLATE: {
- ChromeTranslateClient* chrome_translate_client =
- ChromeTranslateClient::FromWebContents(embedder_web_contents_);
- // If no |chrome_translate_client| attached with this WebContents or we're
- // viewing in a MimeHandlerViewGuest translate will be disabled.
- if (!chrome_translate_client ||
- !!extensions::MimeHandlerViewGuest::FromWebContents(
- source_web_contents_)) {
- return false;
- }
- std::string original_lang =
- chrome_translate_client->GetLanguageState().original_language();
- std::string target_lang = g_browser_process->GetApplicationLocale();
- target_lang =
- translate::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?
- !chrome_translate_client->GetLanguageState().IsPageTranslated() &&
- !embedder_web_contents_->GetInterstitialPage() &&
- // There are some application locales which can't be used as a
- // target language for translation.
- translate::TranslateDownloadManager::IsSupportedLanguage(
- target_lang) &&
- // Disable on the Instant Extended NTP.
- !search::IsInstantNTP(embedder_web_contents_);
- }
+ case IDC_CONTENT_CONTEXT_TRANSLATE:
+ return IsTranslateEnabled();
case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB:
case IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW:
@@ -1507,26 +1461,11 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id) const {
case IDC_CONTENT_CONTEXT_COPYLINKTEXT:
return true;
- case IDC_CONTENT_CONTEXT_SAVELINKAS: {
- PrefService* local_state = g_browser_process->local_state();
- DCHECK(local_state);
- // Test if file-selection dialogs are forbidden by policy.
- if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs))
- return false;
-
- return params_.link_url.is_valid() &&
- ProfileIOData::IsHandledProtocol(params_.link_url.scheme());
- }
-
- case IDC_CONTENT_CONTEXT_SAVEIMAGEAS: {
- PrefService* local_state = g_browser_process->local_state();
- DCHECK(local_state);
- // Test if file-selection dialogs are forbidden by policy.
- if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs))
- return false;
+ case IDC_CONTENT_CONTEXT_SAVELINKAS:
+ return IsSaveLinkAsEnabled();
- return params_.has_image_contents;
- }
+ case IDC_CONTENT_CONTEXT_SAVEIMAGEAS:
+ return IsSaveImageAsEnabled();
// The images shown in the most visited thumbnails can't be opened or
// searched for conventionally.
@@ -1567,24 +1506,8 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id) const {
case IDC_CONTENT_CONTEXT_COPYIMAGELOCATION:
return params_.src_url.is_valid();
- case IDC_CONTENT_CONTEXT_SAVEAVAS: {
- PrefService* local_state = g_browser_process->local_state();
- DCHECK(local_state);
- // Test if file-selection dialogs are forbidden by policy.
- if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs))
- return false;
-
- const GURL& url = params_.src_url;
- bool can_save =
- (params_.media_flags & WebContextMenuData::MediaCanSave) &&
- url.is_valid() && ProfileIOData::IsHandledProtocol(url.scheme());
-#if defined(ENABLE_PRINT_PREVIEW)
- // Do not save the preview PDF on the print preview page.
- can_save = can_save &&
- !(printing::PrintPreviewDialogController::IsPrintPreviewURL(url));
-#endif
- return can_save;
- }
+ case IDC_CONTENT_CONTEXT_SAVEAVAS:
+ return IsSaveAsEnabled();
case IDC_CONTENT_CONTEXT_OPENAVNEWTAB:
// Currently, a media element can be opened in a new tab iff it can
@@ -1592,29 +1515,8 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id) const {
// on that here.
return !!(params_.media_flags & WebContextMenuData::MediaCanSave);
- case IDC_SAVE_PAGE: {
- CoreTabHelper* core_tab_helper =
- CoreTabHelper::FromWebContents(embedder_web_contents_);
- if (!core_tab_helper)
- return false;
-
- CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate();
- if (core_delegate &&
- !core_delegate->CanSaveContents(embedder_web_contents_))
- return false;
-
- PrefService* local_state = g_browser_process->local_state();
- DCHECK(local_state);
- // Test if file-selection dialogs are forbidden by policy.
- if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs))
- return false;
-
- // We save the last committed entry (which the user is looking at), as
- // opposed to any pending URL that hasn't committed yet.
- NavigationEntry* entry =
- embedder_web_contents_->GetController().GetLastCommittedEntry();
- return content::IsSavableURL(entry ? entry->GetURL() : GURL());
- }
+ case IDC_SAVE_PAGE:
+ return IsSavePageEnabled();
case IDC_CONTENT_CONTEXT_RELOADFRAME:
return params_.frame_url.is_valid();
@@ -1631,25 +1533,11 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id) const {
case IDC_CONTENT_CONTEXT_COPY:
return !!(params_.edit_flags & WebContextMenuData::CanCopy);
- case IDC_CONTENT_CONTEXT_PASTE: {
- if (!(params_.edit_flags & WebContextMenuData::CanPaste))
- return false;
-
- std::vector<base::string16> types;
- bool ignore;
- ui::Clipboard::GetForCurrentThread()->ReadAvailableTypes(
- ui::CLIPBOARD_TYPE_COPY_PASTE, &types, &ignore);
- return !types.empty();
- }
-
- case IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE: {
- if (!(params_.edit_flags & WebContextMenuData::CanPaste))
- return false;
+ case IDC_CONTENT_CONTEXT_PASTE:
+ return IsPasteEnabled();
- return ui::Clipboard::GetForCurrentThread()->IsFormatAvailable(
- ui::Clipboard::GetPlainTextFormatType(),
- ui::CLIPBOARD_TYPE_COPY_PASTE);
- }
+ case IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE:
+ return IsPasteAndMatchStyleEnabled();
case IDC_CONTENT_CONTEXT_DELETE:
return !!(params_.edit_flags & WebContextMenuData::CanDelete);
@@ -1688,29 +1576,8 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id) const {
case IDC_CONTENT_CONTEXT_GENERATEPASSWORD:
return true;
- case IDC_ROUTE_MEDIA: {
- if (!media_router::MediaRouterEnabled(browser_context_))
- return false;
-
- Browser* browser =
- chrome::FindBrowserWithWebContents(source_web_contents_);
- if (!browser)
- return false;
-
- // Disable the command if there is an active modal dialog.
- // We don't use |source_web_contents_| here because it could be the
- // WebContents for something that's not the current tab (e.g., WebUI
- // modal dialog).
- WebContents* web_contents =
- browser->tab_strip_model()->GetActiveWebContents();
- if (!web_contents)
- return false;
-
- const web_modal::WebContentsModalDialogManager* manager =
- web_modal::WebContentsModalDialogManager::FromWebContents(
- web_contents);
- return !manager || !manager->IsDialogActive();
- }
+ case IDC_ROUTE_MEDIA:
+ return IsRouteMediaEnabled();
default:
NOTREACHED();
@@ -1742,14 +1609,9 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) {
return;
command_executed_ = true;
- // MAY BE NULL. Check before using. The frame under the cursor could have
- // been asynchronously destroyed while the context menu was open, but many
- // context menu commands should continue to function in this situation (e.g.
- // "Reload").
- RenderFrameHost* render_frame_host = GetRenderFrameHost();
-
// Process extension menu items.
if (ContextMenuMatcher::IsExtensionsCustomCommandId(id)) {
+ RenderFrameHost* render_frame_host = GetRenderFrameHost();
if (render_frame_host) {
extension_items_.ExecuteCommand(id, source_web_contents_,
render_frame_host, params_);
@@ -1759,67 +1621,24 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) {
if (id >= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST &&
id <= IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_LAST) {
- ProtocolHandlerRegistry::ProtocolHandlerList handlers =
- GetHandlersForLinkUrl();
- if (handlers.empty())
- return;
-
- content::RecordAction(
- UserMetricsAction("RegisterProtocolHandler.ContextMenu_Open"));
- int handlerIndex = id - IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST;
- WindowOpenDisposition disposition =
- ForceNewTabDispositionFromEventFlags(event_flags);
- OpenURL(handlers[handlerIndex].TranslateUrl(params_.link_url),
- GetDocumentURL(params_),
- disposition,
- ui::PAGE_TRANSITION_LINK);
+ ExecProtocolHandler(event_flags,
+ id - IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST);
return;
}
if (id >= IDC_OPEN_LINK_IN_PROFILE_FIRST &&
id <= IDC_OPEN_LINK_IN_PROFILE_LAST) {
- size_t index = static_cast<size_t>(id - IDC_OPEN_LINK_IN_PROFILE_FIRST);
- DCHECK_LE(index, profile_link_paths_.size());
- base::FilePath profile_path = profile_link_paths_[index];
-
- Profile* profile =
- g_browser_process->profile_manager()->GetProfileByPath(profile_path);
- UmaEnumOpenLinkAsUser profile_state;
- if (chrome::FindLastActiveWithProfile(profile)) {
- profile_state = OPEN_LINK_AS_USER_ACTIVE_PROFILE_ENUM_ID;
- } else if (multiple_profiles_open_) {
- profile_state =
- OPEN_LINK_AS_USER_INACTIVE_PROFILE_MULTI_PROFILE_SESSION_ENUM_ID;
- } else {
- profile_state =
- OPEN_LINK_AS_USER_INACTIVE_PROFILE_SINGLE_PROFILE_SESSION_ENUM_ID;
- }
- UMA_HISTOGRAM_ENUMERATION("RenderViewContextMenu.OpenLinkAsUser",
- profile_state, OPEN_LINK_AS_USER_LAST_ENUM_ID);
-
- profiles::SwitchToProfile(
- profile_path, false,
- base::Bind(OnProfileCreated, params_.link_url,
- CreateReferrer(params_.link_url, params_)),
- ProfileMetrics::SWITCH_PROFILE_CONTEXT_MENU);
+ ExecOpenLinkInProfile(id - IDC_OPEN_LINK_IN_PROFILE_FIRST);
return;
}
switch (id) {
- case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB: {
- Browser* browser =
- chrome::FindBrowserWithWebContents(source_web_contents_);
- OpenURL(params_.link_url,
- GetDocumentURL(params_),
- !browser || browser->is_app() ?
- NEW_FOREGROUND_TAB : NEW_BACKGROUND_TAB,
- ui::PAGE_TRANSITION_LINK);
+ case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB:
+ ExecOpenLinkNewTab();
break;
- }
+
case IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW:
- OpenURL(params_.link_url,
- GetDocumentURL(params_),
- NEW_WINDOW,
+ OpenURL(params_.link_url, GetDocumentURL(params_), NEW_WINDOW,
ui::PAGE_TRANSITION_LINK);
break;
@@ -1829,43 +1648,20 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) {
break;
case IDC_CONTENT_CONTEXT_SAVELINKAS:
- SaveLinkAs();
+ ExecSaveLinkAs();
break;
case IDC_CONTENT_CONTEXT_SAVEAVAS:
- case IDC_CONTENT_CONTEXT_SAVEIMAGEAS: {
- bool is_large_data_url = params_.has_image_contents &&
- params_.src_url.is_empty();
- if (params_.media_type == WebContextMenuData::MediaTypeCanvas ||
- (params_.media_type == WebContextMenuData::MediaTypeImage &&
- is_large_data_url)) {
- source_web_contents_->GetRenderViewHost()->SaveImageAt(
- params_.x, params_.y);
- } else {
- RecordDownloadSource(DOWNLOAD_INITIATED_BY_CONTEXT_MENU);
- const GURL& url = params_.src_url;
- content::Referrer referrer = CreateReferrer(url, params_);
-
- std::string headers;
- DataReductionProxyChromeSettings* settings =
- DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
- browser_context_);
- if (params_.media_type == WebContextMenuData::MediaTypeImage &&
- settings && settings->CanUseDataReductionProxy(params_.src_url)) {
- headers = data_reduction_proxy::kDataReductionPassThroughHeader;
- }
-
- source_web_contents_->SaveFrameWithHeaders(url, referrer, headers);
- }
+ case IDC_CONTENT_CONTEXT_SAVEIMAGEAS:
+ ExecSaveAs();
break;
- }
case IDC_CONTENT_CONTEXT_COPYLINKLOCATION:
WriteURLToClipboard(params_.unfiltered_link_url);
break;
case IDC_CONTENT_CONTEXT_COPYLINKTEXT:
- WriteTextToClipboard(params_.link_text);
+ ExecCopyLinkText();
break;
case IDC_CONTENT_CONTEXT_COPYIMAGELOCATION:
@@ -1874,11 +1670,11 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) {
break;
case IDC_CONTENT_CONTEXT_COPYIMAGE:
- CopyImageAt(params_.x, params_.y);
+ ExecCopyImageAt();
break;
case IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE:
- GetImageThumbnailForSearch();
+ ExecSearchWebForImage();
break;
case IDC_CONTENT_CONTEXT_OPEN_ORIGINAL_IMAGE_NEW_TAB:
@@ -1889,7 +1685,7 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) {
break;
case IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE:
- LoadOriginalImage();
+ ExecLoadOriginalImage();
break;
case IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB:
@@ -1900,63 +1696,28 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) {
ui::PAGE_TRANSITION_LINK);
break;
- case IDC_CONTENT_CONTEXT_PLAYPAUSE: {
- bool play = !!(params_.media_flags & WebContextMenuData::MediaPaused);
- if (play) {
- content::RecordAction(UserMetricsAction("MediaContextMenu_Play"));
- } else {
- content::RecordAction(UserMetricsAction("MediaContextMenu_Pause"));
- }
- MediaPlayerActionAt(gfx::Point(params_.x, params_.y),
- WebMediaPlayerAction(
- WebMediaPlayerAction::Play, play));
+ case IDC_CONTENT_CONTEXT_PLAYPAUSE:
+ ExecPlayPause();
break;
- }
- case IDC_CONTENT_CONTEXT_MUTE: {
- bool mute = !(params_.media_flags & WebContextMenuData::MediaMuted);
- if (mute) {
- content::RecordAction(UserMetricsAction("MediaContextMenu_Mute"));
- } else {
- content::RecordAction(UserMetricsAction("MediaContextMenu_Unmute"));
- }
- MediaPlayerActionAt(gfx::Point(params_.x, params_.y),
- WebMediaPlayerAction(
- WebMediaPlayerAction::Mute, mute));
+ case IDC_CONTENT_CONTEXT_MUTE:
+ ExecMute();
break;
- }
case IDC_CONTENT_CONTEXT_LOOP:
- content::RecordAction(UserMetricsAction("MediaContextMenu_Loop"));
- MediaPlayerActionAt(gfx::Point(params_.x, params_.y),
- WebMediaPlayerAction(
- WebMediaPlayerAction::Loop,
- !IsCommandIdChecked(IDC_CONTENT_CONTEXT_LOOP)));
+ ExecLoop();
break;
case IDC_CONTENT_CONTEXT_CONTROLS:
- content::RecordAction(UserMetricsAction("MediaContextMenu_Controls"));
- MediaPlayerActionAt(
- gfx::Point(params_.x, params_.y),
- WebMediaPlayerAction(
- WebMediaPlayerAction::Controls,
- !IsCommandIdChecked(IDC_CONTENT_CONTEXT_CONTROLS)));
+ ExecControls();
break;
case IDC_CONTENT_CONTEXT_ROTATECW:
- content::RecordAction(
- UserMetricsAction("PluginContextMenu_RotateClockwise"));
- PluginActionAt(
- gfx::Point(params_.x, params_.y),
- WebPluginAction(WebPluginAction::Rotate90Clockwise, true));
+ ExecRotateCW();
break;
case IDC_CONTENT_CONTEXT_ROTATECCW:
- content::RecordAction(
- UserMetricsAction("PluginContextMenu_RotateCounterclockwise"));
- PluginActionAt(
- gfx::Point(params_.x, params_.y),
- WebPluginAction(WebPluginAction::Rotate90Counterclockwise, true));
+ ExecRotateCCW();
break;
case IDC_BACK:
@@ -1975,113 +1736,37 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) {
embedder_web_contents_->GetController().Reload(true);
break;
- case IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP: {
- const Extension* platform_app = GetExtension();
- DCHECK(platform_app);
- DCHECK(platform_app->is_platform_app());
-
- extensions::ExtensionSystem::Get(browser_context_)
- ->extension_service()
- ->ReloadExtension(platform_app->id());
+ case IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP:
+ ExecReloadPackagedApp();
break;
- }
- case IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP: {
- const Extension* platform_app = GetExtension();
- DCHECK(platform_app);
- DCHECK(platform_app->is_platform_app());
-
- apps::AppLoadService::Get(GetProfile())
- ->RestartApplication(platform_app->id());
+ case IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP:
+ ExecRestartPackagedApp();
break;
- }
- case IDC_PRINT: {
-#if defined(ENABLE_PRINTING)
- if (params_.media_type != WebContextMenuData::MediaTypeNone) {
- if (render_frame_host) {
- render_frame_host->Send(new PrintMsg_PrintNodeUnderContextMenu(
- render_frame_host->GetRoutingID()));
- }
- break;
- }
-
- printing::StartPrint(
- source_web_contents_,
- GetPrefs(browser_context_)->GetBoolean(prefs::kPrintPreviewDisabled),
- !params_.selection_text.empty());
-#endif // defined(ENABLE_PRINTING)
+ case IDC_PRINT:
+ ExecPrint();
break;
- }
- case IDC_ROUTE_MEDIA: {
-#if defined(ENABLE_MEDIA_ROUTER)
- if (!media_router::MediaRouterEnabled(browser_context_))
- return;
-
- Browser* browser =
- chrome::FindBrowserWithWebContents(source_web_contents_);
- DCHECK(browser);
-
- media_router::MediaRouterDialogController* dialog_controller =
- media_router::MediaRouterDialogController::GetOrCreateForWebContents(
- source_web_contents_);
- if (!dialog_controller)
- return;
-
- dialog_controller->ShowMediaRouterDialog();
- media_router::MediaRouterMetrics::RecordMediaRouterDialogOrigin(
- media_router::MediaRouterDialogOpenOrigin::CONTEXTUAL_MENU);
-#endif // defined(ENABLE_MEDIA_ROUTER)
+ case IDC_ROUTE_MEDIA:
+ ExecRouteMedia();
break;
- }
case IDC_VIEW_SOURCE:
embedder_web_contents_->ViewSource();
break;
case IDC_CONTENT_CONTEXT_INSPECTELEMENT:
- Inspect(params_.x, params_.y);
+ ExecInspectElement();
break;
- case IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE: {
- const Extension* platform_app = GetExtension();
- DCHECK(platform_app);
- DCHECK(platform_app->is_platform_app());
-
- extensions::devtools_util::InspectBackgroundPage(platform_app,
- GetProfile());
+ case IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE:
+ ExecInspectBackgroundPage();
break;
- }
- case IDC_CONTENT_CONTEXT_TRANSLATE: {
- // A translation might have been triggered by the time the menu got
- // selected, do nothing in that case.
- ChromeTranslateClient* chrome_translate_client =
- ChromeTranslateClient::FromWebContents(embedder_web_contents_);
- if (!chrome_translate_client ||
- chrome_translate_client->GetLanguageState().IsPageTranslated() ||
- chrome_translate_client->GetLanguageState().translation_pending()) {
- return;
- }
- std::string original_lang =
- chrome_translate_client->GetLanguageState().original_language();
- std::string target_lang = g_browser_process->GetApplicationLocale();
- target_lang =
- translate::TranslateDownloadManager::GetLanguageCode(target_lang);
- // Since the user decided to translate for that language and site, clears
- // any preferences for not translating them.
- std::unique_ptr<translate::TranslatePrefs> prefs(
- ChromeTranslateClient::CreateTranslatePrefs(
- GetPrefs(browser_context_)));
- prefs->UnblockLanguage(original_lang);
- prefs->RemoveSiteFromBlacklist(params_.page_url.HostNoBrackets());
- translate::TranslateManager* manager =
- chrome_translate_client->GetTranslateManager();
- DCHECK(manager);
- manager->TranslatePage(original_lang, target_lang, true);
+ case IDC_CONTENT_CONTEXT_TRANSLATE:
+ ExecTranslate();
break;
- }
case IDC_CONTENT_CONTEXT_RELOADFRAME:
// We always obey the cache here.
@@ -2128,30 +1813,19 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) {
break;
case IDC_CONTENT_CONTEXT_SEARCHWEBFOR:
- case IDC_CONTENT_CONTEXT_GOTOURL: {
- WindowOpenDisposition disposition =
- ForceNewTabDispositionFromEventFlags(event_flags);
- OpenURL(selection_navigation_url_, GURL(), disposition,
+ case IDC_CONTENT_CONTEXT_GOTOURL:
+ OpenURL(selection_navigation_url_, GURL(),
+ ForceNewTabDispositionFromEventFlags(event_flags),
ui::PAGE_TRANSITION_LINK);
break;
- }
- case IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS: {
- WindowOpenDisposition disposition =
- ForceNewTabDispositionFromEventFlags(event_flags);
- GURL url = chrome::GetSettingsUrl(chrome::kLanguageOptionsSubPage);
- OpenURL(url, GURL(), disposition, ui::PAGE_TRANSITION_LINK);
+
+ case IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS:
+ ExecLanguageSettings(event_flags);
break;
- }
- case IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS: {
- content::RecordAction(
- UserMetricsAction("RegisterProtocolHandler.ContextMenu_Settings"));
- WindowOpenDisposition disposition =
- ForceNewTabDispositionFromEventFlags(event_flags);
- GURL url = chrome::GetSettingsUrl(chrome::kHandlerSettingsSubPage);
- OpenURL(url, GURL(), disposition, ui::PAGE_TRANSITION_LINK);
+ case IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS:
+ ExecProtocolHandlerSettings(event_flags);
break;
- }
case IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD:
ChromePasswordManagerClient::FromWebContents(source_web_contents_)->
@@ -2205,6 +1879,39 @@ void RenderViewContextMenu::NotifyURLOpened(
content::Details<RetargetingDetails>(&details));
}
+base::string16 RenderViewContextMenu::PrintableSelectionText() {
+ return gfx::TruncateString(params_.selection_text,
+ kMaxSelectionTextLength,
+ gfx::WORD_BREAK);
+}
+
+void RenderViewContextMenu::EscapeAmpersands(base::string16* text) {
+ base::ReplaceChars(*text, base::ASCIIToUTF16("&"), base::ASCIIToUTF16("&&"),
+ text);
+}
+
+// Controller functions --------------------------------------------------------
+
+bool RenderViewContextMenu::IsReloadEnabled() const {
+ CoreTabHelper* core_tab_helper =
+ CoreTabHelper::FromWebContents(embedder_web_contents_);
+ if (!core_tab_helper)
+ return false;
+
+ CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate();
+ return !core_delegate ||
+ core_delegate->CanReloadContents(embedder_web_contents_);
+}
+
+bool RenderViewContextMenu::IsViewSourceEnabled() const {
+ if (!!extensions::MimeHandlerViewGuest::FromWebContents(
+ source_web_contents_)) {
+ return false;
+ }
+ return (params_.media_type != WebContextMenuData::MediaTypePlugin) &&
+ embedder_web_contents_->GetController().CanViewSource();
+}
+
bool RenderViewContextMenu::IsDevCommandEnabled(int id) const {
if (id == IDC_CONTENT_CONTEXT_INSPECTELEMENT ||
id == IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE) {
@@ -2221,51 +1928,214 @@ bool RenderViewContextMenu::IsDevCommandEnabled(int id) const {
return true;
}
-base::string16 RenderViewContextMenu::PrintableSelectionText() {
- return gfx::TruncateString(params_.selection_text,
- kMaxSelectionTextLength,
- gfx::WORD_BREAK);
-}
+bool RenderViewContextMenu::IsTranslateEnabled() const {
+ ChromeTranslateClient* chrome_translate_client =
+ ChromeTranslateClient::FromWebContents(embedder_web_contents_);
+ // If no |chrome_translate_client| attached with this WebContents or we're
+ // viewing in a MimeHandlerViewGuest translate will be disabled.
+ if (!chrome_translate_client ||
+ !!extensions::MimeHandlerViewGuest::FromWebContents(
+ source_web_contents_)) {
+ return false;
+ }
+ std::string original_lang =
+ chrome_translate_client->GetLanguageState().original_language();
+ std::string target_lang = g_browser_process->GetApplicationLocale();
+ target_lang =
+ translate::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?
+ !chrome_translate_client->GetLanguageState().IsPageTranslated() &&
+ !embedder_web_contents_->GetInterstitialPage() &&
+ // There are some application locales which can't be used as a
+ // target language for translation.
+ translate::TranslateDownloadManager::IsSupportedLanguage(
+ target_lang) &&
+ // Disable on the Instant Extended NTP.
+ !search::IsInstantNTP(embedder_web_contents_);
+}
+
+bool RenderViewContextMenu::IsSaveLinkAsEnabled() const {
+ PrefService* local_state = g_browser_process->local_state();
+ DCHECK(local_state);
+ // Test if file-selection dialogs are forbidden by policy.
+ if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs))
+ return false;
-void RenderViewContextMenu::EscapeAmpersands(base::string16* text) {
- base::ReplaceChars(*text, base::ASCIIToUTF16("&"), base::ASCIIToUTF16("&&"),
- text);
+ return params_.link_url.is_valid() &&
+ ProfileIOData::IsHandledProtocol(params_.link_url.scheme());
}
-// Controller functions --------------------------------------------------------
+bool RenderViewContextMenu::IsSaveImageAsEnabled() const {
+ PrefService* local_state = g_browser_process->local_state();
+ DCHECK(local_state);
+ // Test if file-selection dialogs are forbidden by policy.
+ if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs))
+ return false;
-void RenderViewContextMenu::CopyImageAt(int x, int y) {
- source_web_contents_->GetRenderViewHost()->CopyImageAt(x, y);
+ return params_.has_image_contents;
}
-void RenderViewContextMenu::LoadOriginalImage() {
- RenderFrameHost* render_frame_host = GetRenderFrameHost();
- if (!render_frame_host)
- return;
- render_frame_host->Send(new ChromeViewMsg_RequestReloadImageForContextNode(
- render_frame_host->GetRoutingID()));
+bool RenderViewContextMenu::IsSaveAsEnabled() const {
+ PrefService* local_state = g_browser_process->local_state();
+ DCHECK(local_state);
+ // Test if file-selection dialogs are forbidden by policy.
+ if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs))
+ return false;
+
+ const GURL& url = params_.src_url;
+ bool can_save =
+ (params_.media_flags & WebContextMenuData::MediaCanSave) &&
+ url.is_valid() && ProfileIOData::IsHandledProtocol(url.scheme());
+#if defined(ENABLE_PRINT_PREVIEW)
+ // Do not save the preview PDF on the print preview page.
+ can_save = can_save &&
+ !(printing::PrintPreviewDialogController::IsPrintPreviewURL(url));
+#endif
+ return can_save;
}
-void RenderViewContextMenu::GetImageThumbnailForSearch() {
+bool RenderViewContextMenu::IsSavePageEnabled() const {
CoreTabHelper* core_tab_helper =
- CoreTabHelper::FromWebContents(source_web_contents_);
+ CoreTabHelper::FromWebContents(embedder_web_contents_);
if (!core_tab_helper)
+ return false;
+
+ CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate();
+ if (core_delegate &&
+ !core_delegate->CanSaveContents(embedder_web_contents_))
+ return false;
+
+ PrefService* local_state = g_browser_process->local_state();
+ DCHECK(local_state);
+ // Test if file-selection dialogs are forbidden by policy.
+ if (!local_state->GetBoolean(prefs::kAllowFileSelectionDialogs))
+ return false;
+
+ // We save the last committed entry (which the user is looking at), as
+ // opposed to any pending URL that hasn't committed yet.
+ NavigationEntry* entry =
+ embedder_web_contents_->GetController().GetLastCommittedEntry();
+ return content::IsSavableURL(entry ? entry->GetURL() : GURL());
+}
+
+bool RenderViewContextMenu::IsPasteEnabled() const {
+ if (!(params_.edit_flags & WebContextMenuData::CanPaste))
+ return false;
+
+ std::vector<base::string16> types;
+ bool ignore;
+ ui::Clipboard::GetForCurrentThread()->ReadAvailableTypes(
+ ui::CLIPBOARD_TYPE_COPY_PASTE, &types, &ignore);
+ return !types.empty();
+}
+
+bool RenderViewContextMenu::IsPasteAndMatchStyleEnabled() const {
+ if (!(params_.edit_flags & WebContextMenuData::CanPaste))
+ return false;
+
+ return ui::Clipboard::GetForCurrentThread()->IsFormatAvailable(
+ ui::Clipboard::GetPlainTextFormatType(),
+ ui::CLIPBOARD_TYPE_COPY_PASTE);
+}
+
+bool RenderViewContextMenu::IsRouteMediaEnabled() const {
+ if (!media_router::MediaRouterEnabled(browser_context_))
+ return false;
+
+ Browser* browser = chrome::FindBrowserWithWebContents(source_web_contents_);
+ if (!browser)
+ return false;
+
+ // Disable the command if there is an active modal dialog.
+ // We don't use |source_web_contents_| here because it could be the
+ // WebContents for something that's not the current tab (e.g., WebUI
+ // modal dialog).
+ WebContents* web_contents =
+ browser->tab_strip_model()->GetActiveWebContents();
+ if (!web_contents)
+ return false;
+
+ const web_modal::WebContentsModalDialogManager* manager =
+ web_modal::WebContentsModalDialogManager::FromWebContents(web_contents);
+ return !manager || !manager->IsDialogActive();
+}
+
+void RenderViewContextMenu::ExecOpenLinkNewTab() {
+ Browser* browser = chrome::FindBrowserWithWebContents(source_web_contents_);
+ OpenURL(params_.link_url,
+ GetDocumentURL(params_),
+ (!browser || browser->is_app()) ? NEW_FOREGROUND_TAB
+ : NEW_BACKGROUND_TAB,
+ ui::PAGE_TRANSITION_LINK);
+}
+
+void RenderViewContextMenu::ExecProtocolHandler(int event_flags,
+ int handler_index) {
+ ProtocolHandlerRegistry::ProtocolHandlerList handlers =
+ GetHandlersForLinkUrl();
+ if (handlers.empty())
return;
- RenderFrameHost* render_frame_host = GetRenderFrameHost();
- if (!render_frame_host)
- return;
- core_tab_helper->SearchByImageInNewTab(render_frame_host, params().src_url);
+
+ content::RecordAction(
+ UserMetricsAction("RegisterProtocolHandler.ContextMenu_Open"));
+ WindowOpenDisposition disposition =
+ ForceNewTabDispositionFromEventFlags(event_flags);
+ OpenURL(handlers[handler_index].TranslateUrl(params_.link_url),
+ GetDocumentURL(params_),
+ disposition,
+ ui::PAGE_TRANSITION_LINK);
+}
+
+void RenderViewContextMenu::ExecOpenLinkInProfile(int profile_index) {
+ DCHECK_GE(profile_index, 0);
+ DCHECK_LE(profile_index, static_cast<int>(profile_link_paths_.size()));
+
+ base::FilePath profile_path = profile_link_paths_[profile_index];
+
+ Profile* profile =
+ g_browser_process->profile_manager()->GetProfileByPath(profile_path);
+ UmaEnumOpenLinkAsUser profile_state;
+ if (chrome::FindLastActiveWithProfile(profile)) {
+ profile_state = OPEN_LINK_AS_USER_ACTIVE_PROFILE_ENUM_ID;
+ } else if (multiple_profiles_open_) {
+ profile_state =
+ OPEN_LINK_AS_USER_INACTIVE_PROFILE_MULTI_PROFILE_SESSION_ENUM_ID;
+ } else {
+ profile_state =
+ OPEN_LINK_AS_USER_INACTIVE_PROFILE_SINGLE_PROFILE_SESSION_ENUM_ID;
+ }
+ UMA_HISTOGRAM_ENUMERATION("RenderViewContextMenu.OpenLinkAsUser",
+ profile_state, OPEN_LINK_AS_USER_LAST_ENUM_ID);
+
+ profiles::SwitchToProfile(
+ profile_path, false,
+ base::Bind(OnProfileCreated, params_.link_url,
+ CreateReferrer(params_.link_url, params_)),
+ ProfileMetrics::SWITCH_PROFILE_CONTEXT_MENU);
}
-void RenderViewContextMenu::Inspect(int x, int y) {
+void RenderViewContextMenu::ExecInspectElement() {
content::RecordAction(UserMetricsAction("DevTools_InspectElement"));
RenderFrameHost* render_frame_host = GetRenderFrameHost();
if (!render_frame_host)
return;
- DevToolsWindow::InspectElement(render_frame_host, x, y);
+ DevToolsWindow::InspectElement(render_frame_host, params_.x, params_.y);
}
-void RenderViewContextMenu::SaveLinkAs() {
+void RenderViewContextMenu::ExecInspectBackgroundPage() {
+ const Extension* platform_app = GetExtension();
+ DCHECK(platform_app);
+ DCHECK(platform_app->is_platform_app());
+
+ extensions::devtools_util::InspectBackgroundPage(platform_app, GetProfile());
+}
+
+void RenderViewContextMenu::ExecSaveLinkAs() {
RenderFrameHost* render_frame_host = GetRenderFrameHost();
if (!render_frame_host)
return;
@@ -2293,6 +2163,220 @@ void RenderViewContextMenu::SaveLinkAs() {
std::move(dl_params));
}
+void RenderViewContextMenu::ExecSaveAs() {
+ bool is_large_data_url = params_.has_image_contents &&
+ params_.src_url.is_empty();
+ if (params_.media_type == WebContextMenuData::MediaTypeCanvas ||
+ (params_.media_type == WebContextMenuData::MediaTypeImage &&
+ is_large_data_url)) {
+ source_web_contents_->GetRenderViewHost()->SaveImageAt(
+ params_.x, params_.y);
+ } else {
+ RecordDownloadSource(DOWNLOAD_INITIATED_BY_CONTEXT_MENU);
+ const GURL& url = params_.src_url;
+ content::Referrer referrer = CreateReferrer(url, params_);
+
+ std::string headers;
+ DataReductionProxyChromeSettings* settings =
+ DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
+ browser_context_);
+ if (params_.media_type == WebContextMenuData::MediaTypeImage &&
+ settings && settings->CanUseDataReductionProxy(params_.src_url)) {
+ headers = data_reduction_proxy::kDataReductionPassThroughHeader;
+ }
+
+ source_web_contents_->SaveFrameWithHeaders(url, referrer, headers);
+ }
+}
+
+
+void RenderViewContextMenu::ExecCopyLinkText() {
+ ui::ScopedClipboardWriter scw(ui::CLIPBOARD_TYPE_COPY_PASTE);
+ scw.WriteText(params_.link_text);
+}
+
+void RenderViewContextMenu::ExecCopyImageAt() {
+ source_web_contents_->GetRenderViewHost()->CopyImageAt(params_.x, params_.y);
+}
+
+void RenderViewContextMenu::ExecSearchWebForImage() {
+ CoreTabHelper* core_tab_helper =
+ CoreTabHelper::FromWebContents(source_web_contents_);
+ if (!core_tab_helper)
+ return;
+ RenderFrameHost* render_frame_host = GetRenderFrameHost();
+ if (!render_frame_host)
+ return;
+ core_tab_helper->SearchByImageInNewTab(render_frame_host, params().src_url);
+}
+
+void RenderViewContextMenu::ExecLoadOriginalImage() {
+ RenderFrameHost* render_frame_host = GetRenderFrameHost();
+ if (!render_frame_host)
+ return;
+ render_frame_host->Send(new ChromeViewMsg_RequestReloadImageForContextNode(
+ render_frame_host->GetRoutingID()));
+}
+
+void RenderViewContextMenu::ExecPlayPause() {
+ bool play = !!(params_.media_flags & WebContextMenuData::MediaPaused);
+ if (play)
+ content::RecordAction(UserMetricsAction("MediaContextMenu_Play"));
+ else
+ content::RecordAction(UserMetricsAction("MediaContextMenu_Pause"));
+
+ MediaPlayerActionAt(gfx::Point(params_.x, params_.y),
+ WebMediaPlayerAction(
+ WebMediaPlayerAction::Play, play));
+}
+
+void RenderViewContextMenu::ExecMute() {
+ bool mute = !(params_.media_flags & WebContextMenuData::MediaMuted);
+ if (mute)
+ content::RecordAction(UserMetricsAction("MediaContextMenu_Mute"));
+ else
+ content::RecordAction(UserMetricsAction("MediaContextMenu_Unmute"));
+
+ MediaPlayerActionAt(gfx::Point(params_.x, params_.y),
+ WebMediaPlayerAction(
+ WebMediaPlayerAction::Mute, mute));
+}
+
+void RenderViewContextMenu::ExecLoop() {
+ content::RecordAction(UserMetricsAction("MediaContextMenu_Loop"));
+ MediaPlayerActionAt(gfx::Point(params_.x, params_.y),
+ WebMediaPlayerAction(
+ WebMediaPlayerAction::Loop,
+ !IsCommandIdChecked(IDC_CONTENT_CONTEXT_LOOP)));
+}
+
+void RenderViewContextMenu::ExecControls() {
+ content::RecordAction(UserMetricsAction("MediaContextMenu_Controls"));
+ MediaPlayerActionAt(gfx::Point(params_.x, params_.y),
+ WebMediaPlayerAction(
+ WebMediaPlayerAction::Controls,
+ !IsCommandIdChecked(IDC_CONTENT_CONTEXT_CONTROLS)));
+}
+
+void RenderViewContextMenu::ExecRotateCW() {
+ content::RecordAction(UserMetricsAction("PluginContextMenu_RotateClockwise"));
+ PluginActionAt(gfx::Point(params_.x, params_.y),
+ WebPluginAction(WebPluginAction::Rotate90Clockwise, true));
+}
+
+void RenderViewContextMenu::ExecRotateCCW() {
+ content::RecordAction(
+ UserMetricsAction("PluginContextMenu_RotateCounterclockwise"));
+ PluginActionAt(gfx::Point(params_.x, params_.y),
+ WebPluginAction(WebPluginAction::Rotate90Counterclockwise,
+ true));
+}
+
+void RenderViewContextMenu::ExecReloadPackagedApp() {
+ const Extension* platform_app = GetExtension();
+ DCHECK(platform_app);
+ DCHECK(platform_app->is_platform_app());
+
+ extensions::ExtensionSystem::Get(browser_context_)
+ ->extension_service()
+ ->ReloadExtension(platform_app->id());
+}
+
+void RenderViewContextMenu::ExecRestartPackagedApp() {
+ const Extension* platform_app = GetExtension();
+ DCHECK(platform_app);
+ DCHECK(platform_app->is_platform_app());
+
+ apps::AppLoadService::Get(GetProfile())
+ ->RestartApplication(platform_app->id());
+}
+
+void RenderViewContextMenu::ExecPrint() {
+#if defined(ENABLE_PRINTING)
+ if (params_.media_type != WebContextMenuData::MediaTypeNone) {
+ RenderFrameHost* render_frame_host = GetRenderFrameHost();
+ if (render_frame_host) {
+ render_frame_host->Send(new PrintMsg_PrintNodeUnderContextMenu(
+ render_frame_host->GetRoutingID()));
+ }
+ return;
+ }
+
+ printing::StartPrint(
+ source_web_contents_,
+ GetPrefs(browser_context_)->GetBoolean(prefs::kPrintPreviewDisabled),
+ !params_.selection_text.empty());
+#endif // defined(ENABLE_PRINTING)
+}
+
+void RenderViewContextMenu::ExecRouteMedia() {
+#if defined(ENABLE_MEDIA_ROUTER)
+ if (!media_router::MediaRouterEnabled(browser_context_))
+ return;
+
+ Browser* browser =
+ chrome::FindBrowserWithWebContents(source_web_contents_);
+ DCHECK(browser);
+
+ media_router::MediaRouterDialogController* dialog_controller =
+ media_router::MediaRouterDialogController::GetOrCreateForWebContents(
+ source_web_contents_);
+ if (!dialog_controller)
+ return;
+
+ dialog_controller->ShowMediaRouterDialog();
+ media_router::MediaRouterMetrics::RecordMediaRouterDialogOrigin(
+ media_router::MediaRouterDialogOpenOrigin::CONTEXTUAL_MENU);
+#endif // defined(ENABLE_MEDIA_ROUTER)
+}
+
+void RenderViewContextMenu::ExecTranslate() {
+ // A translation might have been triggered by the time the menu got
+ // selected, do nothing in that case.
+ ChromeTranslateClient* chrome_translate_client =
+ ChromeTranslateClient::FromWebContents(embedder_web_contents_);
+ if (!chrome_translate_client ||
+ chrome_translate_client->GetLanguageState().IsPageTranslated() ||
+ chrome_translate_client->GetLanguageState().translation_pending()) {
+ return;
+ }
+
+ std::string original_lang =
+ chrome_translate_client->GetLanguageState().original_language();
+ std::string target_lang =
+ translate::TranslateDownloadManager::GetLanguageCode(
+ g_browser_process->GetApplicationLocale());
+
+ // Since the user decided to translate for that language and site, clears
+ // any preferences for not translating them.
+ std::unique_ptr<translate::TranslatePrefs> prefs(
+ ChromeTranslateClient::CreateTranslatePrefs(
+ GetPrefs(browser_context_)));
+ prefs->UnblockLanguage(original_lang);
+ prefs->RemoveSiteFromBlacklist(params_.page_url.HostNoBrackets());
+
+ translate::TranslateManager* manager =
+ chrome_translate_client->GetTranslateManager();
+ DCHECK(manager);
+ manager->TranslatePage(original_lang, target_lang, true);
+}
+
+void RenderViewContextMenu::ExecLanguageSettings(int event_flags) {
+ WindowOpenDisposition disposition =
+ ForceNewTabDispositionFromEventFlags(event_flags);
+ GURL url = chrome::GetSettingsUrl(chrome::kLanguageOptionsSubPage);
+ OpenURL(url, GURL(), disposition, ui::PAGE_TRANSITION_LINK);
+}
+
+void RenderViewContextMenu::ExecProtocolHandlerSettings(int event_flags) {
+ content::RecordAction(
+ UserMetricsAction("RegisterProtocolHandler.ContextMenu_Settings"));
+ WindowOpenDisposition disposition =
+ ForceNewTabDispositionFromEventFlags(event_flags);
+ GURL url = chrome::GetSettingsUrl(chrome::kHandlerSettingsSubPage);
+ OpenURL(url, GURL(), disposition, ui::PAGE_TRANSITION_LINK);
+}
+
void RenderViewContextMenu::WriteURLToClipboard(const GURL& url) {
::WriteURLToClipboard(url);
}
« no previous file with comments | « chrome/browser/renderer_context_menu/render_view_context_menu.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698