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 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 | 141 |
142 DragController::~DragController() | 142 DragController::~DragController() |
143 { | 143 { |
144 } | 144 } |
145 | 145 |
146 PassOwnPtr<DragController> DragController::create(Page* page, DragClient* client
) | 146 PassOwnPtr<DragController> DragController::create(Page* page, DragClient* client
) |
147 { | 147 { |
148 return adoptPtr(new DragController(page, client)); | 148 return adoptPtr(new DragController(page, client)); |
149 } | 149 } |
150 | 150 |
151 static PassRefPtr<DocumentFragment> documentFragmentFromDragData(DragData* dragD
ata, LocalFrame* frame, RefPtr<Range> context, | 151 static PassRefPtr<DocumentFragment> documentFragmentFromDragData(DragData* dragD
ata, LocalFrame* frame, RefPtrWillBeRawPtr<Range> context, |
152 bool allowPlainText, bool& chosePlainT
ext) | 152 bool allowPlainText, bool& chosePlainT
ext) |
153 { | 153 { |
154 ASSERT(dragData); | 154 ASSERT(dragData); |
155 chosePlainText = false; | 155 chosePlainText = false; |
156 | 156 |
157 Document& document = context->ownerDocument(); | 157 Document& document = context->ownerDocument(); |
158 if (dragData->containsCompatibleContent()) { | 158 if (dragData->containsCompatibleContent()) { |
159 if (PassRefPtr<DocumentFragment> fragment = dragData->asFragment(frame,
context, allowPlainText, chosePlainText)) | 159 if (PassRefPtr<DocumentFragment> fragment = dragData->asFragment(frame,
context, allowPlainText, chosePlainText)) |
160 return fragment; | 160 return fragment; |
161 | 161 |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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; |
424 return dragOperation(dragData); | 424 return dragOperation(dragData); |
425 } | 425 } |
426 | 426 |
427 static bool setSelectionToDragCaret(LocalFrame* frame, VisibleSelection& dragCar
et, RefPtr<Range>& range, const IntPoint& point) | 427 static bool setSelectionToDragCaret(LocalFrame* frame, VisibleSelection& dragCar
et, RefPtrWillBeRawPtr<Range>& range, const IntPoint& point) |
428 { | 428 { |
429 frame->selection().setSelection(dragCaret); | 429 frame->selection().setSelection(dragCaret); |
430 if (frame->selection().isNone()) { | 430 if (frame->selection().isNone()) { |
431 dragCaret = VisibleSelection(frame->visiblePositionForPoint(point)); | 431 dragCaret = VisibleSelection(frame->visiblePositionForPoint(point)); |
432 frame->selection().setSelection(dragCaret); | 432 frame->selection().setSelection(dragCaret); |
433 range = dragCaret.toNormalizedRange(); | 433 range = dragCaret.toNormalizedRange(); |
434 } | 434 } |
435 return !frame->selection().isNone() && frame->selection().isContentEditable(
); | 435 return !frame->selection().isNone() && frame->selection().isContentEditable(
); |
436 } | 436 } |
437 | 437 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 return fileInput->receiveDroppedFiles(dragData); | 476 return fileInput->receiveDroppedFiles(dragData); |
477 } | 477 } |
478 | 478 |
479 if (!m_page->dragController().canProcessDrag(dragData)) { | 479 if (!m_page->dragController().canProcessDrag(dragData)) { |
480 m_page->dragCaretController().clear(); | 480 m_page->dragCaretController().clear(); |
481 return false; | 481 return false; |
482 } | 482 } |
483 | 483 |
484 VisibleSelection dragCaret(m_page->dragCaretController().caretPosition()); | 484 VisibleSelection dragCaret(m_page->dragCaretController().caretPosition()); |
485 m_page->dragCaretController().clear(); | 485 m_page->dragCaretController().clear(); |
486 RefPtr<Range> range = dragCaret.toNormalizedRange(); | 486 RefPtrWillBeRawPtr<Range> range = dragCaret.toNormalizedRange(); |
487 RefPtr<Element> rootEditableElement = innerFrame->selection().rootEditableEl
ement(); | 487 RefPtr<Element> rootEditableElement = innerFrame->selection().rootEditableEl
ement(); |
488 | 488 |
489 // For range to be null a WebKit client must have done something bad while | 489 // For range to be null a WebKit client must have done something bad while |
490 // manually controlling drag behaviour | 490 // manually controlling drag behaviour |
491 if (!range) | 491 if (!range) |
492 return false; | 492 return false; |
493 ResourceFetcher* fetcher = range->ownerDocument().fetcher(); | 493 ResourceFetcher* fetcher = range->ownerDocument().fetcher(); |
494 ResourceCacheValidationSuppressor validationSuppressor(fetcher); | 494 ResourceCacheValidationSuppressor validationSuppressor(fetcher); |
495 if (dragIsMove(innerFrame->selection(), dragData) || dragCaret.isContentRich
lyEditable()) { | 495 if (dragIsMove(innerFrame->selection(), dragData) || dragCaret.isContentRich
lyEditable()) { |
496 bool chosePlainText = false; | 496 bool chosePlainText = false; |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
707 // Don't use cachedImage->imageForRenderer() here as that may return BitmapI
mages for cached SVG Images. | 707 // Don't use cachedImage->imageForRenderer() here as that may return BitmapI
mages for cached SVG Images. |
708 // Users of getImage() want access to the SVGImage, in order to figure out t
he filename extensions, | 708 // Users of getImage() want access to the SVGImage, in order to figure out t
he filename extensions, |
709 // which would be empty when asking the cached BitmapImages. | 709 // which would be empty when asking the cached BitmapImages. |
710 return (cachedImage && !cachedImage->errorOccurred()) ? | 710 return (cachedImage && !cachedImage->errorOccurred()) ? |
711 cachedImage->image() : 0; | 711 cachedImage->image() : 0; |
712 } | 712 } |
713 | 713 |
714 static void prepareClipboardForImageDrag(LocalFrame* source, Clipboard* clipboar
d, Element* node, const KURL& linkURL, const KURL& imageURL, const String& label
) | 714 static void prepareClipboardForImageDrag(LocalFrame* source, Clipboard* clipboar
d, Element* node, const KURL& linkURL, const KURL& imageURL, const String& label
) |
715 { | 715 { |
716 if (node->isContentRichlyEditable()) { | 716 if (node->isContentRichlyEditable()) { |
717 RefPtr<Range> range = source->document()->createRange(); | 717 RefPtrWillBeRawPtr<Range> range = source->document()->createRange(); |
718 range->selectNode(node, ASSERT_NO_EXCEPTION); | 718 range->selectNode(node, ASSERT_NO_EXCEPTION); |
719 source->selection().setSelection(VisibleSelection(range.get(), DOWNSTREA
M)); | 719 source->selection().setSelection(VisibleSelection(range.get(), DOWNSTREA
M)); |
720 } | 720 } |
721 clipboard->declareAndWriteDragImage(node, !linkURL.isEmpty() ? linkURL : ima
geURL, label); | 721 clipboard->declareAndWriteDragImage(node, !linkURL.isEmpty() ? linkURL : ima
geURL, label); |
722 } | 722 } |
723 | 723 |
724 bool DragController::populateDragClipboard(LocalFrame* src, const DragState& sta
te, const IntPoint& dragOrigin) | 724 bool DragController::populateDragClipboard(LocalFrame* src, const DragState& sta
te, const IntPoint& dragOrigin) |
725 { | 725 { |
726 ASSERT(dragTypeIsValid(state.m_dragType)); | 726 ASSERT(dragTypeIsValid(state.m_dragType)); |
727 ASSERT(src); | 727 ASSERT(src); |
(...skipping 12 matching lines...) Expand all Loading... |
740 const KURL& linkURL = hitTestResult.absoluteLinkURL(); | 740 const KURL& linkURL = hitTestResult.absoluteLinkURL(); |
741 const KURL& imageURL = hitTestResult.absoluteImageURL(); | 741 const KURL& imageURL = hitTestResult.absoluteImageURL(); |
742 | 742 |
743 Clipboard* clipboard = state.m_dragClipboard.get(); | 743 Clipboard* clipboard = state.m_dragClipboard.get(); |
744 Node* node = state.m_dragSrc.get(); | 744 Node* node = state.m_dragSrc.get(); |
745 | 745 |
746 if (state.m_dragType == DragSourceActionSelection) { | 746 if (state.m_dragType == DragSourceActionSelection) { |
747 if (enclosingTextFormControl(src->selection().start())) { | 747 if (enclosingTextFormControl(src->selection().start())) { |
748 clipboard->writePlainText(src->selectedTextForClipboard()); | 748 clipboard->writePlainText(src->selectedTextForClipboard()); |
749 } else { | 749 } else { |
750 RefPtr<Range> selectionRange = src->selection().toNormalizedRange(); | 750 RefPtrWillBeRawPtr<Range> selectionRange = src->selection().toNormal
izedRange(); |
751 ASSERT(selectionRange); | 751 ASSERT(selectionRange); |
752 | 752 |
753 clipboard->writeRange(selectionRange.get(), src); | 753 clipboard->writeRange(selectionRange.get(), src); |
754 } | 754 } |
755 } else if (state.m_dragType == DragSourceActionImage) { | 755 } else if (state.m_dragType == DragSourceActionImage) { |
756 if (imageURL.isEmpty() || !node || !node->isElementNode()) | 756 if (imageURL.isEmpty() || !node || !node->isElementNode()) |
757 return false; | 757 return false; |
758 Element* element = toElement(node); | 758 Element* element = toElement(node); |
759 prepareClipboardForImageDrag(src, clipboard, element, linkURL, imageURL,
hitTestResult.altDisplayString()); | 759 prepareClipboardForImageDrag(src, clipboard, element, linkURL, imageURL,
hitTestResult.altDisplayString()); |
760 } else if (state.m_dragType == DragSourceActionLink) { | 760 } else if (state.m_dragType == DragSourceActionLink) { |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
958 #else | 958 #else |
959 return keyState & PlatformEvent::CtrlKey; | 959 return keyState & PlatformEvent::CtrlKey; |
960 #endif | 960 #endif |
961 } | 961 } |
962 | 962 |
963 void DragController::cleanupAfterSystemDrag() | 963 void DragController::cleanupAfterSystemDrag() |
964 { | 964 { |
965 } | 965 } |
966 | 966 |
967 } // namespace WebCore | 967 } // namespace WebCore |
OLD | NEW |