diff options
Diffstat (limited to 'src/3rdparty/webkit/WebCore/html')
21 files changed, 170 insertions, 355 deletions
diff --git a/src/3rdparty/webkit/WebCore/html/HTMLAttributeNames.in b/src/3rdparty/webkit/WebCore/html/HTMLAttributeNames.in index f258bd7..63a5c21 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLAttributeNames.in +++ b/src/3rdparty/webkit/WebCore/html/HTMLAttributeNames.in @@ -167,6 +167,7 @@ onmouseup onmousewheel ononline onoffline +onorientationchange onpagehide onpageshow onpaste diff --git a/src/3rdparty/webkit/WebCore/html/HTMLBodyElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLBodyElement.cpp index 3813177..a356bf3 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLBodyElement.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLBodyElement.cpp @@ -143,6 +143,10 @@ void HTMLBodyElement::parseMappedAttribute(MappedAttribute *attr) document()->setWindowAttributeEventListener(eventNames().blurEvent, createAttributeEventListener(document()->frame(), attr)); else if (attr->name() == onfocusAttr) document()->setWindowAttributeEventListener(eventNames().focusEvent, createAttributeEventListener(document()->frame(), attr)); +#if ENABLE(ORIENTATION_EVENTS) + else if (attr->name() == onorientationchangeAttr) + document()->setWindowAttributeEventListener(eventNames().orientationchangeEvent, createAttributeEventListener(document()->frame(), attr)); +#endif else if (attr->name() == onhashchangeAttr) document()->setWindowAttributeEventListener(eventNames().hashchangeEvent, createAttributeEventListener(document()->frame(), attr)); else if (attr->name() == onresizeAttr) @@ -322,124 +326,4 @@ void HTMLBodyElement::didMoveToNewOwnerDocument() HTMLElement::didMoveToNewOwnerDocument(); } -EventListener* HTMLBodyElement::onblur() const -{ - return document()->getWindowAttributeEventListener(eventNames().blurEvent); -} - -void HTMLBodyElement::setOnblur(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().blurEvent, eventListener); -} - -EventListener* HTMLBodyElement::onerror() const -{ - return document()->getWindowAttributeEventListener(eventNames().errorEvent); -} - -void HTMLBodyElement::setOnerror(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().errorEvent, eventListener); -} - -EventListener* HTMLBodyElement::onfocus() const -{ - return document()->getWindowAttributeEventListener(eventNames().focusEvent); -} - -void HTMLBodyElement::setOnfocus(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().focusEvent, eventListener); -} - -EventListener* HTMLBodyElement::onload() const -{ - return document()->getWindowAttributeEventListener(eventNames().loadEvent); -} - -void HTMLBodyElement::setOnload(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().loadEvent, eventListener); -} - -EventListener* HTMLBodyElement::onbeforeunload() const -{ - return document()->getWindowAttributeEventListener(eventNames().beforeunloadEvent); -} - -void HTMLBodyElement::setOnbeforeunload(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().beforeunloadEvent, eventListener); -} - -EventListener* HTMLBodyElement::onhashchange() const -{ - return document()->getWindowAttributeEventListener(eventNames().hashchangeEvent); -} - -void HTMLBodyElement::setOnhashchange(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().hashchangeEvent, eventListener); -} - -EventListener* HTMLBodyElement::onmessage() const -{ - return document()->getWindowAttributeEventListener(eventNames().messageEvent); -} - -void HTMLBodyElement::setOnmessage(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().messageEvent, eventListener); -} - -EventListener* HTMLBodyElement::onoffline() const -{ - return document()->getWindowAttributeEventListener(eventNames().offlineEvent); -} - -void HTMLBodyElement::setOnoffline(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().offlineEvent, eventListener); -} - -EventListener* HTMLBodyElement::ononline() const -{ - return document()->getWindowAttributeEventListener(eventNames().onlineEvent); -} - -void HTMLBodyElement::setOnonline(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().onlineEvent, eventListener); -} - -EventListener* HTMLBodyElement::onresize() const -{ - return document()->getWindowAttributeEventListener(eventNames().resizeEvent); -} - -void HTMLBodyElement::setOnresize(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().resizeEvent, eventListener); -} - -EventListener* HTMLBodyElement::onstorage() const -{ - return document()->getWindowAttributeEventListener(eventNames().storageEvent); -} - -void HTMLBodyElement::setOnstorage(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().storageEvent, eventListener); -} - -EventListener* HTMLBodyElement::onunload() const -{ - return document()->getWindowAttributeEventListener(eventNames().unloadEvent); -} - -void HTMLBodyElement::setOnunload(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().unloadEvent, eventListener); -} - } // namespace WebCore diff --git a/src/3rdparty/webkit/WebCore/html/HTMLBodyElement.h b/src/3rdparty/webkit/WebCore/html/HTMLBodyElement.h index d5efab3..e898c88 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLBodyElement.h +++ b/src/3rdparty/webkit/WebCore/html/HTMLBodyElement.h @@ -25,6 +25,7 @@ #define HTMLBodyElement_h #include "HTMLElement.h" +#include "Document.h" namespace WebCore { @@ -44,31 +45,23 @@ public: String vLink() const; void setVLink(const String&); - virtual EventListener* onblur() const; - virtual void setOnblur(PassRefPtr<EventListener>); - virtual EventListener* onerror() const; - virtual void setOnerror(PassRefPtr<EventListener>); - virtual EventListener* onfocus() const; - virtual void setOnfocus(PassRefPtr<EventListener>); - virtual EventListener* onload() const; - virtual void setOnload(PassRefPtr<EventListener>); + // Declared virtual in Element + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(blur); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(error); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(focus); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(load); - EventListener* onbeforeunload() const; - void setOnbeforeunload(PassRefPtr<EventListener>); - EventListener* onmessage() const; - void setOnmessage(PassRefPtr<EventListener>); - EventListener* onhashchange() const; - void setOnhashchange(PassRefPtr<EventListener>); - EventListener* onoffline() const; - void setOnoffline(PassRefPtr<EventListener>); - EventListener* ononline() const; - void setOnonline(PassRefPtr<EventListener>); - EventListener* onresize() const; - void setOnresize(PassRefPtr<EventListener>); - EventListener* onstorage() const; - void setOnstorage(PassRefPtr<EventListener>); - EventListener* onunload() const; - void setOnunload(PassRefPtr<EventListener>); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(beforeunload); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(message); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(hashchange); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(offline); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(online); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(resize); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(storage); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(unload); +#if ENABLE(ORIENTATION_EVENTS) + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(orientationchange); +#endif private: virtual HTMLTagStatus endTagRequirement() const { return TagStatusRequired; } diff --git a/src/3rdparty/webkit/WebCore/html/HTMLBodyElement.idl b/src/3rdparty/webkit/WebCore/html/HTMLBodyElement.idl index 7be6803..2e93e2e 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLBodyElement.idl +++ b/src/3rdparty/webkit/WebCore/html/HTMLBodyElement.idl @@ -44,6 +44,10 @@ module html { attribute [DontEnum] EventListener onstorage; attribute [DontEnum] EventListener onunload; +#if defined(ENABLE_ORIENTATION_EVENTS) && ENABLE_ORIENTATION_EVENTS + attribute [DontEnum] EventListener onorientationchange; +#endif + // Overrides of Element attributes (left in for completeness). // attribute [DontEnum] EventListener onblur; // attribute [DontEnum] EventListener onerror; diff --git a/src/3rdparty/webkit/WebCore/html/HTMLFormControlElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLFormControlElement.cpp index 61e112c..bc74ecf 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLFormControlElement.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLFormControlElement.cpp @@ -27,6 +27,7 @@ #include "ChromeClient.h" #include "Document.h" +#include "Event.h" #include "EventHandler.h" #include "EventNames.h" #include "Frame.h" @@ -186,7 +187,7 @@ void HTMLFormControlElement::setName(const AtomicString &value) void HTMLFormControlElement::dispatchFormControlChangeEvent() { - dispatchEvent(eventNames().changeEvent, true, false); + dispatchEvent(Event::create(eventNames().changeEvent, true, false)); } bool HTMLFormControlElement::disabled() const @@ -282,7 +283,7 @@ bool HTMLFormControlElement::willValidate() const bool HTMLFormControlElement::checkValidity() { if (willValidate() && !isValidFormControlElement()) { - dispatchEvent(EventNames().invalidEvent, false, true); + dispatchEvent(Event::create(EventNames().invalidEvent, false, true)); return false; } diff --git a/src/3rdparty/webkit/WebCore/html/HTMLFormElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLFormElement.cpp index 9f2d7c2..ace0f2f 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLFormElement.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLFormElement.cpp @@ -150,14 +150,14 @@ void HTMLFormElement::removedFromDocument() HTMLElement::removedFromDocument(); } -void HTMLFormElement::handleLocalEvents(Event* event, bool useCapture) +void HTMLFormElement::handleLocalEvents(Event* event) { Node* targetNode = event->target()->toNode(); - if (!useCapture && targetNode && targetNode != this && (event->type() == eventNames().submitEvent || event->type() == eventNames().resetEvent)) { + if (event->eventPhase() != Event::CAPTURING_PHASE && targetNode && targetNode != this && (event->type() == eventNames().submitEvent || event->type() == eventNames().resetEvent)) { event->stopPropagation(); return; } - HTMLElement::handleLocalEvents(event, useCapture); + HTMLElement::handleLocalEvents(event); } unsigned HTMLFormElement::length() const @@ -296,7 +296,7 @@ bool HTMLFormElement::prepareSubmit(Event* event) m_insubmit = true; m_doingsubmit = false; - if (dispatchEvent(eventNames().submitEvent, true, true) && !m_doingsubmit) + if (dispatchEvent(Event::create(eventNames().submitEvent, true, true)) && !m_doingsubmit) m_doingsubmit = true; m_insubmit = false; @@ -416,7 +416,7 @@ void HTMLFormElement::reset() // ### DOM2 labels this event as not cancelable, however // common browsers( sick! ) allow it be cancelled. - if ( !dispatchEvent(eventNames().resetEvent, true, true) ) { + if (!dispatchEvent(Event::create(eventNames().resetEvent, true, true))) { m_inreset = false; return; } diff --git a/src/3rdparty/webkit/WebCore/html/HTMLFormElement.h b/src/3rdparty/webkit/WebCore/html/HTMLFormElement.h index af81fcc..a2e9585 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLFormElement.h +++ b/src/3rdparty/webkit/WebCore/html/HTMLFormElement.h @@ -54,7 +54,7 @@ public: virtual void insertedIntoDocument(); virtual void removedFromDocument(); - virtual void handleLocalEvents(Event*, bool useCapture); + virtual void handleLocalEvents(Event*); PassRefPtr<HTMLCollection> elements(); void getNamedElements(const AtomicString&, Vector<RefPtr<Node> >&); diff --git a/src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.cpp index 8dc3964..cbeba87 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.cpp @@ -135,6 +135,10 @@ void HTMLFrameSetElement::parseMappedAttribute(MappedAttribute *attr) document()->setWindowAttributeEventListener(eventNames().blurEvent, createAttributeEventListener(document()->frame(), attr)); else if (attr->name() == onfocusAttr) document()->setWindowAttributeEventListener(eventNames().focusEvent, createAttributeEventListener(document()->frame(), attr)); +#if ENABLE(ORIENTATION_EVENTS) + else if (attr->name() == onorientationchangeAttr) + document()->setWindowAttributeEventListener(eventNames().orientationchangeEvent, createAttributeEventListener(document()->frame(), attr)); +#endif else if (attr->name() == onhashchangeAttr) document()->setWindowAttributeEventListener(eventNames().hashchangeEvent, createAttributeEventListener(document()->frame(), attr)); else if (attr->name() == onresizeAttr) @@ -230,124 +234,4 @@ void HTMLFrameSetElement::setRows(const String &value) setAttribute(rowsAttr, value); } -EventListener* HTMLFrameSetElement::onblur() const -{ - return document()->getWindowAttributeEventListener(eventNames().blurEvent); -} - -void HTMLFrameSetElement::setOnblur(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().blurEvent, eventListener); -} - -EventListener* HTMLFrameSetElement::onerror() const -{ - return document()->getWindowAttributeEventListener(eventNames().errorEvent); -} - -void HTMLFrameSetElement::setOnerror(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().errorEvent, eventListener); -} - -EventListener* HTMLFrameSetElement::onfocus() const -{ - return document()->getWindowAttributeEventListener(eventNames().focusEvent); -} - -void HTMLFrameSetElement::setOnfocus(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().focusEvent, eventListener); -} - -EventListener* HTMLFrameSetElement::onhashchange() const -{ - return document()->getWindowAttributeEventListener(eventNames().hashchangeEvent); -} - -void HTMLFrameSetElement::setOnhashchange(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().hashchangeEvent, eventListener); -} - -EventListener* HTMLFrameSetElement::onload() const -{ - return document()->getWindowAttributeEventListener(eventNames().loadEvent); -} - -void HTMLFrameSetElement::setOnload(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().loadEvent, eventListener); -} - -EventListener* HTMLFrameSetElement::onbeforeunload() const -{ - return document()->getWindowAttributeEventListener(eventNames().beforeunloadEvent); -} - -void HTMLFrameSetElement::setOnbeforeunload(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().beforeunloadEvent, eventListener); -} - -EventListener* HTMLFrameSetElement::onmessage() const -{ - return document()->getWindowAttributeEventListener(eventNames().messageEvent); -} - -void HTMLFrameSetElement::setOnmessage(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().messageEvent, eventListener); -} - -EventListener* HTMLFrameSetElement::onoffline() const -{ - return document()->getWindowAttributeEventListener(eventNames().offlineEvent); -} - -void HTMLFrameSetElement::setOnoffline(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().offlineEvent, eventListener); -} - -EventListener* HTMLFrameSetElement::ononline() const -{ - return document()->getWindowAttributeEventListener(eventNames().onlineEvent); -} - -void HTMLFrameSetElement::setOnonline(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().onlineEvent, eventListener); -} - -EventListener* HTMLFrameSetElement::onresize() const -{ - return document()->getWindowAttributeEventListener(eventNames().resizeEvent); -} - -void HTMLFrameSetElement::setOnresize(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().resizeEvent, eventListener); -} - -EventListener* HTMLFrameSetElement::onstorage() const -{ - return document()->getWindowAttributeEventListener(eventNames().storageEvent); -} - -void HTMLFrameSetElement::setOnstorage(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().storageEvent, eventListener); -} - -EventListener* HTMLFrameSetElement::onunload() const -{ - return document()->getWindowAttributeEventListener(eventNames().unloadEvent); -} - -void HTMLFrameSetElement::setOnunload(PassRefPtr<EventListener> eventListener) -{ - document()->setWindowAttributeEventListener(eventNames().unloadEvent, eventListener); -} - } // namespace WebCore diff --git a/src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.h b/src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.h index b51e702..2b2d7ea 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.h +++ b/src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.h @@ -24,8 +24,9 @@ #ifndef HTMLFrameSetElement_h #define HTMLFrameSetElement_h -#include "HTMLElement.h" #include "Color.h" +#include "Document.h" +#include "HTMLElement.h" namespace WebCore { @@ -67,32 +68,23 @@ public: const Length* rowLengths() const { return m_rows; } const Length* colLengths() const { return m_cols; } - // Event handler attributes - virtual EventListener* onblur() const; - virtual void setOnblur(PassRefPtr<EventListener>); - virtual EventListener* onerror() const; - virtual void setOnerror(PassRefPtr<EventListener>); - virtual EventListener* onfocus() const; - virtual void setOnfocus(PassRefPtr<EventListener>); - virtual EventListener* onload() const; - virtual void setOnload(PassRefPtr<EventListener>); - - EventListener* onbeforeunload() const; - void setOnbeforeunload(PassRefPtr<EventListener>); - EventListener* onhashchange() const; - void setOnhashchange(PassRefPtr<EventListener>); - EventListener* onmessage() const; - void setOnmessage(PassRefPtr<EventListener>); - EventListener* onoffline() const; - void setOnoffline(PassRefPtr<EventListener>); - EventListener* ononline() const; - void setOnonline(PassRefPtr<EventListener>); - EventListener* onresize() const; - void setOnresize(PassRefPtr<EventListener>); - EventListener* onstorage() const; - void setOnstorage(PassRefPtr<EventListener>); - EventListener* onunload() const; - void setOnunload(PassRefPtr<EventListener>); + // Declared virtual in Element + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(blur); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(error); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(focus); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(load); + + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(beforeunload); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(hashchange); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(message); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(offline); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(online); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(resize); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(storage); + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(unload); +#if ENABLE(ORIENTATION_EVENTS) + DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER(orientationchange); +#endif private: Length* m_rows; diff --git a/src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.idl b/src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.idl index 0375c0a..b44a071 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.idl +++ b/src/3rdparty/webkit/WebCore/html/HTMLFrameSetElement.idl @@ -41,6 +41,10 @@ module html { attribute [DontEnum] EventListener onstorage; attribute [DontEnum] EventListener onunload; +#if defined(ENABLE_ORIENTATION_EVENTS) && ENABLE_ORIENTATION_EVENTS + attribute [DontEnum] EventListener onorientationchange; +#endif + // Overrides of Element attributes (left in for completeness). // attribute [DontEnum] EventListener onblur; // attribute [DontEnum] EventListener onerror; diff --git a/src/3rdparty/webkit/WebCore/html/HTMLImageLoader.cpp b/src/3rdparty/webkit/WebCore/html/HTMLImageLoader.cpp index 2b9f09c..c6f49aa 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLImageLoader.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLImageLoader.cpp @@ -25,6 +25,7 @@ #include "CSSHelper.h" #include "CachedImage.h" #include "Element.h" +#include "Event.h" #include "EventNames.h" #include "HTMLNames.h" #include "HTMLObjectElement.h" @@ -45,7 +46,7 @@ void HTMLImageLoader::dispatchLoadEvent() bool errorOccurred = image()->errorOccurred(); if (!errorOccurred && image()->httpStatusCodeErrorOccurred()) errorOccurred = element()->hasTagName(HTMLNames::objectTag); // An <object> considers a 404 to be an error and should fire onerror. - element()->dispatchEvent(errorOccurred ? eventNames().errorEvent : eventNames().loadEvent, false, false); + element()->dispatchEvent(Event::create(errorOccurred ? eventNames().errorEvent : eventNames().loadEvent, false, false)); } String HTMLImageLoader::sourceURI(const AtomicString& attr) const diff --git a/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp index 8b884cf..5ba780a 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp @@ -1742,7 +1742,7 @@ void HTMLInputElement::onSearch() ASSERT(isSearchField()); if (renderer()) toRenderTextControlSingleLine(renderer())->stopSearchEventTimer(); - dispatchEvent(eventNames().searchEvent, true, false); + dispatchEvent(Event::create(eventNames().searchEvent, true, false)); } VisibleSelection HTMLInputElement::selection() const diff --git a/src/3rdparty/webkit/WebCore/html/HTMLMediaElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLMediaElement.cpp index 039d6f6..2409d37 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLMediaElement.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLMediaElement.cpp @@ -463,8 +463,8 @@ void HTMLMediaElement::loadInternal() bool totalKnown = m_player && m_player->totalBytesKnown(); unsigned loaded = m_player ? m_player->bytesLoaded() : 0; unsigned total = m_player ? m_player->totalBytes() : 0; - dispatchProgressEvent(eventNames().abortEvent, totalKnown, loaded, total); - dispatchProgressEvent(eventNames().loadendEvent, totalKnown, loaded, total); + dispatchEvent(ProgressEvent::create(eventNames().abortEvent, totalKnown, loaded, total)); + dispatchEvent(ProgressEvent::create(eventNames().loadendEvent, totalKnown, loaded, total)); } // 5 @@ -487,7 +487,7 @@ void HTMLMediaElement::loadInternal() m_playing = false; m_player->seek(0); } - dispatchEvent(eventNames().emptiedEvent, false, true); + dispatchEvent(Event::create(eventNames().emptiedEvent, false, true)); } selectMediaResource(); @@ -896,6 +896,13 @@ void HTMLMediaElement::returnToRealtime() setCurrentTime(maxTimeSeekable(), e); } +void HTMLMediaElement::addPlayedRange(float start, float end) +{ + if (!m_playedTimeRanges) + m_playedTimeRanges = TimeRanges::create(); + m_playedTimeRanges->add(start, end); +} + bool HTMLMediaElement::supportsSave() const { return m_player ? m_player->supportsSave() : false; @@ -931,7 +938,7 @@ void HTMLMediaElement::seek(float time, ExceptionCode& ec) // 5 if (m_playing) { if (m_lastSeekTime < now) - m_playedTimeRanges->add(m_lastSeekTime, now); + addPlayedRange(m_lastSeekTime, now); } m_lastSeekTime = time; @@ -1483,17 +1490,17 @@ PassRefPtr<TimeRanges> HTMLMediaElement::buffered() const return m_player->buffered(); } -PassRefPtr<TimeRanges> HTMLMediaElement::played() const +PassRefPtr<TimeRanges> HTMLMediaElement::played() { - if (!m_playedTimeRanges) { - // We are not yet loaded - return TimeRanges::create(); - } if (m_playing) { float time = currentTime(); - if (m_lastSeekTime < time) - m_playedTimeRanges->add(m_lastSeekTime, time); + if (time > m_lastSeekTime) + addPlayedRange(m_lastSeekTime, time); } + + if (!m_playedTimeRanges) + m_playedTimeRanges = TimeRanges::create(); + return m_playedTimeRanges->copy(); } @@ -1589,8 +1596,8 @@ void HTMLMediaElement::updatePlayState() m_playbackProgressTimer.stop(); m_playing = false; float time = currentTime(); - if (m_lastSeekTime < time) - m_playedTimeRanges->add(m_lastSeekTime, time); + if (time > m_lastSeekTime) + addPlayedRange(m_lastSeekTime, time); } if (renderer()) @@ -1611,43 +1618,44 @@ void HTMLMediaElement::stopPeriodicTimers() void HTMLMediaElement::userCancelledLoad() { - if (m_networkState != NETWORK_EMPTY) { + if (m_networkState == NETWORK_EMPTY || m_networkState >= NETWORK_LOADED) + return; - // If the media data fetching process is aborted by the user: + // If the media data fetching process is aborted by the user: - // 1 - The user agent should cancel the fetching process. + // 1 - The user agent should cancel the fetching process. #if !ENABLE(PLUGIN_PROXY_FOR_VIDEO) - m_player.clear(); + m_player.clear(); #endif - stopPeriodicTimers(); + stopPeriodicTimers(); - // 2 - Set the error attribute to a new MediaError object whose code attribute is set to MEDIA_ERR_ABORT. - m_error = MediaError::create(MediaError::MEDIA_ERR_ABORTED); + // 2 - Set the error attribute to a new MediaError object whose code attribute is set to MEDIA_ERR_ABORT. + m_error = MediaError::create(MediaError::MEDIA_ERR_ABORTED); - // 3 - Queue a task to fire a progress event called abort at the media element, in the context - // of the fetching process started by this instance of this algorithm. - scheduleProgressEvent(eventNames().abortEvent); - - // 4 - Queue a task to fire a progress event called loadend at the media element, in the context - // of the fetching process started by this instance of this algorithm. - scheduleProgressEvent(eventNames().loadendEvent); - - // 5 - If the media element's readyState attribute has a value equal to HAVE_NOTHING, set the - // element's networkState attribute to the NETWORK_EMPTY value and queue a task to fire a - // simple event called emptied at the element. Otherwise, set set the element's networkState - // attribute to the NETWORK_IDLE value. - if (m_networkState >= NETWORK_LOADING) { - m_networkState = NETWORK_EMPTY; - m_readyState = HAVE_NOTHING; - scheduleEvent(eventNames().emptiedEvent); - } + // 3 - Queue a task to fire a progress event called abort at the media element, in the context + // of the fetching process started by this instance of this algorithm. + scheduleProgressEvent(eventNames().abortEvent); - // 6 - Set the element's delaying-the-load-event flag to false. This stops delaying the load event. - m_delayingTheLoadEvent = false; + // 4 - Queue a task to fire a progress event called loadend at the media element, in the context + // of the fetching process started by this instance of this algorithm. + scheduleProgressEvent(eventNames().loadendEvent); - // 7 - Abort the overall resource selection algorithm. - m_currentSourceNode = 0; + // 5 - If the media element's readyState attribute has a value equal to HAVE_NOTHING, set the + // element's networkState attribute to the NETWORK_EMPTY value and queue a task to fire a + // simple event called emptied at the element. Otherwise, set set the element's networkState + // attribute to the NETWORK_IDLE value. + if (m_readyState == HAVE_NOTHING) { + m_networkState = NETWORK_EMPTY; + scheduleEvent(eventNames().emptiedEvent); } + else + m_networkState = NETWORK_IDLE; + + // 6 - Set the element's delaying-the-load-event flag to false. This stops delaying the load event. + m_delayingTheLoadEvent = false; + + // 7 - Abort the overall resource selection algorithm. + m_currentSourceNode = 0; } void HTMLMediaElement::documentWillBecomeInactive() diff --git a/src/3rdparty/webkit/WebCore/html/HTMLMediaElement.h b/src/3rdparty/webkit/WebCore/html/HTMLMediaElement.h index 3aeb653..aa8d5f7 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLMediaElement.h +++ b/src/3rdparty/webkit/WebCore/html/HTMLMediaElement.h @@ -120,7 +120,7 @@ public: void setPlaybackRate(float); bool webkitPreservesPitch() const; void setWebkitPreservesPitch(bool); - PassRefPtr<TimeRanges> played() const; + PassRefPtr<TimeRanges> played(); PassRefPtr<TimeRanges> seekable() const; bool ended() const; bool autoplay() const; @@ -193,6 +193,7 @@ private: void seek(float time, ExceptionCode&); void finishSeek(); void checkIfSeekNeeded(); + void addPlayedRange(float start, float end); void scheduleTimeupdateEvent(bool periodicEvent); void scheduleProgressEvent(const AtomicString& eventName); diff --git a/src/3rdparty/webkit/WebCore/html/HTMLScriptElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLScriptElement.cpp index 86cc3a2..ce7fee6 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLScriptElement.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLScriptElement.cpp @@ -24,6 +24,7 @@ #include "HTMLScriptElement.h" #include "Document.h" +#include "Event.h" #include "EventNames.h" #include "HTMLNames.h" #include "MappedAttribute.h" @@ -222,12 +223,12 @@ void HTMLScriptElement::dispatchLoadEvent() ASSERT(!m_data.haveFiredLoadEvent()); m_data.setHaveFiredLoadEvent(true); - dispatchEvent(eventNames().loadEvent, false, false); + dispatchEvent(Event::create(eventNames().loadEvent, false, false)); } void HTMLScriptElement::dispatchErrorEvent() { - dispatchEvent(eventNames().errorEvent, true, false); + dispatchEvent(Event::create(eventNames().errorEvent, true, false)); } } diff --git a/src/3rdparty/webkit/WebCore/html/HTMLSourceElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLSourceElement.cpp index 2f09997..4b9401d 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLSourceElement.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLSourceElement.cpp @@ -28,6 +28,7 @@ #if ENABLE(VIDEO) #include "HTMLSourceElement.h" +#include "Event.h" #include "EventNames.h" #include "HTMLDocument.h" #include "HTMLMediaElement.h" @@ -105,7 +106,7 @@ void HTMLSourceElement::cancelPendingErrorEvent() void HTMLSourceElement::errorEventTimerFired(Timer<HTMLSourceElement>*) { - dispatchEvent(eventNames().errorEvent, false, true); + dispatchEvent(Event::create(eventNames().errorEvent, false, true)); } } diff --git a/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.cpp index d3fc897..3cf4852 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.cpp @@ -26,6 +26,7 @@ #include "config.h" #include "HTMLTextAreaElement.h" +#include "BeforeTextInsertedEvent.h" #include "ChromeClient.h" #include "CSSValueKeywords.h" #include "Document.h" @@ -35,12 +36,14 @@ #include "FormDataList.h" #include "Frame.h" #include "HTMLNames.h" +#include "InputElement.h" #include "MappedAttribute.h" #include "Page.h" #include "RenderStyle.h" #include "RenderTextControlMultiLine.h" #include "ScriptEventListener.h" #include "Text.h" +#include "TextIterator.h" #include "VisibleSelection.h" #include <wtf/StdLibExtras.h> @@ -270,10 +273,34 @@ void HTMLTextAreaElement::defaultEventHandler(Event* event) { if (renderer() && (event->isMouseEvent() || event->isDragEvent() || event->isWheelEvent() || event->type() == eventNames().blurEvent)) toRenderTextControlMultiLine(renderer())->forwardEvent(event); + else if (renderer() && event->isBeforeTextInsertedEvent()) + handleBeforeTextInsertedEvent(static_cast<BeforeTextInsertedEvent*>(event)); HTMLFormControlElementWithState::defaultEventHandler(event); } +void HTMLTextAreaElement::handleBeforeTextInsertedEvent(BeforeTextInsertedEvent* event) const +{ + ASSERT(event); + ASSERT(renderer()); + bool ok; + unsigned maxLength = getAttribute(maxlengthAttr).string().toUInt(&ok); + if (!ok) + return; + + unsigned currentLength = toRenderTextControl(renderer())->text().numGraphemeClusters(); + unsigned selectionLength = plainText(document()->frame()->selection()->selection().toNormalizedRange().get()).numGraphemeClusters(); + ASSERT(currentLength >= selectionLength); + unsigned baseLength = currentLength - selectionLength; + unsigned appendableLength = maxLength > baseLength ? maxLength - baseLength : 0; + event->setText(sanitizeUserInputValue(event->text(), appendableLength)); +} + +String HTMLTextAreaElement::sanitizeUserInputValue(const String& proposedValue, unsigned maxLength) +{ + return proposedValue.left(proposedValue.numCharactersInGraphemeClusters(maxLength)); +} + void HTMLTextAreaElement::rendererWillBeDestroyed() { updateValue(); @@ -374,6 +401,16 @@ void HTMLTextAreaElement::setDefaultValue(const String& defaultValue) setValue(value); } +unsigned HTMLTextAreaElement::maxLength() const +{ + return getAttribute(maxlengthAttr).string().toUInt(); +} + +void HTMLTextAreaElement::setMaxLength(unsigned newValue) +{ + setAttribute(maxlengthAttr, String::number(newValue)); +} + void HTMLTextAreaElement::accessKeyAction(bool) { focus(); diff --git a/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.h b/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.h index 1f5cb91..fbf519d 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.h +++ b/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.h @@ -28,6 +28,7 @@ namespace WebCore { +class BeforeTextInsertedEvent; class VisibleSelection; class HTMLTextAreaElement : public HTMLFormControlElementWithState { @@ -78,6 +79,8 @@ public: String defaultValue() const; void setDefaultValue(const String&); int textLength() const { return value().length(); } + unsigned maxLength() const; + void setMaxLength(unsigned); void rendererWillBeDestroyed(); @@ -99,6 +102,8 @@ public: private: enum WrapMethod { NoWrap, SoftWrap, HardWrap }; + void handleBeforeTextInsertedEvent(BeforeTextInsertedEvent*) const; + static String sanitizeUserInputValue(const String&, unsigned maxLength); void updateValue() const; void updatePlaceholderVisibility(bool placeholderValueChanged); virtual void dispatchFocusEvent(); diff --git a/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.idl b/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.idl index 6d27f54..84583f5 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.idl +++ b/src/3rdparty/webkit/WebCore/html/HTMLTextAreaElement.idl @@ -34,6 +34,7 @@ module html { attribute long cols; attribute boolean disabled; attribute boolean autofocus; + attribute unsigned long maxLength; attribute [ConvertNullToNullString] DOMString name; attribute [ConvertNullToNullString, Reflect] DOMString placeholder; attribute boolean readOnly; diff --git a/src/3rdparty/webkit/WebCore/html/HTMLTokenizer.cpp b/src/3rdparty/webkit/WebCore/html/HTMLTokenizer.cpp index 71faac0..fa68151 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLTokenizer.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLTokenizer.cpp @@ -33,6 +33,7 @@ #include "CachedScript.h" #include "DocLoader.h" #include "DocumentFragment.h" +#include "Event.h" #include "EventNames.h" #include "Frame.h" #include "FrameLoader.h" @@ -2029,7 +2030,7 @@ void HTMLTokenizer::notifyFinished(CachedResource*) #endif if (errorOccurred) - n->dispatchEvent(eventNames().errorEvent, true, false); + n->dispatchEvent(Event::create(eventNames().errorEvent, true, false)); else { if (static_cast<HTMLScriptElement*>(n.get())->shouldExecuteAsJavaScript()) m_state = scriptExecution(sourceCode, m_state); @@ -2037,7 +2038,7 @@ void HTMLTokenizer::notifyFinished(CachedResource*) else m_doc->setShouldProcessNoscriptElement(true); #endif - n->dispatchEvent(eventNames().loadEvent, false, false); + n->dispatchEvent(Event::create(eventNames().loadEvent, false, false)); } // The state of m_pendingScripts.isEmpty() can change inside the scriptExecution() diff --git a/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.cpp b/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.cpp index 1e3faa3..ed462fc 100644 --- a/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.cpp +++ b/src/3rdparty/webkit/WebCore/html/canvas/CanvasRenderingContext2D.cpp @@ -935,16 +935,13 @@ static inline FloatRect normalizeRect(const FloatRect& rect) void CanvasRenderingContext2D::checkOrigin(const KURL& url) { - RefPtr<SecurityOrigin> origin = SecurityOrigin::create(url); - if (!m_canvas->document()->securityOrigin()->canAccess(origin.get())) + if (m_canvas->document()->securityOrigin()->taintsCanvas(url)) m_canvas->setOriginTainted(); } void CanvasRenderingContext2D::checkOrigin(const String& url) { - RefPtr<SecurityOrigin> origin = SecurityOrigin::createFromString(url); - if (!m_canvas->document()->securityOrigin()->canAccess(origin.get())) - m_canvas->setOriginTainted(); + checkOrigin(KURL(KURL(), url)); } void CanvasRenderingContext2D::drawImage(HTMLImageElement* image, float x, float y) @@ -1208,8 +1205,7 @@ PassRefPtr<CanvasPattern> CanvasRenderingContext2D::createPattern(HTMLImageEleme if (!cachedImage || !image->cachedImage()->image()) return CanvasPattern::create(Image::nullImage(), repeatX, repeatY, true); - RefPtr<SecurityOrigin> origin = SecurityOrigin::createFromString(cachedImage->url()); - bool originClean = m_canvas->document()->securityOrigin()->canAccess(origin.get()); + bool originClean = !m_canvas->document()->securityOrigin()->taintsCanvas(KURL(KURL(), cachedImage->url())); return CanvasPattern::create(cachedImage->image(), repeatX, repeatY, originClean); } |