| 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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 { | 142 { |
| 143 return adoptPtr(new DragController(page, client)); | 143 return adoptPtr(new DragController(page, client)); |
| 144 } | 144 } |
| 145 | 145 |
| 146 static PassRefPtr<DocumentFragment> documentFragmentFromDragData(DragData* dragD
ata, Frame* frame, RefPtr<Range> context, | 146 static PassRefPtr<DocumentFragment> documentFragmentFromDragData(DragData* dragD
ata, Frame* frame, RefPtr<Range> context, |
| 147 bool allowPlainText, bool& chosePlainT
ext) | 147 bool allowPlainText, bool& chosePlainT
ext) |
| 148 { | 148 { |
| 149 ASSERT(dragData); | 149 ASSERT(dragData); |
| 150 chosePlainText = false; | 150 chosePlainText = false; |
| 151 | 151 |
| 152 Document* document = context->ownerDocument(); | 152 Document& document = context->ownerDocument(); |
| 153 ASSERT(document); | 153 if (dragData->containsCompatibleContent()) { |
| 154 if (document && dragData->containsCompatibleContent()) { | |
| 155 if (PassRefPtr<DocumentFragment> fragment = dragData->asFragment(frame,
context, allowPlainText, chosePlainText)) | 154 if (PassRefPtr<DocumentFragment> fragment = dragData->asFragment(frame,
context, allowPlainText, chosePlainText)) |
| 156 return fragment; | 155 return fragment; |
| 157 | 156 |
| 158 if (dragData->containsURL(frame, DragData::DoNotConvertFilenames)) { | 157 if (dragData->containsURL(frame, DragData::DoNotConvertFilenames)) { |
| 159 String title; | 158 String title; |
| 160 String url = dragData->asURL(frame, DragData::DoNotConvertFilenames,
&title); | 159 String url = dragData->asURL(frame, DragData::DoNotConvertFilenames,
&title); |
| 161 if (!url.isEmpty()) { | 160 if (!url.isEmpty()) { |
| 162 RefPtr<HTMLAnchorElement> anchor = HTMLAnchorElement::create(*do
cument); | 161 RefPtr<HTMLAnchorElement> anchor = HTMLAnchorElement::create(doc
ument); |
| 163 anchor->setHref(url); | 162 anchor->setHref(url); |
| 164 if (title.isEmpty()) { | 163 if (title.isEmpty()) { |
| 165 // Try the plain text first because the url might be normali
zed or escaped. | 164 // Try the plain text first because the url might be normali
zed or escaped. |
| 166 if (dragData->containsPlainText()) | 165 if (dragData->containsPlainText()) |
| 167 title = dragData->asPlainText(frame); | 166 title = dragData->asPlainText(frame); |
| 168 if (title.isEmpty()) | 167 if (title.isEmpty()) |
| 169 title = url; | 168 title = url; |
| 170 } | 169 } |
| 171 RefPtr<Node> anchorText = document->createTextNode(title); | 170 RefPtr<Node> anchorText = document.createTextNode(title); |
| 172 anchor->appendChild(anchorText); | 171 anchor->appendChild(anchorText); |
| 173 RefPtr<DocumentFragment> fragment = document->createDocumentFrag
ment(); | 172 RefPtr<DocumentFragment> fragment = document.createDocumentFragm
ent(); |
| 174 fragment->appendChild(anchor); | 173 fragment->appendChild(anchor); |
| 175 return fragment.release(); | 174 return fragment.release(); |
| 176 } | 175 } |
| 177 } | 176 } |
| 178 } | 177 } |
| 179 if (allowPlainText && dragData->containsPlainText()) { | 178 if (allowPlainText && dragData->containsPlainText()) { |
| 180 chosePlainText = true; | 179 chosePlainText = true; |
| 181 return createFragmentFromText(context.get(), dragData->asPlainText(frame
)).get(); | 180 return createFragmentFromText(context.get(), dragData->asPlainText(frame
)).get(); |
| 182 } | 181 } |
| 183 | 182 |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 | 477 |
| 479 VisibleSelection dragCaret = m_page->dragCaretController().caretPosition(); | 478 VisibleSelection dragCaret = m_page->dragCaretController().caretPosition(); |
| 480 m_page->dragCaretController().clear(); | 479 m_page->dragCaretController().clear(); |
| 481 RefPtr<Range> range = dragCaret.toNormalizedRange(); | 480 RefPtr<Range> range = dragCaret.toNormalizedRange(); |
| 482 RefPtr<Element> rootEditableElement = innerFrame->selection().rootEditableEl
ement(); | 481 RefPtr<Element> rootEditableElement = innerFrame->selection().rootEditableEl
ement(); |
| 483 | 482 |
| 484 // For range to be null a WebKit client must have done something bad while | 483 // For range to be null a WebKit client must have done something bad while |
| 485 // manually controlling drag behaviour | 484 // manually controlling drag behaviour |
| 486 if (!range) | 485 if (!range) |
| 487 return false; | 486 return false; |
| 488 ResourceFetcher* fetcher = range->ownerDocument()->fetcher(); | 487 ResourceFetcher* fetcher = range->ownerDocument().fetcher(); |
| 489 ResourceCacheValidationSuppressor validationSuppressor(fetcher); | 488 ResourceCacheValidationSuppressor validationSuppressor(fetcher); |
| 490 if (dragIsMove(innerFrame->selection(), dragData) || dragCaret.isContentRich
lyEditable()) { | 489 if (dragIsMove(innerFrame->selection(), dragData) || dragCaret.isContentRich
lyEditable()) { |
| 491 bool chosePlainText = false; | 490 bool chosePlainText = false; |
| 492 RefPtr<DocumentFragment> fragment = documentFragmentFromDragData(dragDat
a, innerFrame.get(), range, true, chosePlainText); | 491 RefPtr<DocumentFragment> fragment = documentFragmentFromDragData(dragDat
a, innerFrame.get(), range, true, chosePlainText); |
| 493 if (!fragment || !innerFrame->editor().shouldInsertFragment(fragment, ra
nge, EditorInsertActionDropped)) { | 492 if (!fragment || !innerFrame->editor().shouldInsertFragment(fragment, ra
nge, EditorInsertActionDropped)) { |
| 494 return false; | 493 return false; |
| 495 } | 494 } |
| 496 | 495 |
| 497 if (dragIsMove(innerFrame->selection(), dragData)) { | 496 if (dragIsMove(innerFrame->selection(), dragData)) { |
| 498 // NSTextView behavior is to always smart delete on moving a selecti
on, | 497 // NSTextView behavior is to always smart delete on moving a selecti
on, |
| (...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 923 return false; | 922 return false; |
| 924 #endif | 923 #endif |
| 925 } | 924 } |
| 926 | 925 |
| 927 void DragController::cleanupAfterSystemDrag() | 926 void DragController::cleanupAfterSystemDrag() |
| 928 { | 927 { |
| 929 } | 928 } |
| 930 | 929 |
| 931 } // namespace WebCore | 930 } // namespace WebCore |
| 932 | 931 |
| OLD | NEW |