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

Side by Side Diff: Source/core/page/DragController.cpp

Issue 19510005: [oilpan] Completely move HTMLFormControlElement's hierarchy to the managed heap Base URL: svn://svn.chromium.org/blink/branches/oilpan
Patch Set: Created 7 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/page/DragController.h ('k') | Source/core/rendering/HitTestResult.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2009, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2009, 2010 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Google Inc. 3 * Copyright (C) 2008 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 if (RefPtr<FrameView> v = mainFrame->view()) { 204 if (RefPtr<FrameView> v = mainFrame->view()) {
205 ClipboardAccessPolicy policy = (!m_documentUnderMouse || m_documentUnder Mouse->securityOrigin()->isLocal()) ? ClipboardReadable : ClipboardTypesReadable ; 205 ClipboardAccessPolicy policy = (!m_documentUnderMouse || m_documentUnder Mouse->securityOrigin()->isLocal()) ? ClipboardReadable : ClipboardTypesReadable ;
206 RefPtr<Clipboard> clipboard = Clipboard::create(policy, dragData, mainFr ame); 206 RefPtr<Clipboard> clipboard = Clipboard::create(policy, dragData, mainFr ame);
207 clipboard->setSourceOperation(dragData->draggingSourceOperationMask()); 207 clipboard->setSourceOperation(dragData->draggingSourceOperationMask());
208 mainFrame->eventHandler()->cancelDragAndDrop(createMouseEvent(dragData), clipboard.get()); 208 mainFrame->eventHandler()->cancelDragAndDrop(createMouseEvent(dragData), clipboard.get());
209 clipboard->setAccessPolicy(ClipboardNumb); // invalidate clipboard he re for security 209 clipboard->setAccessPolicy(ClipboardNumb); // invalidate clipboard he re for security
210 } 210 }
211 mouseMovedIntoDocument(0); 211 mouseMovedIntoDocument(0);
212 if (m_fileInputElementUnderMouse) 212 if (m_fileInputElementUnderMouse)
213 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false); 213 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false);
214 m_fileInputElementUnderMouse = 0; 214 m_fileInputElementUnderMouse.clear();
215 } 215 }
216 216
217 DragSession DragController::dragUpdated(DragData* dragData) 217 DragSession DragController::dragUpdated(DragData* dragData)
218 { 218 {
219 return dragEnteredOrUpdated(dragData); 219 return dragEnteredOrUpdated(dragData);
220 } 220 }
221 221
222 bool DragController::performDrag(DragData* dragData) 222 bool DragController::performDrag(DragData* dragData)
223 { 223 {
224 ASSERT(dragData); 224 ASSERT(dragData);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 return DragSession(); 278 return DragSession();
279 } 279 }
280 280
281 DragSession dragSession; 281 DragSession dragSession;
282 m_documentIsHandlingDrag = tryDocumentDrag(dragData, m_dragDestinationAction , dragSession); 282 m_documentIsHandlingDrag = tryDocumentDrag(dragData, m_dragDestinationAction , dragSession);
283 if (!m_documentIsHandlingDrag && (m_dragDestinationAction & DragDestinationA ctionLoad)) 283 if (!m_documentIsHandlingDrag && (m_dragDestinationAction & DragDestinationA ctionLoad))
284 dragSession.operation = operationForLoad(dragData); 284 dragSession.operation = operationForLoad(dragData);
285 return dragSession; 285 return dragSession;
286 } 286 }
287 287
288 static HTMLInputElement* asFileInput(Node* node) 288 static Result<HTMLInputElement> asFileInput(Node* node)
289 { 289 {
290 ASSERT(node); 290 ASSERT(node);
291 291
292 HTMLInputElement* inputElement = node->toInputElement(); 292 Handle<HTMLInputElement> inputElement = node->toInputElement();
293 293
294 // If this is a button inside of the a file input, move up to the file input . 294 // If this is a button inside of the a file input, move up to the file input .
295 if (inputElement && inputElement->isTextButton() && inputElement->treeScope( )->rootNode()->isShadowRoot()) 295 if (inputElement && inputElement->isTextButton() && inputElement->treeScope( )->rootNode()->isShadowRoot())
296 inputElement = toShadowRoot(Handle<Node>(inputElement->treeScope()->root Node()).raw())->host()->toInputElement(); 296 inputElement = toShadowRoot(Handle<Node>(inputElement->treeScope()->root Node()).raw())->host()->toInputElement();
297 297
298 return inputElement && inputElement->isFileUpload() ? inputElement : 0; 298 return inputElement && inputElement->isFileUpload() ? inputElement : nullptr ;
299 } 299 }
300 300
301 // This can return null if an empty document is loaded. 301 // This can return null if an empty document is loaded.
302 static Element* elementUnderMouse(Document* documentUnderMouse, const IntPoint& p) 302 static Element* elementUnderMouse(Document* documentUnderMouse, const IntPoint& p)
303 { 303 {
304 Frame* frame = documentUnderMouse->frame(); 304 Frame* frame = documentUnderMouse->frame();
305 float zoomFactor = frame ? frame->pageZoomFactor() : 1; 305 float zoomFactor = frame ? frame->pageZoomFactor() : 1;
306 LayoutPoint point = roundedLayoutPoint(FloatPoint(p.x() * zoomFactor, p.y() * zoomFactor)); 306 LayoutPoint point = roundedLayoutPoint(FloatPoint(p.x() * zoomFactor, p.y() * zoomFactor));
307 307
308 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | H itTestRequest::DisallowShadowContent); 308 HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | H itTestRequest::DisallowShadowContent);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 if (dragData->containsColor()) { 355 if (dragData->containsColor()) {
356 dragSession.operation = DragOperationGeneric; 356 dragSession.operation = DragOperationGeneric;
357 return true; 357 return true;
358 } 358 }
359 359
360 IntPoint point = frameView->windowToContents(dragData->clientPosition()) ; 360 IntPoint point = frameView->windowToContents(dragData->clientPosition()) ;
361 Element* element = elementUnderMouse(m_documentUnderMouse.get(), point); 361 Element* element = elementUnderMouse(m_documentUnderMouse.get(), point);
362 if (!element) 362 if (!element)
363 return false; 363 return false;
364 364
365 HTMLInputElement* elementAsFileInput = asFileInput(element); 365 Handle<HTMLInputElement> elementAsFileInput = asFileInput(element);
366 if (m_fileInputElementUnderMouse != elementAsFileInput) { 366 if (m_fileInputElementUnderMouse != elementAsFileInput) {
367 if (m_fileInputElementUnderMouse) 367 if (m_fileInputElementUnderMouse)
368 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false); 368 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false);
369 m_fileInputElementUnderMouse = elementAsFileInput; 369 m_fileInputElementUnderMouse = elementAsFileInput;
370 } 370 }
371 371
372 if (!m_fileInputElementUnderMouse) 372 if (!m_fileInputElementUnderMouse)
373 m_page->dragCaretController()->setCaretPosition(m_documentUnderMouse ->frame()->visiblePositionForPoint(point)); 373 m_page->dragCaretController()->setCaretPosition(m_documentUnderMouse ->frame()->visiblePositionForPoint(point));
374 374
375 Frame* innerFrame = element->document()->frame(); 375 Frame* innerFrame = element->document()->frame();
(...skipping 21 matching lines...) Expand all
397 dragSession.numberOfItemsToBeAccepted = numberOfFiles != 1 ? 0 : 1; 397 dragSession.numberOfItemsToBeAccepted = numberOfFiles != 1 ? 0 : 1;
398 } 398 }
399 399
400 return true; 400 return true;
401 } 401 }
402 402
403 // We are not over an editable region. Make sure we're clearing any prior dr ag cursor. 403 // We are not over an editable region. Make sure we're clearing any prior dr ag cursor.
404 m_page->dragCaretController()->clear(); 404 m_page->dragCaretController()->clear();
405 if (m_fileInputElementUnderMouse) 405 if (m_fileInputElementUnderMouse)
406 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false); 406 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false);
407 m_fileInputElementUnderMouse = 0; 407 m_fileInputElementUnderMouse.clear();
408 return false; 408 return false;
409 } 409 }
410 410
411 DragSourceAction DragController::delegateDragSourceAction(const IntPoint& rootVi ewPoint) 411 DragSourceAction DragController::delegateDragSourceAction(const IntPoint& rootVi ewPoint)
412 { 412 {
413 m_dragSourceAction = m_client->dragSourceActionMaskForPoint(rootViewPoint); 413 m_dragSourceAction = m_client->dragSourceActionMaskForPoint(rootViewPoint);
414 return m_dragSourceAction; 414 return m_dragSourceAction;
415 } 415 }
416 416
417 DragOperation DragController::operationForLoad(DragData* dragData) 417 DragOperation DragController::operationForLoad(DragData* dragData)
(...skipping 22 matching lines...) Expand all
440 ASSERT(m_page->dragCaretController()->hasCaret()); 440 ASSERT(m_page->dragCaretController()->hasCaret());
441 String text = m_page->dragCaretController()->isContentRichlyEditable() ? "" : dragData->asPlainText(innerFrame); 441 String text = m_page->dragCaretController()->isContentRichlyEditable() ? "" : dragData->asPlainText(innerFrame);
442 Node* target = innerFrame->editor()->findEventTargetFrom(m_page->dragCaretCo ntroller()->caretPosition()); 442 Node* target = innerFrame->editor()->findEventTargetFrom(m_page->dragCaretCo ntroller()->caretPosition());
443 return target->dispatchEvent(TextEvent::createForDrop(innerFrame->document() ->domWindow(), text), IGNORE_EXCEPTION); 443 return target->dispatchEvent(TextEvent::createForDrop(innerFrame->document() ->domWindow(), text), IGNORE_EXCEPTION);
444 } 444 }
445 445
446 bool DragController::concludeEditDrag(DragData* dragData) 446 bool DragController::concludeEditDrag(DragData* dragData)
447 { 447 {
448 ASSERT(dragData); 448 ASSERT(dragData);
449 449
450 RefPtr<HTMLInputElement> fileInput = m_fileInputElementUnderMouse; 450 Handle<HTMLInputElement> fileInput = m_fileInputElementUnderMouse;
451 if (m_fileInputElementUnderMouse) { 451 if (m_fileInputElementUnderMouse) {
452 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false); 452 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false);
453 m_fileInputElementUnderMouse = 0; 453 m_fileInputElementUnderMouse.clear();
454 } 454 }
455 455
456 if (!m_documentUnderMouse) 456 if (!m_documentUnderMouse)
457 return false; 457 return false;
458 458
459 IntPoint point = m_documentUnderMouse->view()->windowToContents(dragData->cl ientPosition()); 459 IntPoint point = m_documentUnderMouse->view()->windowToContents(dragData->cl ientPosition());
460 Element* element = elementUnderMouse(m_documentUnderMouse.get(), point); 460 Element* element = elementUnderMouse(m_documentUnderMouse.get(), point);
461 if (!element) 461 if (!element)
462 return false; 462 return false;
463 RefPtr<Frame> innerFrame = element->ownerDocument()->frame(); 463 RefPtr<Frame> innerFrame = element->ownerDocument()->frame();
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 #endif 949 #endif
950 return maxDragImageSize; 950 return maxDragImageSize;
951 } 951 }
952 952
953 void DragController::cleanupAfterSystemDrag() 953 void DragController::cleanupAfterSystemDrag()
954 { 954 {
955 } 955 }
956 956
957 } // namespace WebCore 957 } // namespace WebCore
958 958
OLDNEW
« no previous file with comments | « Source/core/page/DragController.h ('k') | Source/core/rendering/HitTestResult.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698