| /* |
| * Copyright 2010, The Android Open Source Project |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY |
| * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
| * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #ifndef WebRequest_h |
| #define WebRequest_h |
| |
| #include "ChromiumIncludes.h" |
| #include <wtf/Vector.h> |
| |
| class MessageLoop; |
| |
| namespace android { |
| |
| enum LoadState { |
| Created, |
| Started, |
| Response, |
| GotData, |
| Cancelled, |
| Finished, |
| Deleted |
| }; |
| |
| class UrlInterceptResponse; |
| class WebFrame; |
| class WebRequestContext; |
| class WebResourceRequest; |
| class WebUrlLoaderClient; |
| |
| // All methods in this class must be called on the io thread |
| class WebRequest : public net::URLRequest::Delegate, public base::RefCountedThreadSafe<WebRequest> { |
| public: |
| WebRequest(WebUrlLoaderClient*, const WebResourceRequest&); |
| |
| // If this is an android specific url or the application wants to load |
| // custom data, we load the data through an input stream. |
| // Used for: |
| // - file:///android_asset |
| // - file:///android_res |
| // - content:// |
| WebRequest(WebUrlLoaderClient*, const WebResourceRequest&, UrlInterceptResponse* intercept); |
| |
| // Optional, but if used has to be called before start |
| void appendBytesToUpload(Vector<char>* data); |
| void appendFileToUpload(const std::string& filename); |
| |
| void setRequestContext(WebRequestContext* context); |
| void start(); |
| void cancel(); |
| void pauseLoad(bool pause); |
| |
| // From URLRequest::Delegate |
| virtual void OnReceivedRedirect(net::URLRequest*, const GURL&, bool* deferRedirect); |
| virtual void OnResponseStarted(net::URLRequest*); |
| virtual void OnReadCompleted(net::URLRequest*, int bytesRead); |
| virtual void OnAuthRequired(net::URLRequest*, net::AuthChallengeInfo*); |
| virtual void OnSSLCertificateError(net::URLRequest* request, int cert_error, net::X509Certificate* cert); |
| virtual void OnCertificateRequested(net::URLRequest* request, net::SSLCertRequestInfo* cert_request_info); |
| |
| // Methods called during a request by the UI code (via WebUrlLoaderClient). |
| void setAuth(const string16& username, const string16& password); |
| void cancelAuth(); |
| void followDeferredRedirect(); |
| void proceedSslCertError(); |
| void cancelSslCertError(int cert_error); |
| void sslClientCert(EVP_PKEY* pkey, scoped_refptr<net::X509Certificate> chain); |
| |
| const std::string& getUrl() const; |
| const std::string& getUserAgent() const; |
| const std::string& getReferer() const; |
| |
| void setSync(bool sync) { m_isSync = sync; } |
| private: |
| void startReading(); |
| bool read(int* bytesRead); |
| |
| friend class base::RefCountedThreadSafe<WebRequest>; |
| virtual ~WebRequest(); |
| void handleDataURL(GURL); |
| void handleBrowserURL(GURL); |
| void handleInterceptedURL(); |
| void finish(bool success); |
| void updateLoadFlags(int& loadFlags); |
| |
| scoped_refptr<WebUrlLoaderClient> m_urlLoader; |
| OwnPtr<net::URLRequest> m_request; |
| scoped_refptr<net::IOBuffer> m_networkBuffer; |
| scoped_ptr<UrlInterceptResponse> m_interceptResponse; |
| std::string m_url; |
| std::string m_userAgent; |
| std::string m_referer; |
| LoadState m_loadState; |
| int m_authRequestCount; |
| int m_cacheMode; |
| ScopedRunnableMethodFactory<WebRequest> m_runnableFactory; |
| bool m_wantToPause; |
| bool m_isPaused; |
| bool m_isSync; |
| #ifdef LOG_REQUESTS |
| time_t m_startTime; |
| #endif |
| }; |
| |
| } // namespace android |
| |
| #endif |