OLD | NEW |
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 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 } | 122 } |
123 | 123 |
124 static PassRefPtr<Clipboard> createDraggingClipboard(ClipboardAccessPolicy polic
y, DragData* dragData) | 124 static PassRefPtr<Clipboard> createDraggingClipboard(ClipboardAccessPolicy polic
y, DragData* dragData) |
125 { | 125 { |
126 return Clipboard::create(Clipboard::DragAndDrop, policy, dragData->platformD
ata()); | 126 return Clipboard::create(Clipboard::DragAndDrop, policy, dragData->platformD
ata()); |
127 } | 127 } |
128 | 128 |
129 DragController::DragController(Page* page, DragClient* client) | 129 DragController::DragController(Page* page, DragClient* client) |
130 : m_page(page) | 130 : m_page(page) |
131 , m_client(client) | 131 , m_client(client) |
132 , m_documentUnderMouse(0) | 132 , m_documentUnderMouse(nullptr) |
133 , m_dragInitiator(0) | 133 , m_dragInitiator(nullptr) |
134 , m_fileInputElementUnderMouse(0) | 134 , m_fileInputElementUnderMouse(nullptr) |
135 , m_documentIsHandlingDrag(false) | 135 , m_documentIsHandlingDrag(false) |
136 , m_dragDestinationAction(DragDestinationActionNone) | 136 , m_dragDestinationAction(DragDestinationActionNone) |
137 , m_didInitiateDrag(false) | 137 , m_didInitiateDrag(false) |
138 { | 138 { |
139 ASSERT(m_client); | 139 ASSERT(m_client); |
140 } | 140 } |
141 | 141 |
142 DragController::~DragController() | 142 DragController::~DragController() |
143 { | 143 { |
144 } | 144 } |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 fragment->appendChild(anchor); | 178 fragment->appendChild(anchor); |
179 return fragment.release(); | 179 return fragment.release(); |
180 } | 180 } |
181 } | 181 } |
182 } | 182 } |
183 if (allowPlainText && dragData->containsPlainText()) { | 183 if (allowPlainText && dragData->containsPlainText()) { |
184 chosePlainText = true; | 184 chosePlainText = true; |
185 return createFragmentFromText(context.get(), dragData->asPlainText()).ge
t(); | 185 return createFragmentFromText(context.get(), dragData->asPlainText()).ge
t(); |
186 } | 186 } |
187 | 187 |
188 return 0; | 188 return nullptr; |
189 } | 189 } |
190 | 190 |
191 bool DragController::dragIsMove(FrameSelection& selection, DragData* dragData) | 191 bool DragController::dragIsMove(FrameSelection& selection, DragData* dragData) |
192 { | 192 { |
193 return m_documentUnderMouse == m_dragInitiator && selection.isContentEditabl
e() && selection.isRange() && !isCopyKeyDown(dragData); | 193 return m_documentUnderMouse == m_dragInitiator && selection.isContentEditabl
e() && selection.isRange() && !isCopyKeyDown(dragData); |
194 } | 194 } |
195 | 195 |
196 // FIXME: This method is poorly named. We're just clearing the selection from t
he document this drag is exiting. | 196 // FIXME: This method is poorly named. We're just clearing the selection from t
he document this drag is exiting. |
197 void DragController::cancelDrag() | 197 void DragController::cancelDrag() |
198 { | 198 { |
199 m_page->dragCaretController().clear(); | 199 m_page->dragCaretController().clear(); |
200 } | 200 } |
201 | 201 |
202 void DragController::dragEnded() | 202 void DragController::dragEnded() |
203 { | 203 { |
204 m_dragInitiator = 0; | 204 m_dragInitiator = nullptr; |
205 m_didInitiateDrag = false; | 205 m_didInitiateDrag = false; |
206 m_page->dragCaretController().clear(); | 206 m_page->dragCaretController().clear(); |
207 } | 207 } |
208 | 208 |
209 DragSession DragController::dragEntered(DragData* dragData) | 209 DragSession DragController::dragEntered(DragData* dragData) |
210 { | 210 { |
211 return dragEnteredOrUpdated(dragData); | 211 return dragEnteredOrUpdated(dragData); |
212 } | 212 } |
213 | 213 |
214 void DragController::dragExited(DragData* dragData) | 214 void DragController::dragExited(DragData* dragData) |
215 { | 215 { |
216 ASSERT(dragData); | 216 ASSERT(dragData); |
217 Frame* mainFrame = m_page->mainFrame(); | 217 Frame* mainFrame = m_page->mainFrame(); |
218 | 218 |
219 if (RefPtr<FrameView> v = mainFrame->view()) { | 219 if (RefPtr<FrameView> v = mainFrame->view()) { |
220 ClipboardAccessPolicy policy = (!m_documentUnderMouse || m_documentUnder
Mouse->securityOrigin()->isLocal()) ? ClipboardReadable : ClipboardTypesReadable
; | 220 ClipboardAccessPolicy policy = (!m_documentUnderMouse || m_documentUnder
Mouse->securityOrigin()->isLocal()) ? ClipboardReadable : ClipboardTypesReadable
; |
221 RefPtr<Clipboard> clipboard = createDraggingClipboard(policy, dragData); | 221 RefPtr<Clipboard> clipboard = createDraggingClipboard(policy, dragData); |
222 clipboard->setSourceOperation(dragData->draggingSourceOperationMask()); | 222 clipboard->setSourceOperation(dragData->draggingSourceOperationMask()); |
223 mainFrame->eventHandler().cancelDragAndDrop(createMouseEvent(dragData),
clipboard.get()); | 223 mainFrame->eventHandler().cancelDragAndDrop(createMouseEvent(dragData),
clipboard.get()); |
224 clipboard->setAccessPolicy(ClipboardNumb); // invalidate clipboard he
re for security | 224 clipboard->setAccessPolicy(ClipboardNumb); // invalidate clipboard he
re for security |
225 } | 225 } |
226 mouseMovedIntoDocument(0); | 226 mouseMovedIntoDocument(0); |
227 if (m_fileInputElementUnderMouse) | 227 if (m_fileInputElementUnderMouse) |
228 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false); | 228 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false); |
229 m_fileInputElementUnderMouse = 0; | 229 m_fileInputElementUnderMouse = nullptr; |
230 } | 230 } |
231 | 231 |
232 DragSession DragController::dragUpdated(DragData* dragData) | 232 DragSession DragController::dragUpdated(DragData* dragData) |
233 { | 233 { |
234 return dragEnteredOrUpdated(dragData); | 234 return dragEnteredOrUpdated(dragData); |
235 } | 235 } |
236 | 236 |
237 bool DragController::performDrag(DragData* dragData) | 237 bool DragController::performDrag(DragData* dragData) |
238 { | 238 { |
239 ASSERT(dragData); | 239 ASSERT(dragData); |
240 m_documentUnderMouse = m_page->mainFrame()->documentAtPoint(dragData->client
Position()); | 240 m_documentUnderMouse = m_page->mainFrame()->documentAtPoint(dragData->client
Position()); |
241 if ((m_dragDestinationAction & DragDestinationActionDHTML) && m_documentIsHa
ndlingDrag) { | 241 if ((m_dragDestinationAction & DragDestinationActionDHTML) && m_documentIsHa
ndlingDrag) { |
242 RefPtr<Frame> mainFrame = m_page->mainFrame(); | 242 RefPtr<Frame> mainFrame = m_page->mainFrame(); |
243 bool preventedDefault = false; | 243 bool preventedDefault = false; |
244 if (mainFrame->view()) { | 244 if (mainFrame->view()) { |
245 // Sending an event can result in the destruction of the view and pa
rt. | 245 // Sending an event can result in the destruction of the view and pa
rt. |
246 RefPtr<Clipboard> clipboard = createDraggingClipboard(ClipboardReada
ble, dragData); | 246 RefPtr<Clipboard> clipboard = createDraggingClipboard(ClipboardReada
ble, dragData); |
247 clipboard->setSourceOperation(dragData->draggingSourceOperationMask(
)); | 247 clipboard->setSourceOperation(dragData->draggingSourceOperationMask(
)); |
248 preventedDefault = mainFrame->eventHandler().performDragAndDrop(crea
teMouseEvent(dragData), clipboard.get()); | 248 preventedDefault = mainFrame->eventHandler().performDragAndDrop(crea
teMouseEvent(dragData), clipboard.get()); |
249 clipboard->setAccessPolicy(ClipboardNumb); // Invalidate clipboard h
ere for security | 249 clipboard->setAccessPolicy(ClipboardNumb); // Invalidate clipboard h
ere for security |
250 } | 250 } |
251 if (preventedDefault) { | 251 if (preventedDefault) { |
252 m_documentUnderMouse = 0; | 252 m_documentUnderMouse = nullptr; |
253 return true; | 253 return true; |
254 } | 254 } |
255 } | 255 } |
256 | 256 |
257 if ((m_dragDestinationAction & DragDestinationActionEdit) && concludeEditDra
g(dragData)) { | 257 if ((m_dragDestinationAction & DragDestinationActionEdit) && concludeEditDra
g(dragData)) { |
258 m_documentUnderMouse = 0; | 258 m_documentUnderMouse = nullptr; |
259 return true; | 259 return true; |
260 } | 260 } |
261 | 261 |
262 m_documentUnderMouse = 0; | 262 m_documentUnderMouse = nullptr; |
263 | 263 |
264 if (operationForLoad(dragData) == DragOperationNone) | 264 if (operationForLoad(dragData) == DragOperationNone) |
265 return false; | 265 return false; |
266 | 266 |
267 if (m_page->settings().navigateOnDragDrop()) | 267 if (m_page->settings().navigateOnDragDrop()) |
268 m_page->mainFrame()->loader().load(FrameLoadRequest(0, ResourceRequest(d
ragData->asURL()))); | 268 m_page->mainFrame()->loader().load(FrameLoadRequest(0, ResourceRequest(d
ragData->asURL()))); |
269 return true; | 269 return true; |
270 } | 270 } |
271 | 271 |
272 void DragController::mouseMovedIntoDocument(Document* newDocument) | 272 void DragController::mouseMovedIntoDocument(Document* newDocument) |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 dragSession.numberOfItemsToBeAccepted = numberOfFiles != 1 ? 0 : 1; | 403 dragSession.numberOfItemsToBeAccepted = numberOfFiles != 1 ? 0 : 1; |
404 } | 404 } |
405 | 405 |
406 return true; | 406 return true; |
407 } | 407 } |
408 | 408 |
409 // We are not over an editable region. Make sure we're clearing any prior dr
ag cursor. | 409 // We are not over an editable region. Make sure we're clearing any prior dr
ag cursor. |
410 m_page->dragCaretController().clear(); | 410 m_page->dragCaretController().clear(); |
411 if (m_fileInputElementUnderMouse) | 411 if (m_fileInputElementUnderMouse) |
412 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false); | 412 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false); |
413 m_fileInputElementUnderMouse = 0; | 413 m_fileInputElementUnderMouse = nullptr; |
414 return false; | 414 return false; |
415 } | 415 } |
416 | 416 |
417 DragOperation DragController::operationForLoad(DragData* dragData) | 417 DragOperation DragController::operationForLoad(DragData* dragData) |
418 { | 418 { |
419 ASSERT(dragData); | 419 ASSERT(dragData); |
420 Document* doc = m_page->mainFrame()->documentAtPoint(dragData->clientPositio
n()); | 420 Document* doc = m_page->mainFrame()->documentAtPoint(dragData->clientPositio
n()); |
421 | 421 |
422 if (doc && (m_didInitiateDrag || doc->isPluginDocument() || doc->rendererIsE
ditable())) | 422 if (doc && (m_didInitiateDrag || doc->isPluginDocument() || doc->rendererIsE
ditable())) |
423 return DragOperationNone; | 423 return DragOperationNone; |
(...skipping 19 matching lines...) Expand all Loading... |
443 return target->dispatchEvent(TextEvent::createForDrop(innerFrame->domWindow(
), text), IGNORE_EXCEPTION); | 443 return target->dispatchEvent(TextEvent::createForDrop(innerFrame->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 RefPtr<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 = nullptr; |
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 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
958 return false; | 958 return false; |
959 #endif | 959 #endif |
960 } | 960 } |
961 | 961 |
962 void DragController::cleanupAfterSystemDrag() | 962 void DragController::cleanupAfterSystemDrag() |
963 { | 963 { |
964 } | 964 } |
965 | 965 |
966 } // namespace WebCore | 966 } // namespace WebCore |
967 | 967 |
OLD | NEW |