190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/renderer/context_menu_params_builder.h" 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/logging.h" 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/common/ssl_status_serialization.h" 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/common/context_menu_params.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/renderer/dom_utils.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/renderer/history_serialization.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/renderer/menu_item_builder.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebElement.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebNode.h" 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace content { 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)ContextMenuParams ContextMenuParamsBuilder::Build( 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebContextMenuData& data) { 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ContextMenuParams params; 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.media_type = data.mediaType; 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.x = data.mousePosition.x; 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.y = data.mousePosition.y; 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.link_url = data.linkURL; 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.unfiltered_link_url = data.linkURL; 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.src_url = data.srcURL; 28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) params.has_image_contents = data.hasImageContents; 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.page_url = data.pageURL; 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.keyword_url = data.keywordURL; 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.frame_url = data.frameURL; 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.media_flags = data.mediaFlags; 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.selection_text = data.selectedText; 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.misspelled_word = data.misspelledWord; 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.misspelling_hash = data.misspellingHash; 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.spellcheck_enabled = data.isSpellCheckingEnabled; 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.is_editable = data.isEditable; 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.writing_direction_default = data.writingDirectionDefault; 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.writing_direction_left_to_right = data.writingDirectionLeftToRight; 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.writing_direction_right_to_left = data.writingDirectionRightToLeft; 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.edit_flags = data.editFlags; 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.frame_charset = data.frameEncoding.utf8(); 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.referrer_policy = data.referrerPolicy; 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch params.suggested_filename = data.suggestedFilename; 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) for (size_t i = 0; i < data.dictionarySuggestions.size(); ++i) 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.dictionary_suggestions.push_back(data.dictionarySuggestions[i]); 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.custom_context.is_pepper_menu = false; 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) for (size_t i = 0; i < data.customItems.size(); ++i) 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch params.custom_items.push_back(MenuItemBuilder::Build(data.customItems[i])); 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!data.frameHistoryItem.isNull()) { 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu params.frame_page_state = 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SingleHistoryItemToPageState(data.frameHistoryItem); 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!params.link_url.is_empty()) { 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) blink::WebNode selectedNode = DomUtils::ExtractParentAnchorNode(data.node); 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebElement selectedElement = selectedNode.to<blink::WebElement>(); 6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (!selectedElement.isNull() && selectedNode.isLink()) { 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.link_text = selectedElement.innerText(); 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } else { 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) LOG(ERROR) << "Creating a ContextMenuParams for a node that has a link" 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << "url but is not an ElementNode or does not have an" 6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << "ancestor that is a link."; 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Deserialize the SSL info. 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!data.securityInfo.isEmpty()) { 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DeserializeSecurityInfo(data.securityInfo, 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ¶ms.security_info.cert_id, ¶ms.security_info.cert_status, 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ¶ms.security_info.security_bits, 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ¶ms.security_info.connection_status, 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ¶ms.security_info.signed_certificate_timestamp_ids); 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return params; 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace content 83