Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
| 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. |
| 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) | 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) |
| 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. |
| 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
| 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 138 #include "core/loader/FrameLoader.h" | 138 #include "core/loader/FrameLoader.h" |
| 139 #include "core/loader/FrameLoaderClient.h" | 139 #include "core/loader/FrameLoaderClient.h" |
| 140 #include "core/loader/ImageLoader.h" | 140 #include "core/loader/ImageLoader.h" |
| 141 #include "core/loader/appcache/ApplicationCacheHost.h" | 141 #include "core/loader/appcache/ApplicationCacheHost.h" |
| 142 #include "core/page/Chrome.h" | 142 #include "core/page/Chrome.h" |
| 143 #include "core/page/ChromeClient.h" | 143 #include "core/page/ChromeClient.h" |
| 144 #include "core/page/ContentSecurityPolicy.h" | 144 #include "core/page/ContentSecurityPolicy.h" |
| 145 #include "core/page/DOMSecurityPolicy.h" | 145 #include "core/page/DOMSecurityPolicy.h" |
| 146 #include "core/page/DOMWindow.h" | 146 #include "core/page/DOMWindow.h" |
| 147 #include "core/page/EventHandler.h" | 147 #include "core/page/EventHandler.h" |
| 148 #include "core/page/FocusController.h" | |
| 148 #include "core/page/Frame.h" | 149 #include "core/page/Frame.h" |
| 149 #include "core/page/FrameTree.h" | 150 #include "core/page/FrameTree.h" |
| 150 #include "core/page/FrameView.h" | 151 #include "core/page/FrameView.h" |
| 151 #include "core/page/History.h" | 152 #include "core/page/History.h" |
| 152 #include "core/page/MouseEventWithHitTestResults.h" | 153 #include "core/page/MouseEventWithHitTestResults.h" |
| 153 #include "core/page/Page.h" | 154 #include "core/page/Page.h" |
| 154 #include "core/page/PageConsole.h" | 155 #include "core/page/PageConsole.h" |
| 155 #include "core/page/PointerLockController.h" | 156 #include "core/page/PointerLockController.h" |
| 156 #include "core/page/Settings.h" | 157 #include "core/page/Settings.h" |
| 157 #include "core/page/animation/AnimationController.h" | 158 #include "core/page/animation/AnimationController.h" |
| (...skipping 3141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3299 if (oldFocusedElement->active()) | 3300 if (oldFocusedElement->active()) |
| 3300 oldFocusedElement->setActive(false); | 3301 oldFocusedElement->setActive(false); |
| 3301 | 3302 |
| 3302 oldFocusedElement->setFocus(false); | 3303 oldFocusedElement->setFocus(false); |
| 3303 | 3304 |
| 3304 // Dispatch a change event for text fields or textareas that have been e dited | 3305 // Dispatch a change event for text fields or textareas that have been e dited |
| 3305 if (oldFocusedElement->wasChangedSinceLastFormControlChangeEvent()) | 3306 if (oldFocusedElement->wasChangedSinceLastFormControlChangeEvent()) |
| 3306 oldFocusedElement->dispatchFormControlChangeEvent(); | 3307 oldFocusedElement->dispatchFormControlChangeEvent(); |
| 3307 | 3308 |
| 3308 // Dispatch the blur event and let the node do any other blur related ac tivities (important for text fields) | 3309 // Dispatch the blur event and let the node do any other blur related ac tivities (important for text fields) |
| 3309 oldFocusedElement->dispatchBlurEvent(newFocusedElement.get()); | 3310 // If old element's page is unfocused, blur event will have already been dispatched |
| 3311 Page* oldPage = oldFocusedElement->document().page(); | |
|
tkent
2013/10/08 08:41:43
page() is enough because oldFocusedElement belongs
| |
| 3312 if (oldPage && oldPage->focusController().isFocused()) { | |
| 3313 oldFocusedElement->dispatchBlurEvent(newFocusedElement.get()); | |
| 3310 | 3314 |
| 3311 if (m_focusedElement) { | 3315 if (m_focusedElement) { |
| 3312 // handler shifted focus | 3316 // handler shifted focus |
| 3313 focusChangeBlocked = true; | 3317 focusChangeBlocked = true; |
| 3314 newFocusedElement = 0; | 3318 newFocusedElement = 0; |
| 3315 } | 3319 } |
| 3316 | 3320 |
| 3317 oldFocusedElement->dispatchFocusOutEvent(eventNames().focusoutEvent, new FocusedElement.get()); // DOM level 3 name for the bubbling blur event. | 3321 oldFocusedElement->dispatchFocusOutEvent(eventNames().focusoutEvent, newFocusedElement.get()); // DOM level 3 name for the bubbling blur event. |
| 3318 // FIXME: We should remove firing DOMFocusOutEvent event when we are sur e no content depends | 3322 // FIXME: We should remove firing DOMFocusOutEvent event when we are sure no content depends |
| 3319 // on it, probably when <rdar://problem/8503958> is resolved. | 3323 // on it, probably when <rdar://problem/8503958> is resolved. |
| 3320 oldFocusedElement->dispatchFocusOutEvent(eventNames().DOMFocusOutEvent, newFocusedElement.get()); // DOM level 2 name for compatibility. | 3324 oldFocusedElement->dispatchFocusOutEvent(eventNames().DOMFocusOutEve nt, newFocusedElement.get()); // DOM level 2 name for compatibility. |
| 3321 | 3325 |
| 3322 if (m_focusedElement) { | 3326 if (m_focusedElement) { |
| 3323 // handler shifted focus | 3327 // handler shifted focus |
| 3324 focusChangeBlocked = true; | 3328 focusChangeBlocked = true; |
| 3325 newFocusedElement = 0; | 3329 newFocusedElement = 0; |
| 3330 } | |
| 3326 } | 3331 } |
| 3327 | 3332 |
| 3328 if (oldFocusedElement->isRootEditableElement()) | 3333 if (oldFocusedElement->isRootEditableElement()) |
| 3329 frame()->editor().didEndEditing(); | 3334 frame()->editor().didEndEditing(); |
| 3330 | 3335 |
| 3331 if (view()) { | 3336 if (view()) { |
| 3332 Widget* oldWidget = widgetForElement(oldFocusedElement.get()); | 3337 Widget* oldWidget = widgetForElement(oldFocusedElement.get()); |
| 3333 if (oldWidget) | 3338 if (oldWidget) |
| 3334 oldWidget->setFocus(false); | 3339 oldWidget->setFocus(false); |
| 3335 else | 3340 else |
| 3336 view()->setFocus(false); | 3341 view()->setFocus(false); |
| 3337 } | 3342 } |
| 3338 | 3343 |
| 3339 // Autofill client may have modified the value of newFocusedElement, thu s require | 3344 // Autofill client may have modified the value of newFocusedElement, thu s require |
| 3340 // a layout update here, otherwise it will assert at newFocusedElement-> isFocusable(). | 3345 // a layout update here, otherwise it will assert at newFocusedElement-> isFocusable(). |
| 3341 // See crbug.com/251163. | 3346 // See crbug.com/251163. |
| 3342 updateLayoutIgnorePendingStylesheets(); | 3347 updateLayoutIgnorePendingStylesheets(); |
| 3343 } | 3348 } |
| 3344 | 3349 |
| 3345 if (newFocusedElement && newFocusedElement->isFocusable()) { | 3350 if (newFocusedElement && newFocusedElement->isFocusable()) { |
| 3346 if (newFocusedElement->isRootEditableElement() && !acceptsEditingFocus(n ewFocusedElement.get())) { | 3351 if (newFocusedElement->isRootEditableElement() && !acceptsEditingFocus(n ewFocusedElement.get())) { |
| 3347 // delegate blocks focus change | 3352 // delegate blocks focus change |
| 3348 focusChangeBlocked = true; | 3353 focusChangeBlocked = true; |
| 3349 goto SetFocusedElementDone; | 3354 goto SetFocusedElementDone; |
| 3350 } | 3355 } |
| 3351 // Set focus on the new node | 3356 // Set focus on the new node |
| 3352 m_focusedElement = newFocusedElement; | 3357 m_focusedElement = newFocusedElement; |
| 3353 | 3358 |
| 3354 // Dispatch the focus event and let the node do any other focus related activities (important for text fields) | 3359 // Dispatch the focus event and let the node do any other focus related activities (important for text fields) |
| 3355 m_focusedElement->dispatchFocusEvent(oldFocusedElement.get(), direction) ; | 3360 // If page is unfocused, focus event will be dispatched on page focus, d on't duplicate |
| 3361 if (!page() || page()->focusController().isFocused()) { | |
|
tkent
2013/10/08 08:41:43
!page() is inconsistent with the blur handling abo
| |
| 3362 m_focusedElement->dispatchFocusEvent(oldFocusedElement.get(), direct ion); | |
| 3356 | 3363 |
| 3357 if (m_focusedElement != newFocusedElement) { | 3364 if (m_focusedElement != newFocusedElement) { |
| 3358 // handler shifted focus | 3365 // handler shifted focus |
| 3359 focusChangeBlocked = true; | 3366 focusChangeBlocked = true; |
| 3360 goto SetFocusedElementDone; | 3367 goto SetFocusedElementDone; |
| 3368 } | |
| 3369 | |
| 3370 m_focusedElement->dispatchFocusInEvent(eventNames().focusinEvent, ol dFocusedElement.get()); // DOM level 3 bubbling focus event. | |
| 3371 | |
| 3372 if (m_focusedElement != newFocusedElement) { | |
| 3373 // handler shifted focus | |
| 3374 focusChangeBlocked = true; | |
| 3375 goto SetFocusedElementDone; | |
| 3376 } | |
| 3377 | |
| 3378 // FIXME: We should remove firing DOMFocusInEvent event when we are sure no content depends | |
| 3379 // on it, probably when <rdar://problem/8503958> is m. | |
| 3380 m_focusedElement->dispatchFocusInEvent(eventNames().DOMFocusInEvent, oldFocusedElement.get()); // DOM level 2 for compatibility. | |
| 3381 | |
| 3382 if (m_focusedElement != newFocusedElement) { | |
| 3383 // handler shifted focus | |
| 3384 focusChangeBlocked = true; | |
| 3385 goto SetFocusedElementDone; | |
| 3386 } | |
| 3361 } | 3387 } |
| 3362 | 3388 |
| 3363 m_focusedElement->dispatchFocusInEvent(eventNames().focusinEvent, oldFoc usedElement.get()); // DOM level 3 bubbling focus event. | |
| 3364 | |
| 3365 if (m_focusedElement != newFocusedElement) { | |
| 3366 // handler shifted focus | |
| 3367 focusChangeBlocked = true; | |
| 3368 goto SetFocusedElementDone; | |
| 3369 } | |
| 3370 | |
| 3371 // FIXME: We should remove firing DOMFocusInEvent event when we are sure no content depends | |
| 3372 // on it, probably when <rdar://problem/8503958> is m. | |
| 3373 m_focusedElement->dispatchFocusInEvent(eventNames().DOMFocusInEvent, old FocusedElement.get()); // DOM level 2 for compatibility. | |
| 3374 | |
| 3375 if (m_focusedElement != newFocusedElement) { | |
| 3376 // handler shifted focus | |
| 3377 focusChangeBlocked = true; | |
| 3378 goto SetFocusedElementDone; | |
| 3379 } | |
| 3380 m_focusedElement->setFocus(true); | 3389 m_focusedElement->setFocus(true); |
| 3381 | 3390 |
| 3382 if (m_focusedElement->isRootEditableElement()) | 3391 if (m_focusedElement->isRootEditableElement()) |
| 3383 frame()->editor().didBeginEditing(m_focusedElement.get()); | 3392 frame()->editor().didBeginEditing(m_focusedElement.get()); |
| 3384 | 3393 |
| 3385 // eww, I suck. set the qt focus correctly | 3394 // eww, I suck. set the qt focus correctly |
| 3386 // ### find a better place in the code for this | 3395 // ### find a better place in the code for this |
| 3387 if (view()) { | 3396 if (view()) { |
| 3388 Widget* focusWidget = widgetForElement(m_focusedElement.get()); | 3397 Widget* focusWidget = widgetForElement(m_focusedElement.get()); |
| 3389 if (focusWidget) { | 3398 if (focusWidget) { |
| (...skipping 1924 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5314 { | 5323 { |
| 5315 return DocumentLifecycleNotifier::create(this); | 5324 return DocumentLifecycleNotifier::create(this); |
| 5316 } | 5325 } |
| 5317 | 5326 |
| 5318 DocumentLifecycleNotifier* Document::lifecycleNotifier() | 5327 DocumentLifecycleNotifier* Document::lifecycleNotifier() |
| 5319 { | 5328 { |
| 5320 return static_cast<DocumentLifecycleNotifier*>(ScriptExecutionContext::lifec ycleNotifier()); | 5329 return static_cast<DocumentLifecycleNotifier*>(ScriptExecutionContext::lifec ycleNotifier()); |
| 5321 } | 5330 } |
| 5322 | 5331 |
| 5323 } // namespace WebCore | 5332 } // namespace WebCore |
| OLD | NEW |