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 29 matching lines...) Expand all Loading... |
40 #include "core/dom/shadow/ShadowRoot.h" | 40 #include "core/dom/shadow/ShadowRoot.h" |
41 #include "core/editing/Editor.h" | 41 #include "core/editing/Editor.h" |
42 #include "core/editing/FrameSelection.h" | 42 #include "core/editing/FrameSelection.h" |
43 #include "core/editing/MoveSelectionCommand.h" | 43 #include "core/editing/MoveSelectionCommand.h" |
44 #include "core/editing/ReplaceSelectionCommand.h" | 44 #include "core/editing/ReplaceSelectionCommand.h" |
45 #include "core/editing/htmlediting.h" | 45 #include "core/editing/htmlediting.h" |
46 #include "core/editing/markup.h" | 46 #include "core/editing/markup.h" |
47 #include "core/events/TextEvent.h" | 47 #include "core/events/TextEvent.h" |
48 #include "core/fetch/ImageResource.h" | 48 #include "core/fetch/ImageResource.h" |
49 #include "core/fetch/ResourceFetcher.h" | 49 #include "core/fetch/ResourceFetcher.h" |
| 50 #include "core/frame/FrameProtector.h" |
50 #include "core/frame/FrameView.h" | 51 #include "core/frame/FrameView.h" |
51 #include "core/frame/LocalFrame.h" | 52 #include "core/frame/LocalFrame.h" |
52 #include "core/html/HTMLAnchorElement.h" | 53 #include "core/html/HTMLAnchorElement.h" |
53 #include "core/html/HTMLFormElement.h" | 54 #include "core/html/HTMLFormElement.h" |
54 #include "core/html/HTMLInputElement.h" | 55 #include "core/html/HTMLInputElement.h" |
55 #include "core/html/HTMLPlugInElement.h" | 56 #include "core/html/HTMLPlugInElement.h" |
56 #include "core/loader/FrameLoadRequest.h" | 57 #include "core/loader/FrameLoadRequest.h" |
57 #include "core/loader/FrameLoader.h" | 58 #include "core/loader/FrameLoader.h" |
58 #include "core/page/DragClient.h" | 59 #include "core/page/DragClient.h" |
59 #include "core/page/DragData.h" | 60 #include "core/page/DragData.h" |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 DragSession DragController::dragEntered(DragData* dragData) | 209 DragSession DragController::dragEntered(DragData* dragData) |
209 { | 210 { |
210 return dragEnteredOrUpdated(dragData); | 211 return dragEnteredOrUpdated(dragData); |
211 } | 212 } |
212 | 213 |
213 void DragController::dragExited(DragData* dragData) | 214 void DragController::dragExited(DragData* dragData) |
214 { | 215 { |
215 ASSERT(dragData); | 216 ASSERT(dragData); |
216 LocalFrame* mainFrame = m_page->deprecatedLocalMainFrame(); | 217 LocalFrame* mainFrame = m_page->deprecatedLocalMainFrame(); |
217 | 218 |
218 if (RefPtr<FrameView> v = mainFrame->view()) { | 219 if (FrameView* v = mainFrame->view()) { |
| 220 FrameViewProtector protect(v); |
219 DataTransferAccessPolicy policy = (!m_documentUnderMouse || m_documentUn
derMouse->securityOrigin()->isLocal()) ? DataTransferReadable : DataTransferType
sReadable; | 221 DataTransferAccessPolicy policy = (!m_documentUnderMouse || m_documentUn
derMouse->securityOrigin()->isLocal()) ? DataTransferReadable : DataTransferType
sReadable; |
220 RefPtrWillBeRawPtr<DataTransfer> dataTransfer = createDraggingDataTransf
er(policy, dragData); | 222 RefPtrWillBeRawPtr<DataTransfer> dataTransfer = createDraggingDataTransf
er(policy, dragData); |
221 dataTransfer->setSourceOperation(dragData->draggingSourceOperationMask()
); | 223 dataTransfer->setSourceOperation(dragData->draggingSourceOperationMask()
); |
222 mainFrame->eventHandler().cancelDragAndDrop(createMouseEvent(dragData),
dataTransfer.get()); | 224 mainFrame->eventHandler().cancelDragAndDrop(createMouseEvent(dragData),
dataTransfer.get()); |
223 dataTransfer->setAccessPolicy(DataTransferNumb); // invalidate clipboard
here for security | 225 dataTransfer->setAccessPolicy(DataTransferNumb); // invalidate clipboard
here for security |
224 } | 226 } |
225 mouseMovedIntoDocument(0); | 227 mouseMovedIntoDocument(0); |
226 if (m_fileInputElementUnderMouse) | 228 if (m_fileInputElementUnderMouse) |
227 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false); | 229 m_fileInputElementUnderMouse->setCanReceiveDroppedFiles(false); |
228 m_fileInputElementUnderMouse = nullptr; | 230 m_fileInputElementUnderMouse = nullptr; |
229 } | 231 } |
230 | 232 |
231 DragSession DragController::dragUpdated(DragData* dragData) | 233 DragSession DragController::dragUpdated(DragData* dragData) |
232 { | 234 { |
233 return dragEnteredOrUpdated(dragData); | 235 return dragEnteredOrUpdated(dragData); |
234 } | 236 } |
235 | 237 |
236 bool DragController::performDrag(DragData* dragData) | 238 bool DragController::performDrag(DragData* dragData) |
237 { | 239 { |
238 ASSERT(dragData); | 240 ASSERT(dragData); |
239 m_documentUnderMouse = m_page->deprecatedLocalMainFrame()->documentAtPoint(d
ragData->clientPosition()); | 241 m_documentUnderMouse = m_page->deprecatedLocalMainFrame()->documentAtPoint(d
ragData->clientPosition()); |
240 if ((m_dragDestinationAction & DragDestinationActionDHTML) && m_documentIsHa
ndlingDrag) { | 242 if ((m_dragDestinationAction & DragDestinationActionDHTML) && m_documentIsHa
ndlingDrag) { |
241 RefPtr<LocalFrame> mainFrame = m_page->deprecatedLocalMainFrame(); | 243 LocalFrame* mainFrame = m_page->deprecatedLocalMainFrame(); |
| 244 FrameProtector protect(mainFrame); |
242 bool preventedDefault = false; | 245 bool preventedDefault = false; |
243 if (mainFrame->view()) { | 246 if (mainFrame->view()) { |
244 // Sending an event can result in the destruction of the view and pa
rt. | 247 // Sending an event can result in the destruction of the view and pa
rt. |
245 RefPtrWillBeRawPtr<DataTransfer> dataTransfer = createDraggingDataTr
ansfer(DataTransferReadable, dragData); | 248 RefPtrWillBeRawPtr<DataTransfer> dataTransfer = createDraggingDataTr
ansfer(DataTransferReadable, dragData); |
246 dataTransfer->setSourceOperation(dragData->draggingSourceOperationMa
sk()); | 249 dataTransfer->setSourceOperation(dragData->draggingSourceOperationMa
sk()); |
247 preventedDefault = mainFrame->eventHandler().performDragAndDrop(crea
teMouseEvent(dragData), dataTransfer.get()); | 250 preventedDefault = mainFrame->eventHandler().performDragAndDrop(crea
teMouseEvent(dragData), dataTransfer.get()); |
248 dataTransfer->setAccessPolicy(DataTransferNumb); // Invalidate clipb
oard here for security | 251 dataTransfer->setAccessPolicy(DataTransferNumb); // Invalidate clipb
oard here for security |
249 } | 252 } |
250 if (preventedDefault) { | 253 if (preventedDefault) { |
251 m_documentUnderMouse = nullptr; | 254 m_documentUnderMouse = nullptr; |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 // tryDHTMLDrag fires dragenter event. The event listener that listens | 348 // tryDHTMLDrag fires dragenter event. The event listener that listens |
346 // to this event may create a nested message loop (open a modal dialog), | 349 // to this event may create a nested message loop (open a modal dialog), |
347 // which could process dragleave event and reset m_documentUnderMouse in | 350 // which could process dragleave event and reset m_documentUnderMouse in |
348 // dragExited. | 351 // dragExited. |
349 if (!m_documentUnderMouse) | 352 if (!m_documentUnderMouse) |
350 return false; | 353 return false; |
351 } | 354 } |
352 | 355 |
353 // It's unclear why this check is after tryDHTMLDrag. | 356 // It's unclear why this check is after tryDHTMLDrag. |
354 // We send drag events in tryDHTMLDrag and that may be the reason. | 357 // We send drag events in tryDHTMLDrag and that may be the reason. |
355 RefPtr<FrameView> frameView = m_documentUnderMouse->view(); | 358 FrameView* frameView = m_documentUnderMouse->view(); |
| 359 FrameViewProtector protect(frameView); |
356 if (!frameView) | 360 if (!frameView) |
357 return false; | 361 return false; |
358 | 362 |
359 if (isHandlingDrag) { | 363 if (isHandlingDrag) { |
360 m_page->dragCaretController().clear(); | 364 m_page->dragCaretController().clear(); |
361 return true; | 365 return true; |
362 } | 366 } |
363 | 367 |
364 if ((actionMask & DragDestinationActionEdit) && canProcessDrag(dragData)) { | 368 if ((actionMask & DragDestinationActionEdit) && canProcessDrag(dragData)) { |
365 IntPoint point = frameView->windowToContents(dragData->clientPosition())
; | 369 IntPoint point = frameView->windowToContents(dragData->clientPosition())
; |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
452 m_fileInputElementUnderMouse = nullptr; | 456 m_fileInputElementUnderMouse = nullptr; |
453 } | 457 } |
454 | 458 |
455 if (!m_documentUnderMouse) | 459 if (!m_documentUnderMouse) |
456 return false; | 460 return false; |
457 | 461 |
458 IntPoint point = m_documentUnderMouse->view()->windowToContents(dragData->cl
ientPosition()); | 462 IntPoint point = m_documentUnderMouse->view()->windowToContents(dragData->cl
ientPosition()); |
459 Element* element = elementUnderMouse(m_documentUnderMouse.get(), point); | 463 Element* element = elementUnderMouse(m_documentUnderMouse.get(), point); |
460 if (!element) | 464 if (!element) |
461 return false; | 465 return false; |
462 RefPtr<LocalFrame> innerFrame = element->ownerDocument()->frame(); | 466 LocalFrame* innerFrame = element->ownerDocument()->frame(); |
| 467 FrameProtector protect(innerFrame); |
463 ASSERT(innerFrame); | 468 ASSERT(innerFrame); |
464 | 469 |
465 if (m_page->dragCaretController().hasCaret() && !dispatchTextInputEventFor(i
nnerFrame.get(), dragData)) | 470 if (m_page->dragCaretController().hasCaret() && !dispatchTextInputEventFor(i
nnerFrame, dragData)) |
466 return true; | 471 return true; |
467 | 472 |
468 if (dragData->containsFiles() && fileInput) { | 473 if (dragData->containsFiles() && fileInput) { |
469 // fileInput should be the element we hit tested for, unless it was made | 474 // fileInput should be the element we hit tested for, unless it was made |
470 // display:none in a drop event handler. | 475 // display:none in a drop event handler. |
471 ASSERT(fileInput == element || !fileInput->renderer()); | 476 ASSERT(fileInput == element || !fileInput->renderer()); |
472 if (fileInput->isDisabledFormControl()) | 477 if (fileInput->isDisabledFormControl()) |
473 return false; | 478 return false; |
474 | 479 |
475 return fileInput->receiveDroppedFiles(dragData); | 480 return fileInput->receiveDroppedFiles(dragData); |
(...skipping 10 matching lines...) Expand all Loading... |
486 RefPtrWillBeRawPtr<Element> rootEditableElement = innerFrame->selection().ro
otEditableElement(); | 491 RefPtrWillBeRawPtr<Element> rootEditableElement = innerFrame->selection().ro
otEditableElement(); |
487 | 492 |
488 // For range to be null a WebKit client must have done something bad while | 493 // For range to be null a WebKit client must have done something bad while |
489 // manually controlling drag behaviour | 494 // manually controlling drag behaviour |
490 if (!range) | 495 if (!range) |
491 return false; | 496 return false; |
492 ResourceFetcher* fetcher = range->ownerDocument().fetcher(); | 497 ResourceFetcher* fetcher = range->ownerDocument().fetcher(); |
493 ResourceCacheValidationSuppressor validationSuppressor(fetcher); | 498 ResourceCacheValidationSuppressor validationSuppressor(fetcher); |
494 if (dragIsMove(innerFrame->selection(), dragData) || dragCaret.isContentRich
lyEditable()) { | 499 if (dragIsMove(innerFrame->selection(), dragData) || dragCaret.isContentRich
lyEditable()) { |
495 bool chosePlainText = false; | 500 bool chosePlainText = false; |
496 RefPtrWillBeRawPtr<DocumentFragment> fragment = documentFragmentFromDrag
Data(dragData, innerFrame.get(), range, true, chosePlainText); | 501 RefPtrWillBeRawPtr<DocumentFragment> fragment = documentFragmentFromDrag
Data(dragData, innerFrame, range, true, chosePlainText); |
497 if (!fragment) | 502 if (!fragment) |
498 return false; | 503 return false; |
499 | 504 |
500 if (dragIsMove(innerFrame->selection(), dragData)) { | 505 if (dragIsMove(innerFrame->selection(), dragData)) { |
501 // NSTextView behavior is to always smart delete on moving a selecti
on, | 506 // NSTextView behavior is to always smart delete on moving a selecti
on, |
502 // but only to smart insert if the selection granularity is word gra
nularity. | 507 // but only to smart insert if the selection granularity is word gra
nularity. |
503 bool smartDelete = innerFrame->editor().smartInsertDeleteEnabled(); | 508 bool smartDelete = innerFrame->editor().smartInsertDeleteEnabled(); |
504 bool smartInsert = smartDelete && innerFrame->selection().granularit
y() == WordGranularity && dragData->canSmartReplace(); | 509 bool smartInsert = smartDelete && innerFrame->selection().granularit
y() == WordGranularity && dragData->canSmartReplace(); |
505 MoveSelectionCommand::create(fragment, dragCaret.base(), smartInsert
, smartDelete)->apply(); | 510 MoveSelectionCommand::create(fragment, dragCaret.base(), smartInsert
, smartDelete)->apply(); |
506 } else { | 511 } else { |
507 if (setSelectionToDragCaret(innerFrame.get(), dragCaret, range, poin
t)) { | 512 if (setSelectionToDragCaret(innerFrame, dragCaret, range, point)) { |
508 ReplaceSelectionCommand::CommandOptions options = ReplaceSelecti
onCommand::SelectReplacement | ReplaceSelectionCommand::PreventNesting; | 513 ReplaceSelectionCommand::CommandOptions options = ReplaceSelecti
onCommand::SelectReplacement | ReplaceSelectionCommand::PreventNesting; |
509 if (dragData->canSmartReplace()) | 514 if (dragData->canSmartReplace()) |
510 options |= ReplaceSelectionCommand::SmartReplace; | 515 options |= ReplaceSelectionCommand::SmartReplace; |
511 if (chosePlainText) | 516 if (chosePlainText) |
512 options |= ReplaceSelectionCommand::MatchStyle; | 517 options |= ReplaceSelectionCommand::MatchStyle; |
513 ASSERT(m_documentUnderMouse); | 518 ASSERT(m_documentUnderMouse); |
514 ReplaceSelectionCommand::create(*m_documentUnderMouse.get(), fra
gment, options)->apply(); | 519 ReplaceSelectionCommand::create(*m_documentUnderMouse.get(), fra
gment, options)->apply(); |
515 } | 520 } |
516 } | 521 } |
517 } else { | 522 } else { |
518 String text = dragData->asPlainText(); | 523 String text = dragData->asPlainText(); |
519 if (text.isEmpty()) | 524 if (text.isEmpty()) |
520 return false; | 525 return false; |
521 | 526 |
522 if (setSelectionToDragCaret(innerFrame.get(), dragCaret, range, point))
{ | 527 if (setSelectionToDragCaret(innerFrame, dragCaret, range, point)) { |
523 ASSERT(m_documentUnderMouse); | 528 ASSERT(m_documentUnderMouse); |
524 ReplaceSelectionCommand::create(*m_documentUnderMouse.get(), createF
ragmentFromText(range.get(), text), ReplaceSelectionCommand::SelectReplacement
| ReplaceSelectionCommand::MatchStyle | ReplaceSelectionCommand::PreventNesting)
->apply(); | 529 ReplaceSelectionCommand::create(*m_documentUnderMouse.get(), createF
ragmentFromText(range.get(), text), ReplaceSelectionCommand::SelectReplacement
| ReplaceSelectionCommand::MatchStyle | ReplaceSelectionCommand::PreventNesting)
->apply(); |
525 } | 530 } |
526 } | 531 } |
527 | 532 |
528 if (rootEditableElement) { | 533 if (rootEditableElement) { |
529 if (LocalFrame* frame = rootEditableElement->document().frame()) | 534 if (LocalFrame* frame = rootEditableElement->document().frame()) |
530 frame->eventHandler().updateDragStateAfterEditDragIfNeeded(rootEdita
bleElement.get()); | 535 frame->eventHandler().updateDragStateAfterEditDragIfNeeded(rootEdita
bleElement.get()); |
531 } | 536 } |
532 | 537 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 return DragOperationLink; | 587 return DragOperationLink; |
583 | 588 |
584 // FIXME: Does IE really return "generic" even if no operations were allowed
by the source? | 589 // FIXME: Does IE really return "generic" even if no operations were allowed
by the source? |
585 return DragOperationGeneric; | 590 return DragOperationGeneric; |
586 } | 591 } |
587 | 592 |
588 bool DragController::tryDHTMLDrag(DragData* dragData, DragOperation& operation) | 593 bool DragController::tryDHTMLDrag(DragData* dragData, DragOperation& operation) |
589 { | 594 { |
590 ASSERT(dragData); | 595 ASSERT(dragData); |
591 ASSERT(m_documentUnderMouse); | 596 ASSERT(m_documentUnderMouse); |
592 RefPtr<LocalFrame> mainFrame = m_page->deprecatedLocalMainFrame(); | 597 LocalFrame* mainFrame = m_page->deprecatedLocalMainFrame(); |
593 RefPtr<FrameView> viewProtector = mainFrame->view(); | 598 FrameProtector protect(mainFrame); |
594 if (!viewProtector) | 599 if (!mainFrame->view()) |
595 return false; | 600 return false; |
596 | 601 |
| 602 FrameViewProtector viewProtector(mainFrame->view()); |
597 DataTransferAccessPolicy policy = m_documentUnderMouse->securityOrigin()->is
Local() ? DataTransferReadable : DataTransferTypesReadable; | 603 DataTransferAccessPolicy policy = m_documentUnderMouse->securityOrigin()->is
Local() ? DataTransferReadable : DataTransferTypesReadable; |
598 RefPtrWillBeRawPtr<DataTransfer> dataTransfer = createDraggingDataTransfer(p
olicy, dragData); | 604 RefPtrWillBeRawPtr<DataTransfer> dataTransfer = createDraggingDataTransfer(p
olicy, dragData); |
599 DragOperation srcOpMask = dragData->draggingSourceOperationMask(); | 605 DragOperation srcOpMask = dragData->draggingSourceOperationMask(); |
600 dataTransfer->setSourceOperation(srcOpMask); | 606 dataTransfer->setSourceOperation(srcOpMask); |
601 | 607 |
602 PlatformMouseEvent event = createMouseEvent(dragData); | 608 PlatformMouseEvent event = createMouseEvent(dragData); |
603 if (!mainFrame->eventHandler().updateDragAndDrop(event, dataTransfer.get()))
{ | 609 if (!mainFrame->eventHandler().updateDragAndDrop(event, dataTransfer.get()))
{ |
604 dataTransfer->setAccessPolicy(DataTransferNumb); // invalidate clipboard
here for security | 610 dataTransfer->setAccessPolicy(DataTransferNumb); // invalidate clipboard
here for security |
605 return false; | 611 return false; |
606 } | 612 } |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
920 } | 926 } |
921 | 927 |
922 return true; | 928 return true; |
923 } | 929 } |
924 | 930 |
925 void DragController::doSystemDrag(DragImage* image, const IntPoint& dragLocation
, const IntPoint& eventPos, DataTransfer* dataTransfer, LocalFrame* frame, bool
forLink) | 931 void DragController::doSystemDrag(DragImage* image, const IntPoint& dragLocation
, const IntPoint& eventPos, DataTransfer* dataTransfer, LocalFrame* frame, bool
forLink) |
926 { | 932 { |
927 m_didInitiateDrag = true; | 933 m_didInitiateDrag = true; |
928 m_dragInitiator = frame->document(); | 934 m_dragInitiator = frame->document(); |
929 // Protect this frame and view, as a load may occur mid drag and attempt to
unload this frame | 935 // Protect this frame and view, as a load may occur mid drag and attempt to
unload this frame |
930 RefPtr<LocalFrame> frameProtector = m_page->deprecatedLocalMainFrame(); | 936 LocalFrame* mainFrame = m_page->deprecatedLocalMainFrame(); |
931 RefPtr<FrameView> viewProtector = frameProtector->view(); | 937 FrameProtector frameProtector(mainFrame); |
932 m_client->startDrag(image, viewProtector->rootViewToContents(frame->view()->
contentsToRootView(dragLocation)), | 938 FrameView* mainFrameView = mainFrame->view(); |
933 viewProtector->rootViewToContents(frame->view()->contentsToRootView(even
tPos)), dataTransfer, frameProtector.get(), forLink); | 939 FrameViewProtector viewProtector(mainFrameView); |
| 940 |
| 941 m_client->startDrag(image, mainFrameView->rootViewToContents(frame->view()->
contentsToRootView(dragLocation)), |
| 942 mainFrameView->rootViewToContents(frame->view()->contentsToRootView(even
tPos)), dataTransfer, frame, forLink); |
934 // DragClient::startDrag can cause our Page to dispear, deallocating |this|. | 943 // DragClient::startDrag can cause our Page to dispear, deallocating |this|. |
935 if (!frameProtector->page()) | 944 if (!frame->page()) |
936 return; | 945 return; |
937 | 946 |
938 cleanupAfterSystemDrag(); | 947 cleanupAfterSystemDrag(); |
939 } | 948 } |
940 | 949 |
941 DragOperation DragController::dragOperation(DragData* dragData) | 950 DragOperation DragController::dragOperation(DragData* dragData) |
942 { | 951 { |
943 // FIXME: To match the MacOS behaviour we should return DragOperationNone | 952 // FIXME: To match the MacOS behaviour we should return DragOperationNone |
944 // if we are a modal window, we are the drag source, or the window is an | 953 // if we are a modal window, we are the drag source, or the window is an |
945 // attached sheet If this can be determined from within WebCore | 954 // attached sheet If this can be determined from within WebCore |
(...skipping 19 matching lines...) Expand all Loading... |
965 | 974 |
966 void DragController::trace(Visitor* visitor) | 975 void DragController::trace(Visitor* visitor) |
967 { | 976 { |
968 visitor->trace(m_page); | 977 visitor->trace(m_page); |
969 visitor->trace(m_documentUnderMouse); | 978 visitor->trace(m_documentUnderMouse); |
970 visitor->trace(m_dragInitiator); | 979 visitor->trace(m_dragInitiator); |
971 visitor->trace(m_fileInputElementUnderMouse); | 980 visitor->trace(m_fileInputElementUnderMouse); |
972 } | 981 } |
973 | 982 |
974 } // namespace blink | 983 } // namespace blink |
OLD | NEW |