WebResponse.cpp revision 21baf41667f5ac764512f0168a702390daf45bf3
19de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen/*
29de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * Copyright 2010, The Android Open Source Project
39de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen *
49de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * Redistribution and use in source and binary forms, with or without
59de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * modification, are permitted provided that the following conditions
69de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * are met:
79de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen *  * Redistributions of source code must retain the above copyright
89de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen *    notice, this list of conditions and the following disclaimer.
99de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen *  * Redistributions in binary form must reproduce the above copyright
109de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen *    notice, this list of conditions and the following disclaimer in the
119de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen *    documentation and/or other materials provided with the distribution.
129de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen *
139de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
149de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
159de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
169de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
179de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
189de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
199de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
209de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
219de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
229de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
239de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
249de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen */
259de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
269de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen#include "config.h"
279de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen#include "WebResponse.h"
289de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
299de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen#include "ResourceResponse.h"
3021baf41667f5ac764512f0168a702390daf45bf3Kristian Monsen#include "ResourceError.h"
319de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
329de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsennamespace android {
339de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
349de447de54fcb62a01a3338bb4d2f4d1716f522dKristian MonsenWebResponse::WebResponse(URLRequest* request)
359de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    : m_httpStatusCode(0)
369de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen{
379de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    m_url = request->url().spec();
3821baf41667f5ac764512f0168a702390daf45bf3Kristian Monsen    m_host = request->url().HostNoBrackets();
399de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    request->GetMimeType(&m_mime);
409de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    request->GetCharset(&m_encoding);
419de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    m_length = request->GetExpectedContentSize();
429de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
439de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    net::HttpResponseHeaders* responseHeaders = request->response_headers();
449de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    if (!responseHeaders)
459de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen        return;
469de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
479de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    m_httpStatusCode = responseHeaders->response_code();
489de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    m_httpStatusText = responseHeaders->GetStatusText();
499de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
509de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    std::string value;
519de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    std::string name;
529de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    void* iter = 0;
539de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    while (responseHeaders->EnumerateHeaderLines(&iter, &name, &value))
549de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen        m_headerFields[name] = value;
559de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen}
569de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
579de447de54fcb62a01a3338bb4d2f4d1716f522dKristian MonsenWebResponse::WebResponse(const std::string &url, const std::string &mimeType, const long long length, const std::string &encoding, const int httpStatusCode)
589de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    : m_encoding(encoding)
599de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    , m_httpStatusCode(httpStatusCode)
609de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    , m_length(length)
619de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    , m_mime(mimeType)
629de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    , m_url(url)
639de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen{
649de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen}
659de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
669de447de54fcb62a01a3338bb4d2f4d1716f522dKristian MonsenWebCore::ResourceResponse WebResponse::createResourceResponse()
679de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen{
689de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    WebCore::ResourceResponse resourceResponse(url(), m_mime.c_str(), m_length, m_encoding.c_str(), "");
699de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    resourceResponse.setHTTPStatusCode(m_httpStatusCode);
709de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    resourceResponse.setHTTPStatusText(m_httpStatusText.c_str());
719de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
729de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    std::map<std::string, std::string>::const_iterator it;
739de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    for (it = m_headerFields.begin(); it != m_headerFields.end(); ++it)
749de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen        resourceResponse.setHTTPHeaderField(it->first.c_str(), it->second.c_str());
759de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
769de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    return resourceResponse;
779de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen}
789de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
7921baf41667f5ac764512f0168a702390daf45bf3Kristian MonsenWebCore::ResourceError WebResponse::createResourceError()
8021baf41667f5ac764512f0168a702390daf45bf3Kristian Monsen{
8121baf41667f5ac764512f0168a702390daf45bf3Kristian Monsen    // TODO: Last parameter is a localized string, get the correct one from android
8221baf41667f5ac764512f0168a702390daf45bf3Kristian Monsen    WebCore::ResourceError error(m_host.c_str(), m_httpStatusCode, m_url.c_str(), m_httpStatusText.c_str());
8321baf41667f5ac764512f0168a702390daf45bf3Kristian Monsen    return error;
8421baf41667f5ac764512f0168a702390daf45bf3Kristian Monsen}
8521baf41667f5ac764512f0168a702390daf45bf3Kristian Monsen
8621baf41667f5ac764512f0168a702390daf45bf3Kristian Monsen
879de447de54fcb62a01a3338bb4d2f4d1716f522dKristian MonsenWebCore::KURL WebResponse::url()
889de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen{
899de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    WebCore::KURL kurl(WebCore::ParsedURLString, m_url.c_str());
909de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    return kurl;
919de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen}
929de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
939de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsenvoid WebResponse::setUrl(std::string url)
949de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen{
959de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    m_url = url;
969de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen}
979de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
989de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen} // namespace android
99