| 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 Apple Inc. All rights reserv
ed. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
| 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 Google Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009 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 * | 10 * |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 #if ENABLE(XHTMLMP) | 202 #if ENABLE(XHTMLMP) |
| 203 #include "HTMLNoScriptElement.h" | 203 #include "HTMLNoScriptElement.h" |
| 204 #endif | 204 #endif |
| 205 | 205 |
| 206 #if ENABLE(FULLSCREEN_API) | 206 #if ENABLE(FULLSCREEN_API) |
| 207 #include "RenderFullScreen.h" | 207 #include "RenderFullScreen.h" |
| 208 #endif | 208 #endif |
| 209 | 209 |
| 210 #if ENABLE(REQUEST_ANIMATION_FRAME) | 210 #if ENABLE(REQUEST_ANIMATION_FRAME) |
| 211 #include "RequestAnimationFrameCallback.h" | 211 #include "RequestAnimationFrameCallback.h" |
| 212 #include "ScriptedAnimationController.h" |
| 212 #endif | 213 #endif |
| 213 | 214 |
| 214 using namespace std; | 215 using namespace std; |
| 215 using namespace WTF; | 216 using namespace WTF; |
| 216 using namespace Unicode; | 217 using namespace Unicode; |
| 217 | 218 |
| 218 namespace WebCore { | 219 namespace WebCore { |
| 219 | 220 |
| 220 using namespace HTMLNames; | 221 using namespace HTMLNames; |
| 221 | 222 |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 #if ENABLE(FULLSCREEN_API) | 423 #if ENABLE(FULLSCREEN_API) |
| 423 , m_isFullScreen(0) | 424 , m_isFullScreen(0) |
| 424 , m_areKeysEnabledInFullScreen(0) | 425 , m_areKeysEnabledInFullScreen(0) |
| 425 , m_fullScreenRenderer(0) | 426 , m_fullScreenRenderer(0) |
| 426 , m_fullScreenChangeDelayTimer(this, &Document::fullScreenChangeDelayTimerFi
red) | 427 , m_fullScreenChangeDelayTimer(this, &Document::fullScreenChangeDelayTimerFi
red) |
| 427 #endif | 428 #endif |
| 428 , m_loadEventDelayCount(0) | 429 , m_loadEventDelayCount(0) |
| 429 , m_loadEventDelayTimer(this, &Document::loadEventDelayTimerFired) | 430 , m_loadEventDelayTimer(this, &Document::loadEventDelayTimerFired) |
| 430 , m_directionSetOnDocumentElement(false) | 431 , m_directionSetOnDocumentElement(false) |
| 431 , m_writingModeSetOnDocumentElement(false) | 432 , m_writingModeSetOnDocumentElement(false) |
| 432 #if ENABLE(REQUEST_ANIMATION_FRAME) | |
| 433 , m_nextRequestAnimationFrameCallbackId(0) | |
| 434 #endif | |
| 435 { | 433 { |
| 436 m_document = this; | 434 m_document = this; |
| 437 | 435 |
| 438 m_pageGroupUserSheetCacheValid = false; | 436 m_pageGroupUserSheetCacheValid = false; |
| 439 | 437 |
| 440 m_printing = false; | 438 m_printing = false; |
| 441 m_paginatedForScreen = false; | 439 m_paginatedForScreen = false; |
| 442 | 440 |
| 443 m_ignoreAutofocus = false; | 441 m_ignoreAutofocus = false; |
| 444 | 442 |
| (...skipping 4280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4725 context->task->performTask(document); | 4723 context->task->performTask(document); |
| 4726 | 4724 |
| 4727 delete context; | 4725 delete context; |
| 4728 } | 4726 } |
| 4729 | 4727 |
| 4730 void Document::postTask(PassOwnPtr<Task> task) | 4728 void Document::postTask(PassOwnPtr<Task> task) |
| 4731 { | 4729 { |
| 4732 callOnMainThread(performTask, new PerformTaskContext(m_weakReference, task))
; | 4730 callOnMainThread(performTask, new PerformTaskContext(m_weakReference, task))
; |
| 4733 } | 4731 } |
| 4734 | 4732 |
| 4733 void Document::suspendScriptedAnimationControllerCallbacks() |
| 4734 { |
| 4735 #if ENABLE(REQUEST_ANIMATION_FRAME) |
| 4736 if (m_scriptedAnimationController) |
| 4737 m_scriptedAnimationController->suspend(); |
| 4738 #endif |
| 4739 } |
| 4740 |
| 4741 void Document::resumeScriptedAnimationControllerCallbacks() |
| 4742 { |
| 4743 #if ENABLE(REQUEST_ANIMATION_FRAME) |
| 4744 if (m_scriptedAnimationController) |
| 4745 m_scriptedAnimationController->resume(); |
| 4746 #endif |
| 4747 } |
| 4748 |
| 4735 Element* Document::findAnchor(const String& name) | 4749 Element* Document::findAnchor(const String& name) |
| 4736 { | 4750 { |
| 4737 if (name.isEmpty()) | 4751 if (name.isEmpty()) |
| 4738 return 0; | 4752 return 0; |
| 4739 if (Element* element = getElementById(name)) | 4753 if (Element* element = getElementById(name)) |
| 4740 return element; | 4754 return element; |
| 4741 for (Node* node = this; node; node = node->traverseNextNode()) { | 4755 for (Node* node = this; node; node = node->traverseNextNode()) { |
| 4742 if (node->hasTagName(aTag)) { | 4756 if (node->hasTagName(aTag)) { |
| 4743 HTMLAnchorElement* anchor = static_cast<HTMLAnchorElement*>(node); | 4757 HTMLAnchorElement* anchor = static_cast<HTMLAnchorElement*>(node); |
| 4744 if (inQuirksMode()) { | 4758 if (inQuirksMode()) { |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4955 m_loadEventDelayTimer.startOneShot(0); | 4969 m_loadEventDelayTimer.startOneShot(0); |
| 4956 } | 4970 } |
| 4957 | 4971 |
| 4958 void Document::loadEventDelayTimerFired(Timer<Document>*) | 4972 void Document::loadEventDelayTimerFired(Timer<Document>*) |
| 4959 { | 4973 { |
| 4960 if (frame()) | 4974 if (frame()) |
| 4961 frame()->loader()->checkCompleted(); | 4975 frame()->loader()->checkCompleted(); |
| 4962 } | 4976 } |
| 4963 | 4977 |
| 4964 #if ENABLE(REQUEST_ANIMATION_FRAME) | 4978 #if ENABLE(REQUEST_ANIMATION_FRAME) |
| 4965 int Document::webkitRequestAnimationFrame(PassRefPtr<RequestAnimationFrameCallba
ck> callback, Element* e) | 4979 int Document::webkitRequestAnimationFrame(PassRefPtr<RequestAnimationFrameCallba
ck> callback, Element* animationElement) |
| 4966 { | 4980 { |
| 4967 if (!m_requestAnimationFrameCallbacks) | 4981 if (!m_scriptedAnimationController) |
| 4968 m_requestAnimationFrameCallbacks = new RequestAnimationFrameCallbackList
; | 4982 m_scriptedAnimationController = ScriptedAnimationController::create(this
); |
| 4969 int id = m_nextRequestAnimationFrameCallbackId++; | 4983 |
| 4970 callback->m_firedOrCancelled = false; | 4984 return m_scriptedAnimationController->registerCallback(callback, animationEl
ement); |
| 4971 callback->m_id = id; | |
| 4972 callback->m_element = e; | |
| 4973 m_requestAnimationFrameCallbacks->append(callback); | |
| 4974 if (FrameView* v = view()) | |
| 4975 v->scheduleAnimation(); | |
| 4976 return id; | |
| 4977 } | 4985 } |
| 4978 | 4986 |
| 4979 void Document::webkitCancelRequestAnimationFrame(int id) | 4987 void Document::webkitCancelRequestAnimationFrame(int id) |
| 4980 { | 4988 { |
| 4981 if (!m_requestAnimationFrameCallbacks) | 4989 if (!m_scriptedAnimationController) |
| 4982 return; | 4990 return; |
| 4983 for (size_t i = 0; i < m_requestAnimationFrameCallbacks->size(); ++i) { | 4991 m_scriptedAnimationController->cancelCallback(id); |
| 4984 if (m_requestAnimationFrameCallbacks->at(i)->m_id == id) { | |
| 4985 m_requestAnimationFrameCallbacks->at(i)->m_firedOrCancelled = true; | |
| 4986 m_requestAnimationFrameCallbacks->remove(i); | |
| 4987 return; | |
| 4988 } | |
| 4989 } | |
| 4990 } | 4992 } |
| 4991 | 4993 |
| 4992 void Document::serviceScriptedAnimations() | 4994 void Document::serviceScriptedAnimations() |
| 4993 { | 4995 { |
| 4994 if (!m_requestAnimationFrameCallbacks) | 4996 if (!m_scriptedAnimationController) |
| 4995 return; | 4997 return; |
| 4996 // We want to run the callback for all elements in the document that have re
gistered | 4998 m_scriptedAnimationController->serviceScriptedAnimations(time); |
| 4997 // for a callback and that are visible. Running the callbacks can cause new
callbacks | |
| 4998 // to be registered, existing callbacks to be cancelled, and elements to gai
n or lose | |
| 4999 // visibility so this code has to iterate carefully. | |
| 5000 | |
| 5001 // FIXME: Currently, this code doesn't do any visibility tests beyond checki
ng display: | |
| 5002 | |
| 5003 // First, generate a list of callbacks to consider. Callbacks registered fr
om this point | |
| 5004 // on are considered only for the "next" frame, not this one. | |
| 5005 RequestAnimationFrameCallbackList callbacks(*m_requestAnimationFrameCallback
s); | |
| 5006 | |
| 5007 // Firing the callback may cause the visibility of other elements to change.
To avoid | |
| 5008 // missing any callbacks, we keep iterating through the list of candiate cal
lbacks and firing | |
| 5009 // them until nothing new becomes visible. | |
| 5010 bool firedCallback; | |
| 5011 do { | |
| 5012 firedCallback = false; | |
| 5013 // A previous iteration may have invalidated style (or layout). Update
styles for each iteration | |
| 5014 // for now since all we check is the existence of a renderer. | |
| 5015 updateStyleIfNeeded(); | |
| 5016 for (size_t i = 0; i < callbacks.size(); ++i) { | |
| 5017 RequestAnimationFrameCallback* callback = callbacks[i].get(); | |
| 5018 if (!callback->m_firedOrCancelled && (!callback->m_element || callba
ck->m_element->renderer())) { | |
| 5019 callback->m_firedOrCancelled = true; | |
| 5020 callback->handleEvent(); | |
| 5021 firedCallback = true; | |
| 5022 callbacks.remove(i); | |
| 5023 break; | |
| 5024 } | |
| 5025 } | |
| 5026 } while (firedCallback); | |
| 5027 | |
| 5028 // Remove any callbacks we fired from the list of pending callbacks. | |
| 5029 for (size_t i = 0; i < m_requestAnimationFrameCallbacks->size();) { | |
| 5030 if (m_requestAnimationFrameCallbacks->at(i)->m_firedOrCancelled) | |
| 5031 m_requestAnimationFrameCallbacks->remove(i); | |
| 5032 else | |
| 5033 ++i; | |
| 5034 } | |
| 5035 | |
| 5036 // In most cases we expect this list to be empty, so no need to keep around
the vector's inline buffer. | |
| 5037 if (!m_requestAnimationFrameCallbacks->size()) | |
| 5038 m_requestAnimationFrameCallbacks.clear(); | |
| 5039 else if (FrameView* v = view()) | |
| 5040 v->scheduleAnimation(); | |
| 5041 } | 4999 } |
| 5042 #endif | 5000 #endif |
| 5043 | 5001 |
| 5044 #if ENABLE(TOUCH_EVENTS) | 5002 #if ENABLE(TOUCH_EVENTS) |
| 5045 PassRefPtr<Touch> Document::createTouch(DOMWindow* window, EventTarget* target,
int identifier, int pageX, int pageY, int screenX, int screenY, ExceptionCode&)
const | 5003 PassRefPtr<Touch> Document::createTouch(DOMWindow* window, EventTarget* target,
int identifier, int pageX, int pageY, int screenX, int screenY, ExceptionCode&)
const |
| 5046 { | 5004 { |
| 5047 // FIXME: It's not clear from the documentation at | 5005 // FIXME: It's not clear from the documentation at |
| 5048 // http://developer.apple.com/library/safari/#documentation/UserExperience/R
eference/DocumentAdditionsReference/DocumentAdditions/DocumentAdditions.html | 5006 // http://developer.apple.com/library/safari/#documentation/UserExperience/R
eference/DocumentAdditionsReference/DocumentAdditions/DocumentAdditions.html |
| 5049 // when this method should throw and nor is it by inspection of iOS behavior
. It would be nice to verify any cases where it throws under iOS | 5007 // when this method should throw and nor is it by inspection of iOS behavior
. It would be nice to verify any cases where it throws under iOS |
| 5050 // and implement them here. See https://bugs.webkit.org/show_bug.cgi?id=4781
9 | 5008 // and implement them here. See https://bugs.webkit.org/show_bug.cgi?id=4781
9 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5083 // This functions is used for checking such possibility of FOUCs. | 5041 // This functions is used for checking such possibility of FOUCs. |
| 5084 // Note that the implementation considers only empty or <head> only contents
as a FOUC cause | 5042 // Note that the implementation considers only empty or <head> only contents
as a FOUC cause |
| 5085 // rather than missing <body>, because non-HTML document like SVG and arbitr
ary XML from foreign namespace | 5043 // rather than missing <body>, because non-HTML document like SVG and arbitr
ary XML from foreign namespace |
| 5086 // should be painted even if there is no <body>. | 5044 // should be painted even if there is no <body>. |
| 5087 if (didLayoutWithPendingStylesheets()) | 5045 if (didLayoutWithPendingStylesheets()) |
| 5088 return true; | 5046 return true; |
| 5089 return !hasHeadSibling(this); | 5047 return !hasHeadSibling(this); |
| 5090 } | 5048 } |
| 5091 | 5049 |
| 5092 } // namespace WebCore | 5050 } // namespace WebCore |
| OLD | NEW |