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