| OLD | NEW |
| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 #include "content/public/browser/render_frame_host.h" | 97 #include "content/public/browser/render_frame_host.h" |
| 98 #include "content/public/browser/render_process_host.h" | 98 #include "content/public/browser/render_process_host.h" |
| 99 #include "content/public/browser/render_view_host.h" | 99 #include "content/public/browser/render_view_host.h" |
| 100 #include "content/public/browser/render_widget_host_view.h" | 100 #include "content/public/browser/render_widget_host_view.h" |
| 101 #include "content/public/browser/ssl_status.h" | 101 #include "content/public/browser/ssl_status.h" |
| 102 #include "content/public/browser/storage_partition.h" | 102 #include "content/public/browser/storage_partition.h" |
| 103 #include "content/public/browser/user_metrics.h" | 103 #include "content/public/browser/user_metrics.h" |
| 104 #include "content/public/browser/web_contents.h" | 104 #include "content/public/browser/web_contents.h" |
| 105 #include "content/public/common/menu_item.h" | 105 #include "content/public/common/menu_item.h" |
| 106 #include "content/public/common/url_utils.h" | 106 #include "content/public/common/url_utils.h" |
| 107 #include "extensions/features/features.h" |
| 107 #include "net/base/escape.h" | 108 #include "net/base/escape.h" |
| 108 #include "printing/features/features.h" | 109 #include "printing/features/features.h" |
| 109 #include "third_party/WebKit/public/public_features.h" | 110 #include "third_party/WebKit/public/public_features.h" |
| 110 #include "third_party/WebKit/public/web/WebContextMenuData.h" | 111 #include "third_party/WebKit/public/web/WebContextMenuData.h" |
| 111 #include "third_party/WebKit/public/web/WebMediaPlayerAction.h" | 112 #include "third_party/WebKit/public/web/WebMediaPlayerAction.h" |
| 112 #include "third_party/WebKit/public/web/WebPluginAction.h" | 113 #include "third_party/WebKit/public/web/WebPluginAction.h" |
| 113 #include "ui/base/clipboard/clipboard.h" | 114 #include "ui/base/clipboard/clipboard.h" |
| 114 #include "ui/base/clipboard/scoped_clipboard_writer.h" | 115 #include "ui/base/clipboard/scoped_clipboard_writer.h" |
| 115 #include "ui/base/l10n/l10n_util.h" | 116 #include "ui/base/l10n/l10n_util.h" |
| 116 #include "ui/gfx/canvas.h" | 117 #include "ui/gfx/canvas.h" |
| 117 #include "ui/gfx/favicon_size.h" | 118 #include "ui/gfx/favicon_size.h" |
| 118 #include "ui/gfx/geometry/point.h" | 119 #include "ui/gfx/geometry/point.h" |
| 119 #include "ui/gfx/geometry/size.h" | 120 #include "ui/gfx/geometry/size.h" |
| 120 #include "ui/gfx/path.h" | 121 #include "ui/gfx/path.h" |
| 121 #include "ui/gfx/text_elider.h" | 122 #include "ui/gfx/text_elider.h" |
| 122 | 123 |
| 123 #if !defined(USE_BROWSER_SPELLCHECKER) | 124 #if !defined(USE_BROWSER_SPELLCHECKER) |
| 124 #include "chrome/browser/renderer_context_menu/spelling_options_submenu_observer
.h" | 125 #include "chrome/browser/renderer_context_menu/spelling_options_submenu_observer
.h" |
| 125 #endif | 126 #endif |
| 126 | 127 |
| 127 #if defined(ENABLE_EXTENSIONS) | 128 #if BUILDFLAG(ENABLE_EXTENSIONS) |
| 128 #include "chrome/browser/extensions/devtools_util.h" | 129 #include "chrome/browser/extensions/devtools_util.h" |
| 129 #include "chrome/browser/extensions/extension_service.h" | 130 #include "chrome/browser/extensions/extension_service.h" |
| 130 #include "extensions/browser/extension_host.h" | 131 #include "extensions/browser/extension_host.h" |
| 131 #include "extensions/browser/extension_system.h" | 132 #include "extensions/browser/extension_system.h" |
| 132 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues
t.h" | 133 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues
t.h" |
| 133 #include "extensions/browser/guest_view/web_view/web_view_guest.h" | 134 #include "extensions/browser/guest_view/web_view/web_view_guest.h" |
| 134 #include "extensions/browser/view_type_utils.h" | 135 #include "extensions/browser/view_type_utils.h" |
| 135 #include "extensions/common/extension.h" | 136 #include "extensions/common/extension.h" |
| 136 #endif | 137 #endif |
| 137 | 138 |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 | 401 |
| 401 content::Referrer CreateReferrer(const GURL& url, | 402 content::Referrer CreateReferrer(const GURL& url, |
| 402 const content::ContextMenuParams& params) { | 403 const content::ContextMenuParams& params) { |
| 403 const GURL& referring_url = GetDocumentURL(params); | 404 const GURL& referring_url = GetDocumentURL(params); |
| 404 return content::Referrer::SanitizeForRequest( | 405 return content::Referrer::SanitizeForRequest( |
| 405 url, | 406 url, |
| 406 content::Referrer(referring_url.GetAsReferrer(), params.referrer_policy)); | 407 content::Referrer(referring_url.GetAsReferrer(), params.referrer_policy)); |
| 407 } | 408 } |
| 408 | 409 |
| 409 content::WebContents* GetWebContentsToUse(content::WebContents* web_contents) { | 410 content::WebContents* GetWebContentsToUse(content::WebContents* web_contents) { |
| 410 #if defined(ENABLE_EXTENSIONS) | 411 #if BUILDFLAG(ENABLE_EXTENSIONS) |
| 411 // If we're viewing in a MimeHandlerViewGuest, use its embedder WebContents. | 412 // If we're viewing in a MimeHandlerViewGuest, use its embedder WebContents. |
| 412 if (extensions::MimeHandlerViewGuest::FromWebContents(web_contents)) { | 413 if (extensions::MimeHandlerViewGuest::FromWebContents(web_contents)) { |
| 413 WebContents* top_level_web_contents = | 414 WebContents* top_level_web_contents = |
| 414 guest_view::GuestViewBase::GetTopLevelWebContents(web_contents); | 415 guest_view::GuestViewBase::GetTopLevelWebContents(web_contents); |
| 415 if (top_level_web_contents) | 416 if (top_level_web_contents) |
| 416 return top_level_web_contents; | 417 return top_level_web_contents; |
| 417 } | 418 } |
| 418 #endif | 419 #endif |
| 419 return web_contents; | 420 return web_contents; |
| 420 } | 421 } |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 chrome::Navigate(&nav_params); | 496 chrome::Navigate(&nav_params); |
| 496 } | 497 } |
| 497 } | 498 } |
| 498 | 499 |
| 499 } // namespace | 500 } // namespace |
| 500 | 501 |
| 501 // static | 502 // static |
| 502 gfx::Vector2d RenderViewContextMenu::GetOffset( | 503 gfx::Vector2d RenderViewContextMenu::GetOffset( |
| 503 RenderFrameHost* render_frame_host) { | 504 RenderFrameHost* render_frame_host) { |
| 504 gfx::Vector2d offset; | 505 gfx::Vector2d offset; |
| 505 #if defined(ENABLE_EXTENSIONS) | 506 #if BUILDFLAG(ENABLE_EXTENSIONS) |
| 506 // When --use-cross-process-frames-for-guests is enabled, the position is | 507 // When --use-cross-process-frames-for-guests is enabled, the position is |
| 507 // transformed in the browser process hittesting code. | 508 // transformed in the browser process hittesting code. |
| 508 WebContents* web_contents = | 509 WebContents* web_contents = |
| 509 WebContents::FromRenderFrameHost(render_frame_host); | 510 WebContents::FromRenderFrameHost(render_frame_host); |
| 510 // TODO(ekaramad): For now, MimeHandlerView is based on BrowserPlugin even | 511 // TODO(ekaramad): For now, MimeHandlerView is based on BrowserPlugin even |
| 511 // when guests use OOPIF. Remove the check below when MimeHandlerView is also | 512 // when guests use OOPIF. Remove the check below when MimeHandlerView is also |
| 512 // based on OOPIF (https://crbug.com/642826). | 513 // based on OOPIF (https://crbug.com/642826). |
| 513 if (!content::GuestMode::IsCrossProcessFrameGuest(web_contents)) { | 514 if (!content::GuestMode::IsCrossProcessFrameGuest(web_contents)) { |
| 514 WebContents* top_level_web_contents = | 515 WebContents* top_level_web_contents = |
| 515 guest_view::GuestViewBase::GetTopLevelWebContents(web_contents); | 516 guest_view::GuestViewBase::GetTopLevelWebContents(web_contents); |
| 516 if (web_contents && top_level_web_contents && | 517 if (web_contents && top_level_web_contents && |
| 517 web_contents != top_level_web_contents) { | 518 web_contents != top_level_web_contents) { |
| 518 gfx::Rect bounds = web_contents->GetContainerBounds(); | 519 gfx::Rect bounds = web_contents->GetContainerBounds(); |
| 519 gfx::Rect top_level_bounds = top_level_web_contents->GetContainerBounds(); | 520 gfx::Rect top_level_bounds = top_level_web_contents->GetContainerBounds(); |
| 520 offset = bounds.origin() - top_level_bounds.origin(); | 521 offset = bounds.origin() - top_level_bounds.origin(); |
| 521 } | 522 } |
| 522 } | 523 } |
| 523 #endif // defined(ENABLE_EXTENSIONS) | 524 #endif // BUILDFLAG(ENABLE_EXTENSIONS) |
| 524 return offset; | 525 return offset; |
| 525 } | 526 } |
| 526 | 527 |
| 527 // static | 528 // static |
| 528 bool RenderViewContextMenu::IsDevToolsURL(const GURL& url) { | 529 bool RenderViewContextMenu::IsDevToolsURL(const GURL& url) { |
| 529 return url.SchemeIs(content::kChromeDevToolsScheme); | 530 return url.SchemeIs(content::kChromeDevToolsScheme); |
| 530 } | 531 } |
| 531 | 532 |
| 532 // static | 533 // static |
| 533 bool RenderViewContextMenu::IsInternalResourcesURL(const GURL& url) { | 534 bool RenderViewContextMenu::IsInternalResourcesURL(const GURL& url) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 base::FieldTrialList::FindFullName("SaveAsMenuText") == "download") { | 584 base::FieldTrialList::FindFullName("SaveAsMenuText") == "download") { |
| 584 save_as_text_experiement_enabled_ = true; | 585 save_as_text_experiement_enabled_ = true; |
| 585 } | 586 } |
| 586 } | 587 } |
| 587 | 588 |
| 588 RenderViewContextMenu::~RenderViewContextMenu() { | 589 RenderViewContextMenu::~RenderViewContextMenu() { |
| 589 } | 590 } |
| 590 | 591 |
| 591 // Menu construction functions ------------------------------------------------- | 592 // Menu construction functions ------------------------------------------------- |
| 592 | 593 |
| 593 #if defined(ENABLE_EXTENSIONS) | 594 #if BUILDFLAG(ENABLE_EXTENSIONS) |
| 594 // static | 595 // static |
| 595 bool RenderViewContextMenu::ExtensionContextAndPatternMatch( | 596 bool RenderViewContextMenu::ExtensionContextAndPatternMatch( |
| 596 const content::ContextMenuParams& params, | 597 const content::ContextMenuParams& params, |
| 597 const MenuItem::ContextList& contexts, | 598 const MenuItem::ContextList& contexts, |
| 598 const extensions::URLPatternSet& target_url_patterns) { | 599 const extensions::URLPatternSet& target_url_patterns) { |
| 599 const bool has_link = !params.link_url.is_empty(); | 600 const bool has_link = !params.link_url.is_empty(); |
| 600 const bool has_selection = !params.selection_text.empty(); | 601 const bool has_selection = !params.selection_text.empty(); |
| 601 const bool in_frame = !params.frame_url.is_empty(); | 602 const bool in_frame = !params.frame_url.is_empty(); |
| 602 | 603 |
| 603 if (contexts.Contains(MenuItem::ALL) || | 604 if (contexts.Contains(MenuItem::ALL) || |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 731 web_view_guest->view_instance_id()); | 732 web_view_guest->view_instance_id()); |
| 732 } else { | 733 } else { |
| 733 key = MenuItem::ExtensionKey(extension->id()); | 734 key = MenuItem::ExtensionKey(extension->id()); |
| 734 } | 735 } |
| 735 | 736 |
| 736 // Only add extension items from this extension. | 737 // Only add extension items from this extension. |
| 737 int index = 0; | 738 int index = 0; |
| 738 extension_items_.AppendExtensionItems(key, PrintableSelectionText(), &index, | 739 extension_items_.AppendExtensionItems(key, PrintableSelectionText(), &index, |
| 739 false /* is_action_menu */); | 740 false /* is_action_menu */); |
| 740 } | 741 } |
| 741 #endif // defined(ENABLE_EXTENSIONS) | 742 #endif // BUILDFLAG(ENABLE_EXTENSIONS) |
| 742 | 743 |
| 743 void RenderViewContextMenu::InitMenu() { | 744 void RenderViewContextMenu::InitMenu() { |
| 744 RenderViewContextMenuBase::InitMenu(); | 745 RenderViewContextMenuBase::InitMenu(); |
| 745 | 746 |
| 746 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PAGE)) | 747 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_PAGE)) |
| 747 AppendPageItems(); | 748 AppendPageItems(); |
| 748 | 749 |
| 749 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_LINK)) { | 750 if (content_type_->SupportsGroup(ContextMenuContentType::ITEM_GROUP_LINK)) { |
| 750 AppendLinkItems(); | 751 AppendLinkItems(); |
| 751 if (params_.media_type != WebContextMenuData::MediaTypeNone) | 752 if (params_.media_type != WebContextMenuData::MediaTypeNone) |
| (...skipping 1747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2499 void RenderViewContextMenu::PluginActionAt( | 2500 void RenderViewContextMenu::PluginActionAt( |
| 2500 const gfx::Point& location, | 2501 const gfx::Point& location, |
| 2501 const WebPluginAction& action) { | 2502 const WebPluginAction& action) { |
| 2502 source_web_contents_->GetRenderViewHost()-> | 2503 source_web_contents_->GetRenderViewHost()-> |
| 2503 ExecutePluginActionAtLocation(location, action); | 2504 ExecutePluginActionAtLocation(location, action); |
| 2504 } | 2505 } |
| 2505 | 2506 |
| 2506 Browser* RenderViewContextMenu::GetBrowser() const { | 2507 Browser* RenderViewContextMenu::GetBrowser() const { |
| 2507 return chrome::FindBrowserWithWebContents(embedder_web_contents_); | 2508 return chrome::FindBrowserWithWebContents(embedder_web_contents_); |
| 2508 } | 2509 } |
| OLD | NEW |