void RedirectScheduler::startTimer()
{
    if (!m_scheduledRedirection)
        return;

    ASSERT(m_frame->page());
    
    FrameLoader* loader = m_frame->loader();

    if (m_timer.isActive())
        return;

    if (m_scheduledRedirection->type == ScheduledRedirection::redirection && !loader->allAncestorsAreComplete())
        return;

    m_timer.startOneShot(m_scheduledRedirection->delay);

    switch (m_scheduledRedirection->type) {
        case ScheduledRedirection::locationChange:
        case ScheduledRedirection::redirection:
            if (m_scheduledRedirection->toldClient)
                return;
            m_scheduledRedirection->toldClient = true;
            loader->clientRedirected(KURL(ParsedURLString, m_scheduledRedirection->url),
                m_scheduledRedirection->delay,
                currentTime() + m_timer.nextFireInterval(),
                m_scheduledRedirection->lockBackForwardList);
            return;
        case ScheduledRedirection::formSubmission:
            if (m_scheduledRedirection->toldClient)
                return;
            m_scheduledRedirection->toldClient = true;
            loader->clientRedirected(m_scheduledRedirection->frameRequest.resourceRequest().url(),
                m_scheduledRedirection->delay,
                currentTime() + m_timer.nextFireInterval(),
                m_scheduledRedirection->lockBackForwardList);
            return;
        case ScheduledRedirection::historyNavigation:
            // Don't report history navigations.
            return;
    }
    ASSERT_NOT_REACHED();
}
Пример #2
0
void RedirectScheduler::startTimer()
{
    if (!m_scheduledRedirection)
        return;

    ASSERT(m_frame->page());
    
    FrameLoader* loader = m_frame->loader();

    if (m_timer.isActive())
        return;

    if (m_scheduledRedirection->type == ScheduledRedirection::redirection && !loader->allAncestorsAreComplete())
        return;

    m_timer.startOneShot(m_scheduledRedirection->delay);

    switch (m_scheduledRedirection->type) {
        case ScheduledRedirection::locationChange:
        case ScheduledRedirection::redirection:
            if (m_scheduledRedirection->toldClient)
                return;
            m_scheduledRedirection->toldClient = true;
            loader->clientRedirected(KURL(ParsedURLString, m_scheduledRedirection->url),
                m_scheduledRedirection->delay,
                currentTime() + m_timer.nextFireInterval(),
                m_scheduledRedirection->lockBackForwardList);
            return;
        case ScheduledRedirection::formSubmission:
            // FIXME: It would make sense to report form submissions as client redirects too.
            // But we didn't do that in the past when form submission used a separate delay
            // mechanism, so doing it will be a behavior change.
            return;
        case ScheduledRedirection::historyNavigation:
            // Don't report history navigations.
            return;
    }
    ASSERT_NOT_REACHED();
}