Changeset 38838 in webkit


Ignore:
Timestamp:
Nov 28, 2008 8:00:20 PM (15 years ago)
Author:
Nikolas Zimmermann
Message:

Reviewed by Cameron Zwarich.

Fixes: https://bugs.webkit.org/show_bug.cgi?id=22550

Add <timer> element support. It provides a way to execute a task with a delay.
The user is notified by firing the task associated with the <card>'s ontimer attribute.
Only one timer element is allowed per <card> (fix wrong error message in reportWMLError)

Location:
trunk
Files:
2 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r38837 r38838  
     12008-11-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>
     2
     3        Reviewed by Cameron Zwarich.
     4
     5        Update WML layout test results after adding <timer> element support.
     6
     7        * platform/mac/fast/wml/err-multi-timer-expected.checksum:
     8        * platform/mac/fast/wml/err-multi-timer-expected.png:
     9        * platform/mac/fast/wml/err-multi-timer-expected.txt:
     10
    1112008-11-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>
    212
  • trunk/LayoutTests/platform/mac/fast/wml/err-multi-timer-expected.checksum

    r38577 r38838  
    1 ec325e125c7d147318bc7d519440914c
     10b637caf7ac3a7af93fe0e787a096efa
  • trunk/LayoutTests/platform/mac/fast/wml/err-multi-timer-expected.txt

    r38577 r38838  
    11layer at (0,0) size 800x600
    22  RenderView at (0,0) size 800x600
    3 layer at (0,0) size 800x76
    4   RenderBlock {wml} at (0,0) size 800x76
    5     RenderBlock {card} at (8,16) size 784x52
    6       RenderBlock (anonymous) at (0,0) size 784x0
    7         RenderInline {timer} at (0,0) size 0x0
    8         RenderText {#text} at (0,0) size 0x0
    9         RenderInline {timer} at (0,0) size 0x0
    10         RenderText {#text} at (0,0) size 0x0
    11       RenderBlock {p} at (0,0) size 784x18
    12         RenderText {#text} at (0,0) size 281x18
    13           text run at (0,0) width 281: "Test for error of meta multi-timer in one card"
    14       RenderBlock (anonymous) at (0,34) size 784x18
    15         RenderText {#text} at (0,0) size 585x18
    16           text run at (0,0) width 585: "You should NOT see this text, because of the error that more than one timer exist in one card"
     3layer at (0,0) size 800x166
     4  RenderBlock {html} at (0,0) size 800x166
     5    RenderBody {body} at (8,16) size 784x134
     6      RenderBlock {parsererror} at (16,0) size 752x134 [bgcolor=#FFDDDD] [border: (2px solid #CC7777)]
     7        RenderBlock {h3} at (18,20) size 716x22
     8          RenderText {#text} at (0,0) size 324x22
     9            text run at (0,0) width 324: "This page contains the following errors:"
     10        RenderBlock {div} at (18,60) size 716x14
     11          RenderText {#text} at (0,0) size 518x14
     12            text run at (0,0) width 518: "error on line 6 at column 65: Only one timer element is allowed in a card."
     13        RenderBlock {h3} at (18,92) size 716x22
     14          RenderText {#text} at (0,0) size 429x22
     15            text run at (0,0) width 429: "Below is a rendering of the page up to the first error."
     16      RenderBlock (anonymous) at (0,150) size 784x0
     17        RenderInline {wml} at (0,0) size 0x0
     18          RenderText {#text} at (0,0) size 0x0
     19      RenderBlock (anonymous) at (0,150) size 784x0
     20        RenderBlock {card} at (8,0) size 768x0
     21          RenderInline {timer} at (0,0) size 0x0
     22          RenderText {#text} at (0,0) size 0x0
     23          RenderInline {timer} at (0,0) size 0x0
     24      RenderBlock (anonymous) at (0,150) size 784x0
     25        RenderInline {wml} at (0,0) size 0x0
  • trunk/WebCore/ChangeLog

    r38837 r38838  
     12008-11-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>
     2
     3        Reviewed by Cameron Zwarich.
     4
     5        Fixes: https://bugs.webkit.org/show_bug.cgi?id=22550
     6
     7        Add <timer> element support. It provides a way to execute a task with a delay.
     8        The user is notified by firing the task associated with the <card>'s ontimer attribute.
     9        Only one timer element is allowed per <card> (fix wrong error message in reportWMLError)
     10
     11        * WebCore.xcodeproj/project.pbxproj:
     12        * wml/WMLCardElement.cpp:
     13        (WebCore::WMLCardElement::WMLCardElement):
     14        (WebCore::WMLCardElement::setIntrinsicEventTimer):
     15        (WebCore::WMLCardElement::handleIntrinsicEventIfNeeded):
     16        * wml/WMLCardElement.h:
     17        * wml/WMLDoElement.cpp:
     18        (WebCore::WMLDoElement::defaultEventHandler):
     19        * wml/WMLErrorHandling.cpp:
     20        (WebCore::reportWMLError):
     21        * wml/WMLPageState.h:
     22        (WebCore::WMLPageState::getVariable):
     23        * wml/WMLPrevElement.cpp:
     24        (WebCore::WMLPrevElement::executeTask):
     25        * wml/WMLRefreshElement.cpp:
     26        (WebCore::WMLRefreshElement::executeTask):
     27        * wml/WMLTagNames.in:
     28        * wml/WMLTimerElement.cpp: Added.
     29        (WebCore::WMLTimerElement::WMLTimerElement):
     30        (WebCore::WMLTimerElement::parseMappedAttribute):
     31        (WebCore::WMLTimerElement::insertedIntoDocument):
     32        (WebCore::WMLTimerElement::timerFired):
     33        (WebCore::WMLTimerElement::start):
     34        (WebCore::WMLTimerElement::stop):
     35        (WebCore::WMLTimerElement::storeIntervalToPageState):
     36        * wml/WMLTimerElement.h: Added.
     37
    1382008-11-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>
    239
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r38837 r38838  
    4646                0818AEE20EDB86BC00647B66 /* WMLEventHandlingElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0818AEE00EDB86BC00647B66 /* WMLEventHandlingElement.cpp */; };
    4747                0818AEE30EDB86BC00647B66 /* WMLEventHandlingElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 0818AEE10EDB86BC00647B66 /* WMLEventHandlingElement.h */; };
     48                081D81310EE0E74D00D73689 /* WMLTimerElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 081D812F0EE0E74D00D73689 /* WMLTimerElement.cpp */; };
     49                081D81320EE0E74D00D73689 /* WMLTimerElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 081D81300EE0E74D00D73689 /* WMLTimerElement.h */; };
    4850                08203A9F0ED8C35300B8B61A /* WMLAccessElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08203A9D0ED8C35300B8B61A /* WMLAccessElement.cpp */; };
    4951                08203AA00ED8C35300B8B61A /* WMLAccessElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 08203A9E0ED8C35300B8B61A /* WMLAccessElement.h */; };
     
    48244826                0818AEE00EDB86BC00647B66 /* WMLEventHandlingElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLEventHandlingElement.cpp; sourceTree = "<group>"; };
    48254827                0818AEE10EDB86BC00647B66 /* WMLEventHandlingElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLEventHandlingElement.h; sourceTree = "<group>"; };
     4828                081D812F0EE0E74D00D73689 /* WMLTimerElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLTimerElement.cpp; sourceTree = "<group>"; };
     4829                081D81300EE0E74D00D73689 /* WMLTimerElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLTimerElement.h; sourceTree = "<group>"; };
    48264830                08203A9D0ED8C35300B8B61A /* WMLAccessElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLAccessElement.cpp; sourceTree = "<group>"; };
    48274831                08203A9E0ED8C35300B8B61A /* WMLAccessElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLAccessElement.h; sourceTree = "<group>"; };
     
    95599563                                08CD61B80ED3929C002DDF51 /* WMLTaskElement.cpp */,
    95609564                                08CD61B90ED3929C002DDF51 /* WMLTaskElement.h */,
     9565                                081D812F0EE0E74D00D73689 /* WMLTimerElement.cpp */,
     9566                                081D81300EE0E74D00D73689 /* WMLTimerElement.h */,
    95619567                                084DBA9D0ED39D350038C226 /* WMLVariables.cpp */,
    95629568                                084DBA9E0ED39D360038C226 /* WMLVariables.h */,
     
    1645316459                                08E192540EDE0C3A0087B780 /* WMLErrorHandling.h in Headers */,
    1645416460                                0804BF6F0EE09C3B0006C000 /* WMLDoElement.h in Headers */,
     16461                                081D81320EE0E74D00D73689 /* WMLTimerElement.h in Headers */,
    1645516462                        );
    1645616463                        runOnlyForDeploymentPostprocessing = 0;
     
    1839118398                                08E192530EDE0C3A0087B780 /* WMLErrorHandling.cpp in Sources */,
    1839218399                                0804BF6E0EE09C3B0006C000 /* WMLDoElement.cpp in Sources */,
     18400                                081D81310EE0E74D00D73689 /* WMLTimerElement.cpp in Sources */,
    1839318401                        );
    1839418402                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/WebCore/wml/WMLCardElement.cpp

    r38837 r38838  
    3737#include "WMLNames.h"
    3838#include "WMLPageState.h"
     39#include "WMLTimerElement.h"
    3940#include "WMLVariables.h"
    4041
     
    4849    , m_isOrdered(false)
    4950    , m_isVisible(false)
     51    , m_eventTimer(0)
    5052{
    5153}
     
    6971    m_doElements.append(doElement);
    7072    doElement->setActive(true);
     73}
     74
     75void WMLCardElement::setIntrinsicEventTimer(WMLTimerElement* timer)
     76{
     77    // Only one timer is allowed in a card
     78    if (m_eventTimer) {
     79        m_eventTimer = 0;     
     80        reportWMLError(document(), WMLErrorMultipleTimerElements);
     81        return;
     82    }
     83
     84    m_eventTimer = timer;
    7185}
    7286
     
    118132        eventHandler->triggerIntrinsicEvent(eventType);
    119133
    120     // FIXME Start the timer if it exists in current card
    121     /*
    122     if (eventTimer)
    123         eventTimer->start();
    124     */
     134    // Start the timer if it exists in current card
     135    if (m_eventTimer)
     136        m_eventTimer->start();
    125137
    126138    // FIXME: Initialize input/select  elements in this card
  • trunk/WebCore/wml/WMLCardElement.h

    r38837 r38838  
    3131
    3232class WMLDoElement;
     33class WMLTimerElement;
    3334
    3435class WMLCardElement : public WMLEventHandlingElement {
     
    3940    bool isNewContext() const { return m_isNewContext; }
    4041    bool isOrdered() const { return m_isOrdered; }
     42    WMLTimerElement* eventTimer() const { return m_eventTimer; }
    4143
    4244    void registerDoElement(WMLDoElement*);
     45    void setIntrinsicEventTimer(WMLTimerElement*);
    4346    void handleIntrinsicEventIfNeeded();
    4447
     
    5962    bool m_isVisible;
    6063
     64    WMLTimerElement* m_eventTimer;
    6165    Vector<WMLDoElement*> m_doElements;
    6266};
  • trunk/WebCore/wml/WMLDoElement.cpp

    r38837 r38838  
    3535#include "WMLErrorHandling.h"
    3636#include "WMLTaskElement.h"
     37#include "WMLTimerElement.h"
    3738#include "WMLNames.h"
    3839#include "WMLPageState.h"
     
    7778            return;
    7879
    79         /* FIXME: Stop the timer of the current card if it is active
     80        // Stop the timer of the current card if it is active
    8081        WMLCardElement* card = pageState->activeCard();
    8182        if (card && card->eventTimer())
    8283            card->eventTimer()->stop();
    83         */
    8484
    8585        pageState->page()->goBack();
  • trunk/WebCore/wml/WMLErrorHandling.cpp

    r38816 r38838  
    7777        break;
    7878    case WMLErrorMultipleTimerElements:
    79         errorMessage = "Only one access element is allowed in a card.";
     79        errorMessage = "Only one timer element is allowed in a card.";
    8080        break;
    8181    case WMLErrorUnknown:
  • trunk/WebCore/wml/WMLPageState.h

    r38816 r38838  
    4848    void storeVariable(const String& name, const String& value) { m_variables.set(name, value); }
    4949    void storeVariables(WMLVariableMap& variables) { m_variables = variables; }
    50     String getVaribale(const String& name) const { return m_variables.get(name); }
     50    String getVariable(const String& name) const { return m_variables.get(name); }
    5151    bool hasVariables() const { return m_variables.size(); }
    5252
  • trunk/WebCore/wml/WMLPrevElement.cpp

    r38743 r38838  
    2626
    2727#include "Page.h"
     28#include "WMLCardElement.h"
    2829#include "WMLDocument.h"
    2930#include "WMLPageState.h"
     31#include "WMLTimerElement.h"
    3032
    3133namespace WebCore {
     
    5254    storeVariableState(pageState);
    5355
    54 /* FIXME
    5556    // Stop the timer of the current card if it is active
    5657    if (WMLTimerElement* timer = card->eventTimer())
    5758        timer->stop();
    58 */
    5959
    6060    pageState->page()->goBack();
  • trunk/WebCore/wml/WMLRefreshElement.cpp

    r38743 r38838  
    2828#include "FrameLoader.h"
    2929#include "Page.h"
     30#include "WMLCardElement.h"
    3031#include "WMLDocument.h"
    3132#include "WMLPageState.h"
     33#include "WMLTimerElement.h"
    3234
    3335namespace WebCore {
     
    5254        return;
    5355
    54 /* FIXME
    5556    // Before perform refresh task, we store the current timeout
    5657    // value in the page state and then stop the timer
    57     if (WMLTimerElement* timer = card->eventTimer()) {
     58    WMLTimerElement* timer = card->eventTimer();
     59    if (timer) {
    5860        timer->storeIntervalToPageState();
    5961        timer->stop();
    6062    }
    61 */
    6263
    6364    storeVariableState(pageState);
    6465
    6566    // Redisplay curremt card with current variable state
    66     if (Frame* frame = pageState->page()->mainFrame())
     67    if (Frame* frame = pageState->page()->mainFrame()) {
    6768        if (FrameLoader* loader = frame->loader())
    6869            loader->reload();
     70    }
    6971
    70 /* FIXME
    7172    // After refreshing task, resume the timer if it exsits
    7273    if (timer)
    7374        timer->start();
    74 */
    7575}
    7676
  • trunk/WebCore/wml/WMLTagNames.in

    r38837 r38838  
    1616refresh
    1717setvar
     18timer
    1819
    1920#if 0
     
    3132postfield
    3233template
    33 timer
    3434#endif
Note: See TracChangeset for help on using the changeset viewer.