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#ifndef WebResponse_h
279de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen#define WebResponse_h
289de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
29bdcebcb37eb20e212451130aee402c1927ad0e14Kristian Monsen#include "ChromiumIncludes.h"
309de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen#include "KURL.h"
319d2b5a35cbe2528f07d9aa33b2b8cf025f266090Iain Merrick#include "WebViewClientError.h"
329de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
339de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen#include <map>
349de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen#include <string>
359de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
369de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsennamespace WebCore {
379de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsenclass ResourceResponse;
3821baf41667f5ac764512f0168a702390daf45bf3Kristian Monsenclass ResourceError;
399de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen}
409de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
419de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsennamespace android {
429de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
439de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsenclass WebResponse {
449de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
459de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsenpublic:
469de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    WebResponse() {}
4741c4de163e4183c0e2a74c5c296de8a734ecc516Kristian Monsen    WebResponse(net::URLRequest*);
487d2f6c10941c9083e9ec30fb08444a5755ff8bc9Iain Merrick    WebResponse(const std::string &url, const std::string &mimeType, long long expectedSize, const std::string &encoding, int httpStatusCode);
499de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
507d2f6c10941c9083e9ec30fb08444a5755ff8bc9Iain Merrick    const std::string& getUrl() const;
517d2f6c10941c9083e9ec30fb08444a5755ff8bc9Iain Merrick    void setUrl(const std::string&);
527d2f6c10941c9083e9ec30fb08444a5755ff8bc9Iain Merrick
537911c3f54e13fc70b49ed513e2be226129cd4ea7Ben Murdoch    const std::string& getMimeType(); // Use only on WebCore thread.
547d2f6c10941c9083e9ec30fb08444a5755ff8bc9Iain Merrick    bool getHeader(const std::string& header, std::string* result) const;
557d2f6c10941c9083e9ec30fb08444a5755ff8bc9Iain Merrick    long long getExpectedSize() const;
567d2f6c10941c9083e9ec30fb08444a5755ff8bc9Iain Merrick
57e777e7663bb6cecc72754dbf56e068f5b6ea30d5Iain Merrick    const net::SSLInfo& getSslInfo() const { return m_sslInfo; }
58e777e7663bb6cecc72754dbf56e068f5b6ea30d5Iain Merrick
597d2f6c10941c9083e9ec30fb08444a5755ff8bc9Iain Merrick    // The create() methods create WebCore objects. They must only be called on the WebKit thread.
607d2f6c10941c9083e9ec30fb08444a5755ff8bc9Iain Merrick    WebCore::KURL createKurl();
619de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    WebCore::ResourceResponse createResourceResponse();
6221baf41667f5ac764512f0168a702390daf45bf3Kristian Monsen    WebCore::ResourceError createResourceError();
639de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
6427f2ed8c9c05acf5dbc69547127ad580fb8801fcKristian Monsen    static const std::string resolveMimeType(const std::string& url, const std::string& old_mime);
65e95b4a7d9ed67e6d6960e33e794e653aa0bd3887Ben Murdoch
669de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsenprivate:
679d2b5a35cbe2528f07d9aa33b2b8cf025f266090Iain Merrick    net::Error m_error;
689de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    std::string m_encoding;
699de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    int m_httpStatusCode;
7021baf41667f5ac764512f0168a702390daf45bf3Kristian Monsen    std::string m_host;
719de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    std::string m_httpStatusText;
727d2f6c10941c9083e9ec30fb08444a5755ff8bc9Iain Merrick    long long m_expectedSize;
739de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    std::string m_mime;
749de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen    std::string m_url;
75e777e7663bb6cecc72754dbf56e068f5b6ea30d5Iain Merrick    net::SSLInfo m_sslInfo;
769de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
77f3cc3c8581afce262b099794508129d16120adc0Iain Merrick    struct CaseInsensitiveLessThan {
78f3cc3c8581afce262b099794508129d16120adc0Iain Merrick        bool operator()(const std::string& lhs, const std::string& rhs) const {
79f3cc3c8581afce262b099794508129d16120adc0Iain Merrick            return strcasecmp(lhs.c_str(), rhs.c_str()) < 0;
80f3cc3c8581afce262b099794508129d16120adc0Iain Merrick        }
81f3cc3c8581afce262b099794508129d16120adc0Iain Merrick    };
82f3cc3c8581afce262b099794508129d16120adc0Iain Merrick
83f3cc3c8581afce262b099794508129d16120adc0Iain Merrick    // Header fields are case insensitive, so we use a case-insensitive map.
84f3cc3c8581afce262b099794508129d16120adc0Iain Merrick    // See RFC 822, 3.4.7, "CASE INDEPENDENCE".
85f3cc3c8581afce262b099794508129d16120adc0Iain Merrick    std::map<std::string, std::string, CaseInsensitiveLessThan> m_headerFields;
86787e29b54f206839549283289018384538f050f0John Reck
879de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen};
889de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
899de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen} // namespace android
909de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen
919de447de54fcb62a01a3338bb4d2f4d1716f522dKristian Monsen#endif
92