Chromium Code Reviews| 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 708622d66249ab1b7a71847b7024da2eac65aab0..1f12cf9a83280e90d69e115349b1e0f87d555c09 100644 |
| --- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc |
| +++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc |
| @@ -87,6 +87,7 @@ |
| #include "content/public/common/url_utils.h" |
| #include "extensions/browser/extension_host.h" |
| #include "extensions/browser/extension_system.h" |
| +#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h" |
| #include "extensions/browser/guest_view/web_view/web_view_guest.h" |
| #include "extensions/browser/view_type_utils.h" |
| #include "extensions/common/extension.h" |
| @@ -296,6 +297,15 @@ content::Referrer CreateSaveAsReferrer( |
| content::Referrer(referring_url.GetAsReferrer(), params.referrer_policy)); |
| } |
| +content::WebContents* GetWebContentsToUse(content::WebContents* web_contents) { |
| + // If we're viewing in a MimeHandlerViewGuest, use its embedder WebContents. |
| + auto guest_view = |
| + extensions::MimeHandlerViewGuest::FromWebContents(web_contents); |
| + if (guest_view) |
| + return guest_view->embedder_web_contents(); |
| + return web_contents; |
| +} |
| + |
| bool g_custom_id_ranges_initialized = false; |
| const int kSpellcheckRadioGroup = 1; |
| @@ -999,25 +1009,29 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id) const { |
| IncognitoModePrefs::GetAvailability(prefs); |
| switch (id) { |
| case IDC_BACK: |
| - return source_web_contents_->GetController().CanGoBack(); |
| + return GetWebContentsToUse(source_web_contents_) |
|
Avi (use Gerrit)
2015/02/17 16:22:42
Can you pull GetWebContentsToUse(source_web_conten
|
| + ->GetController().CanGoBack(); |
| case IDC_FORWARD: |
| - return source_web_contents_->GetController().CanGoForward(); |
| + return GetWebContentsToUse(source_web_contents_) |
| + ->GetController().CanGoForward(); |
| case IDC_RELOAD: { |
| - CoreTabHelper* core_tab_helper = |
| - CoreTabHelper::FromWebContents(source_web_contents_); |
| + CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents( |
| + GetWebContentsToUse(source_web_contents_)); |
| if (!core_tab_helper) |
| return false; |
| CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate(); |
| return !core_delegate || |
| - core_delegate->CanReloadContents(source_web_contents_); |
| + core_delegate->CanReloadContents( |
| + GetWebContentsToUse(source_web_contents_)); |
| } |
| case IDC_VIEW_SOURCE: |
| case IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE: |
| - return source_web_contents_->GetController().CanViewSource(); |
| + return GetWebContentsToUse(source_web_contents_) |
| + ->GetController().CanViewSource(); |
| case IDC_CONTENT_CONTEXT_INSPECTELEMENT: |
| case IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE: |
| @@ -1026,11 +1040,15 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id) const { |
| return IsDevCommandEnabled(id); |
| case IDC_CONTENT_CONTEXT_VIEWPAGEINFO: |
| - if (source_web_contents_->GetController().GetVisibleEntry() == NULL) |
| + if (GetWebContentsToUse(source_web_contents_) |
| + ->GetController().GetVisibleEntry() == NULL) { |
| return false; |
| + } |
| // Disabled if no browser is associated (e.g. desktop notifications). |
| - if (chrome::FindBrowserWithWebContents(source_web_contents_) == NULL) |
| + if (chrome::FindBrowserWithWebContents( |
| + GetWebContentsToUse(source_web_contents_)) == NULL) { |
| return false; |
| + } |
| return true; |
| case IDC_CONTENT_CONTEXT_TRANSLATE: { |
| @@ -1150,15 +1168,16 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id) const { |
| return !!(params_.media_flags & WebContextMenuData::MediaCanSave); |
| case IDC_SAVE_PAGE: { |
| - CoreTabHelper* core_tab_helper = |
| - CoreTabHelper::FromWebContents(source_web_contents_); |
| + CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents( |
| + GetWebContentsToUse(source_web_contents_)); |
| if (!core_tab_helper) |
| return false; |
| CoreTabHelperDelegate* core_delegate = core_tab_helper->delegate(); |
| - if (core_delegate && |
| - !core_delegate->CanSaveContents(source_web_contents_)) |
| + if (core_delegate && !core_delegate->CanSaveContents( |
| + GetWebContentsToUse(source_web_contents_))) { |
| return false; |
| + } |
| PrefService* local_state = g_browser_process->local_state(); |
| DCHECK(local_state); |
| @@ -1168,8 +1187,8 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id) const { |
| // 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 = |
| - source_web_contents_->GetController().GetLastCommittedEntry(); |
| + NavigationEntry* entry = GetWebContentsToUse(source_web_contents_) |
| + ->GetController().GetLastCommittedEntry(); |
| return content::IsSavableURL(entry ? entry->GetURL() : GURL()); |
| } |
| @@ -1455,19 +1474,19 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) { |
| break; |
| case IDC_BACK: |
| - source_web_contents_->GetController().GoBack(); |
| + GetWebContentsToUse(source_web_contents_)->GetController().GoBack(); |
| break; |
| case IDC_FORWARD: |
| - source_web_contents_->GetController().GoForward(); |
| + GetWebContentsToUse(source_web_contents_)->GetController().GoForward(); |
| break; |
| case IDC_SAVE_PAGE: |
| - source_web_contents_->OnSavePage(); |
| + GetWebContentsToUse(source_web_contents_)->OnSavePage(); |
| break; |
| case IDC_RELOAD: |
| - source_web_contents_->GetController().Reload(true); |
| + GetWebContentsToUse(source_web_contents_)->GetController().Reload(true); |
| break; |
| case IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP: { |
| @@ -1510,7 +1529,7 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) { |
| } |
| case IDC_VIEW_SOURCE: |
| - source_web_contents_->ViewSource(); |
| + GetWebContentsToUse(source_web_contents_)->ViewSource(); |
| break; |
| case IDC_CONTENT_CONTEXT_INSPECTELEMENT: |
| @@ -1528,15 +1547,17 @@ void RenderViewContextMenu::ExecuteCommand(int id, int event_flags) { |
| } |
| case IDC_CONTENT_CONTEXT_VIEWPAGEINFO: { |
| - NavigationController* controller = &source_web_contents_->GetController(); |
| + NavigationController* controller = |
| + &GetWebContentsToUse(source_web_contents_)->GetController(); |
| // Important to use GetVisibleEntry to match what's showing in the |
| // omnibox. This may return null. |
| NavigationEntry* nav_entry = controller->GetVisibleEntry(); |
| if (!nav_entry) |
| return; |
| - Browser* browser = |
| - chrome::FindBrowserWithWebContents(source_web_contents_); |
| - chrome::ShowWebsiteSettings(browser, source_web_contents_, |
| + Browser* browser = chrome::FindBrowserWithWebContents( |
| + GetWebContentsToUse(source_web_contents_)); |
| + chrome::ShowWebsiteSettings(browser, |
| + GetWebContentsToUse(source_web_contents_), |
| nav_entry->GetURL(), nav_entry->GetSSL()); |
| break; |
| } |
| @@ -1775,9 +1796,6 @@ void RenderViewContextMenu::MediaPlayerActionAt( |
| void RenderViewContextMenu::PluginActionAt( |
| const gfx::Point& location, |
| const WebPluginAction& action) { |
| - RenderFrameHost* render_frame_host = GetRenderFrameHost(); |
| - if (!render_frame_host) |
| - return; |
| - WebContents::FromRenderFrameHost(render_frame_host)->GetRenderViewHost() |
| - ->ExecutePluginActionAtLocation(location, action); |
| + source_web_contents_->GetRenderViewHost()->ExecutePluginActionAtLocation( |
| + location, action); |
| } |