| Index: chrome_frame/plugin_url_request.h
|
| ===================================================================
|
| --- chrome_frame/plugin_url_request.h (revision 37418)
|
| +++ chrome_frame/plugin_url_request.h (working copy)
|
| @@ -18,43 +18,11 @@
|
| #include "net/url_request/url_request_status.h"
|
|
|
| class PluginUrlRequest;
|
| +class PluginUrlRequestDelegate;
|
| +class PluginUrlRequestManager;
|
|
|
| -// Interface for a class that keeps a collection of outstanding
|
| -// reqeusts and offers an outgoing channel.
|
| -class PluginRequestHandler
|
| - : public IPC::Message::Sender,
|
| - public base::RefCountedThreadSafe<PluginRequestHandler> {
|
| +class DECLSPEC_NOVTABLE PluginUrlRequestDelegate {
|
| public:
|
| - virtual bool AddRequest(PluginUrlRequest* request) = 0;
|
| - virtual void RemoveRequest(PluginUrlRequest* request) = 0;
|
| -};
|
| -
|
| -// A reference counting solution whose method's are compatible with
|
| -// scoped_refptr and COM's IUnknown. Don't cast this object directly over to
|
| -// IUnknown though since IUnknown's first method is QueryInterface.
|
| -class UrlRequestReference {
|
| - public:
|
| - virtual unsigned long API_CALL AddRef() = 0; // NOLINT
|
| - virtual unsigned long API_CALL Release() = 0; // NOLINT
|
| -};
|
| -
|
| -class PluginUrlRequest : public UrlRequestReference {
|
| - public:
|
| - PluginUrlRequest();
|
| - ~PluginUrlRequest();
|
| -
|
| - bool Initialize(PluginRequestHandler* handler, int tab,
|
| - int remote_request_id, const std::string& url,
|
| - const std::string& method, const std::string& referrer,
|
| - const std::string& extra_headers,
|
| - net::UploadData* upload_data,
|
| - bool intercept_frame_options);
|
| -
|
| - // Called in response to automation IPCs
|
| - virtual bool Start() = 0;
|
| - virtual void Stop() = 0;
|
| - virtual bool Read(int bytes_to_read) = 0;
|
| -
|
| // Persistent cookies are read from the host browser and passed off to Chrome
|
| // These cookies are sent when we receive a response for every URL request
|
| // initiated by Chrome. Ideally we should only send cookies for the top level
|
| @@ -63,17 +31,77 @@
|
| // Additionally cookies for a URL should be sent once for the page. This
|
| // is not done now as it is difficult to track URLs, specifically if they
|
| // are redirected, etc.
|
| - void OnResponseStarted(const char* mime_type, const char* headers, int size,
|
| - base::Time last_modified, const std::string& peristent_cookies,
|
| - const std::string& redirect_url, int redirect_status);
|
| + virtual void OnResponseStarted(int request_id, const char* mime_type,
|
| + const char* headers, int size, base::Time last_modified,
|
| + const std::string& peristent_cookies, const std::string& redirect_url,
|
| + int redirect_status) = 0;
|
| + virtual void OnReadComplete(int request_id, const void* buffer, int len) = 0;
|
| + virtual void OnResponseEnd(int request_id, const URLRequestStatus& status) = 0;
|
| + protected:
|
| + PluginUrlRequestDelegate() {}
|
| + ~PluginUrlRequestDelegate() {}
|
| +};
|
|
|
| - void OnReadComplete(const void* buffer, int len);
|
| - void OnResponseEnd(const URLRequestStatus& status);
|
| +class DECLSPEC_NOVTABLE PluginUrlRequestManager {
|
| + public:
|
| + PluginUrlRequestManager() : delegate_(NULL), enable_frame_busting_(true) {}
|
| + virtual ~PluginUrlRequestManager() {}
|
|
|
| - PluginRequestHandler* request_handler() const {
|
| - return request_handler_;
|
| + void set_frame_busting(bool enable) {
|
| + enable_frame_busting_ = enable;
|
| }
|
|
|
| + virtual void set_delegate(PluginUrlRequestDelegate* delegate) {
|
| + delegate_ = delegate;
|
| + }
|
| +
|
| + virtual bool IsThreadSafe() = 0;
|
| +
|
| + // These are called directly from Automation Client when network related
|
| + // automation messages are received from Chrome.
|
| + // Strip 'tab' handle and forward to the virtual methods implemented by
|
| + // derived classes.
|
| + void StartUrlRequest(int tab, int request_id,
|
| + const IPC::AutomationURLRequest& request_info) {
|
| + StartRequest(request_id, request_info);
|
| + }
|
| +
|
| + void ReadUrlRequest(int tab, int request_id, int bytes_to_read) {
|
| + ReadRequest(request_id, bytes_to_read);
|
| + }
|
| +
|
| + void EndUrlRequest(int tab, int request_id, const URLRequestStatus& s) {
|
| + EndRequest(request_id);
|
| + }
|
| +
|
| + void StopAllRequests() {
|
| + StopAll();
|
| + }
|
| +
|
| + protected:
|
| + PluginUrlRequestDelegate* delegate_;
|
| + bool enable_frame_busting_;
|
| +
|
| + private:
|
| + virtual void StartRequest(int request_id,
|
| + const IPC::AutomationURLRequest& request_info) = 0;
|
| + virtual void ReadRequest(int request_id, int bytes_to_read) = 0;
|
| + virtual void EndRequest(int request_id) = 0;
|
| + virtual void StopAll() = 0;
|
| +};
|
| +
|
| +// Used as base class. Holds Url request properties (url, method, referrer..)
|
| +class PluginUrlRequest {
|
| + public:
|
| + PluginUrlRequest();
|
| + ~PluginUrlRequest();
|
| +
|
| + bool Initialize(PluginUrlRequestDelegate* delegate,
|
| + int remote_request_id, const std::string& url, const std::string& method,
|
| + const std::string& referrer, const std::string& extra_headers,
|
| + net::UploadData* upload_data, bool enable_frame_busting_);
|
| +
|
| + // Accessors.
|
| int id() const {
|
| return remote_request_id_;
|
| }
|
| @@ -86,10 +114,6 @@
|
| return method_;
|
| }
|
|
|
| - void set_method(const std::string& new_method) {
|
| - method_ = new_method;
|
| - }
|
| -
|
| const std::string& referrer() const {
|
| return referrer_;
|
| }
|
| @@ -102,6 +126,7 @@
|
| return post_data_len_;
|
| }
|
|
|
| + protected:
|
| HRESULT get_upload_data(IStream** ret) {
|
| DCHECK(ret);
|
| if (!upload_data_.get())
|
| @@ -111,26 +136,19 @@
|
| return S_OK;
|
| }
|
|
|
| + void set_url(const std::string& url) {
|
| + url_ = url;
|
| + }
|
| +
|
| void ClearPostData() {
|
| upload_data_.Release();
|
| post_data_len_ = 0;
|
| }
|
|
|
| - bool is_done() const {
|
| - return (URLRequestStatus::IO_PENDING != status_);
|
| - }
|
| -
|
| - void set_url(const std::string& url) {
|
| - url_ = url;
|
| - }
|
| -
|
| - protected:
|
| void SendData();
|
| - bool frame_busting_enabled_;
|
| + bool enable_frame_busting_;
|
|
|
| - private:
|
| - scoped_refptr<PluginRequestHandler> request_handler_;
|
| - int tab_;
|
| + PluginUrlRequestDelegate* delegate_;
|
| int remote_request_id_;
|
| uint64 post_data_len_;
|
| std::string url_;
|
| @@ -138,7 +156,6 @@
|
| std::string referrer_;
|
| std::string extra_headers_;
|
| ScopedComPtr<IStream> upload_data_;
|
| - URLRequestStatus::Status status_;
|
| };
|
|
|
| #endif // CHROME_FRAME_PLUGIN_URL_REQUEST_H_
|
|
|