| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2009, 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 // Keyboard events KeyVK_APPS, Shift+F10). Check if this is being invoked | 150 // Keyboard events KeyVK_APPS, Shift+F10). Check if this is being invoked |
| 151 // in response to the above input events before popping up the context menu. | 151 // in response to the above input events before popping up the context menu. |
| 152 if (!ContextMenuAllowedScope::isContextMenuAllowed()) | 152 if (!ContextMenuAllowedScope::isContextMenuAllowed()) |
| 153 return false; | 153 return false; |
| 154 | 154 |
| 155 HitTestResult r = m_webView->page()->contextMenuController().hitTestResult(); | 155 HitTestResult r = m_webView->page()->contextMenuController().hitTestResult(); |
| 156 | 156 |
| 157 r.setToShadowHostIfInRestrictedShadowRoot(); | 157 r.setToShadowHostIfInRestrictedShadowRoot(); |
| 158 | 158 |
| 159 LocalFrame* selectedFrame = r.innerNodeFrame(); | 159 LocalFrame* selectedFrame = r.innerNodeFrame(); |
| 160 WebLocalFrameImpl* selectedWebFrame = |
| 161 WebLocalFrameImpl::fromFrame(selectedFrame); |
| 160 | 162 |
| 161 WebContextMenuData data; | 163 WebContextMenuData data; |
| 162 data.mousePosition = selectedFrame->view()->contentsToViewport( | 164 data.mousePosition = selectedFrame->view()->contentsToViewport( |
| 163 r.roundedPointInInnerNodeFrame()); | 165 r.roundedPointInInnerNodeFrame()); |
| 164 | 166 |
| 165 // Compute edit flags. | 167 // Compute edit flags. |
| 166 data.editFlags = WebContextMenuData::CanDoNone; | 168 data.editFlags = WebContextMenuData::CanDoNone; |
| 167 if (selectedFrame->document()->isHTMLDocument() || | 169 if (selectedFrame->document()->isHTMLDocument() || |
| 168 selectedFrame->document()->isXHTMLDocument()) { | 170 selectedFrame->document()->isXHTMLDocument()) { |
| 169 if (toLocalFrame(m_webView->focusedCoreFrame())->editor().canUndo()) | 171 if (toLocalFrame(m_webView->focusedCoreFrame())->editor().canUndo()) |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 // Spellchecker adds spelling markers to misspelled words and attaches | 321 // Spellchecker adds spelling markers to misspelled words and attaches |
| 320 // suggestions to these markers in the background. Therefore, when a | 322 // suggestions to these markers in the background. Therefore, when a |
| 321 // user right-clicks a mouse on a word, Chrome just needs to find a | 323 // user right-clicks a mouse on a word, Chrome just needs to find a |
| 322 // spelling marker on the word instead of spellchecking it. | 324 // spelling marker on the word instead of spellchecking it. |
| 323 String description; | 325 String description; |
| 324 data.misspelledWord = selectMisspellingAsync(selectedFrame, description); | 326 data.misspelledWord = selectMisspellingAsync(selectedFrame, description); |
| 325 if (description.length()) { | 327 if (description.length()) { |
| 326 Vector<String> suggestions; | 328 Vector<String> suggestions; |
| 327 description.split('\n', suggestions); | 329 description.split('\n', suggestions); |
| 328 data.dictionarySuggestions = suggestions; | 330 data.dictionarySuggestions = suggestions; |
| 329 } else if (m_webView->textCheckClient()) { | 331 } else if (selectedWebFrame->textCheckClient()) { |
| 330 int misspelledOffset, misspelledLength; | 332 int misspelledOffset, misspelledLength; |
| 331 m_webView->textCheckClient()->checkSpelling( | 333 selectedWebFrame->textCheckClient()->checkSpelling( |
| 332 data.misspelledWord, misspelledOffset, misspelledLength, | 334 data.misspelledWord, misspelledOffset, misspelledLength, |
| 333 &data.dictionarySuggestions); | 335 &data.dictionarySuggestions); |
| 334 } | 336 } |
| 335 | 337 |
| 336 HTMLFormElement* form = selectedFrame->selection().currentForm(); | 338 HTMLFormElement* form = selectedFrame->selection().currentForm(); |
| 337 if (form && isHTMLInputElement(*r.innerNode())) { | 339 if (form && isHTMLInputElement(*r.innerNode())) { |
| 338 HTMLInputElement& selectedElement = toHTMLInputElement(*r.innerNode()); | 340 HTMLInputElement& selectedElement = toHTMLInputElement(*r.innerNode()); |
| 339 WebSearchableFormData ws = WebSearchableFormData( | 341 WebSearchableFormData ws = WebSearchableFormData( |
| 340 WebFormElement(form), WebInputElement(&selectedElement)); | 342 WebFormElement(form), WebInputElement(&selectedElement)); |
| 341 if (ws.url().isValid()) | 343 if (ws.url().isValid()) |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 data.inputFieldType = WebContextMenuData::InputFieldTypePlainText; | 383 data.inputFieldType = WebContextMenuData::InputFieldTypePlainText; |
| 382 else | 384 else |
| 383 data.inputFieldType = WebContextMenuData::InputFieldTypeOther; | 385 data.inputFieldType = WebContextMenuData::InputFieldTypeOther; |
| 384 } else { | 386 } else { |
| 385 data.inputFieldType = WebContextMenuData::InputFieldTypeNone; | 387 data.inputFieldType = WebContextMenuData::InputFieldTypeNone; |
| 386 } | 388 } |
| 387 | 389 |
| 388 if (fromTouch && !shouldShowContextMenuFromTouch(data)) | 390 if (fromTouch && !shouldShowContextMenuFromTouch(data)) |
| 389 return false; | 391 return false; |
| 390 | 392 |
| 391 WebLocalFrameImpl* selectedWebFrame = | |
| 392 WebLocalFrameImpl::fromFrame(selectedFrame); | |
| 393 selectedWebFrame->setContextMenuNode(r.innerNodeOrImageMapImage()); | 393 selectedWebFrame->setContextMenuNode(r.innerNodeOrImageMapImage()); |
| 394 if (!selectedWebFrame->client()) | 394 if (!selectedWebFrame->client()) |
| 395 return false; | 395 return false; |
| 396 | 396 |
| 397 selectedWebFrame->client()->showContextMenu(data); | 397 selectedWebFrame->client()->showContextMenu(data); |
| 398 return true; | 398 return true; |
| 399 } | 399 } |
| 400 | 400 |
| 401 void ContextMenuClientImpl::clearContextMenu() { | 401 void ContextMenuClientImpl::clearContextMenu() { |
| 402 HitTestResult r = m_webView->page()->contextMenuController().hitTestResult(); | 402 HitTestResult r = m_webView->page()->contextMenuController().hitTestResult(); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 subMenuItems.swap(outputItems); | 450 subMenuItems.swap(outputItems); |
| 451 } | 451 } |
| 452 | 452 |
| 453 void ContextMenuClientImpl::populateCustomMenuItems( | 453 void ContextMenuClientImpl::populateCustomMenuItems( |
| 454 const ContextMenu* defaultMenu, | 454 const ContextMenu* defaultMenu, |
| 455 WebContextMenuData* data) { | 455 WebContextMenuData* data) { |
| 456 populateSubMenuItems(defaultMenu->items(), data->customItems); | 456 populateSubMenuItems(defaultMenu->items(), data->customItems); |
| 457 } | 457 } |
| 458 | 458 |
| 459 } // namespace blink | 459 } // namespace blink |
| OLD | NEW |