Пример #1
0
bool DocumentLoader::redirectReceived(
    Resource* resource,
    const ResourceRequest& request,
    const ResourceResponse& redirectResponse) {
  DCHECK_EQ(resource, m_mainResource);
  DCHECK(!redirectResponse.isNull());
  m_request = request;

  // If the redirecting url is not allowed to display content from the target
  // origin, then block the redirect.
  const KURL& requestURL = m_request.url();
  RefPtr<SecurityOrigin> redirectingOrigin =
      SecurityOrigin::create(redirectResponse.url());
  if (!redirectingOrigin->canDisplay(requestURL)) {
    FrameLoader::reportLocalLoadFailed(m_frame, requestURL.getString());
    m_fetcher->stopFetching();
    return false;
  }
  if (!frameLoader()->shouldContinueForNavigationPolicy(
          m_request, SubstituteData(), this, CheckContentSecurityPolicy,
          m_navigationType, NavigationPolicyCurrentTab,
          replacesCurrentHistoryItem(), isClientRedirect(), nullptr)) {
    m_fetcher->stopFetching();
    return false;
  }

  DCHECK(timing().fetchStart());
  appendRedirect(requestURL);
  didRedirect(redirectResponse.url(), requestURL);
  frameLoader()->client()->dispatchDidReceiveServerRedirectForProvisionalLoad();

  return true;
}
Пример #2
0
void WebDataSourceImpl::updateNavigation(
    double redirectStartTime,
    double redirectEndTime,
    double fetchStartTime,
    const WebVector<WebURL>& redirectChain) {
  // Updates the redirection timing if there is at least one redirection
  // (between two URLs).
  if (redirectChain.size() >= 2) {
    for (size_t i = 0; i + 1 < redirectChain.size(); ++i)
      didRedirect(redirectChain[i], redirectChain[i + 1]);
    timing().setRedirectStart(redirectStartTime);
    timing().setRedirectEnd(redirectEndTime);
  }
  timing().setFetchStart(fetchStartTime);
}