void WMLRefreshElement::executeTask() { ASSERT(document()->isWMLDocument()); WMLDocument* document = static_cast<WMLDocument*>(this->document()); WMLPageState* pageState = wmlPageStateForDocument(document); if (!pageState) return; WMLCardElement* card = document->activeCard(); if (!card) return; // Before perform refresh task, we store the current timeout // value in the page state and then stop the timer WMLTimerElement* timer = card->eventTimer(); if (timer) { timer->storeIntervalToPageState(); timer->stop(); } storeVariableState(pageState); // Redisplay curremt card with current variable state if (Frame* frame = document->frame()) { if (FrameLoader* loader = frame->loader()) loader->reload(); } // After refreshing task, resume the timer if it exsits if (timer) timer->start(); }
void WMLPrevElement::executeTask(Event*) { WMLPageState* pageState = wmlPageStateForDocument(document()); if (!pageState) return; WMLCardElement* card = pageState->activeCard(); if (!card) return; storeVariableState(pageState); // Stop the timer of the current card if it is active if (WMLTimerElement* eventTimer = card->eventTimer()) eventTimer->stop(); pageState->page()->goBack(); }
void WMLPrevElement::executeTask() { ASSERT(document()->isWMLDocument()); WMLDocument* document = static_cast<WMLDocument*>(this->document()); WMLPageState* pageState = wmlPageStateForDocument(document); if (!pageState) return; WMLCardElement* card = document->activeCard(); if (!card) return; storeVariableState(pageState); // Stop the timer of the current card if it is active if (WMLTimerElement* eventTimer = card->eventTimer()) eventTimer->stop(); pageState->page()->goBack(); }
void WMLGoElement::executeTask() { ASSERT(document()->isWMLDocument()); WMLDocument* document = static_cast<WMLDocument*>(this->document()); WMLPageState* pageState = wmlPageStateForDocument(document); if (!pageState) return; WMLCardElement* card = document->activeCard(); if (!card) return; Frame* frame = document->frame(); if (!frame) return; FrameLoader* loader = frame->loader(); if (!loader) return; String href = getAttribute(HTMLNames::hrefAttr); if (href.isEmpty()) return; // Substitute variables within target url attribute value KURL url = document->completeURL(substituteVariableReferences(href, document, WMLVariableEscapingEscape)); if (url.isEmpty()) return; storeVariableState(pageState); // Stop the timer of the current card if it is active if (WMLTimerElement* eventTimer = card->eventTimer()) eventTimer->stop(); // FIXME: 'newcontext' handling not implemented for external cards bool inSameDeck = document->url().path() == url.path(); if (inSameDeck && url.hasFragmentIdentifier()) { if (WMLCardElement* card = WMLCardElement::findNamedCardInDocument(document, url.fragmentIdentifier())) { if (card->isNewContext()) pageState->reset(); } } // Prepare loading the destination url ResourceRequest request(url); if (getAttribute(sendrefererAttr) == "true") request.setHTTPReferrer(loader->outgoingReferrer()); String cacheControl = getAttribute(cache_controlAttr); if (m_formAttributes.method() == FormSubmission::PostMethod) preparePOSTRequest(request, inSameDeck, cacheControl); else prepareGETRequest(request, url); // Set HTTP cache-control header if needed if (!cacheControl.isEmpty()) { request.setHTTPHeaderField("cache-control", cacheControl); if (cacheControl == "no-cache") request.setCachePolicy(ReloadIgnoringCacheData); } loader->load(request, false); }