summaryrefslogtreecommitdiffstats
path: root/chrome_frame/npapi_url_request.h
diff options
context:
space:
mode:
authorstoyan@chromium.org <stoyan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-01 19:48:36 +0000
committerstoyan@chromium.org <stoyan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-01 19:48:36 +0000
commit3eb07da6e868e49e28cb5a6d8a57037f2c45a20e (patch)
treeb9e05e275e38b176b1473e0f9e66075706ca238b /chrome_frame/npapi_url_request.h
parent55750b57e30ecc9f3657d1ebd08853e232ba4e23 (diff)
downloadchromium_src-3eb07da6e868e49e28cb5a6d8a57037f2c45a20e.zip
chromium_src-3eb07da6e868e49e28cb5a6d8a57037f2c45a20e.tar.gz
chromium_src-3eb07da6e868e49e28cb5a6d8a57037f2c45a20e.tar.bz2
TEST=new tests added.
Review URL: http://codereview.chromium.org/545093 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@37728 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/npapi_url_request.h')
-rw-r--r--chrome_frame/npapi_url_request.h70
1 files changed, 44 insertions, 26 deletions
diff --git a/chrome_frame/npapi_url_request.h b/chrome_frame/npapi_url_request.h
index 9151fcf..87e40a9 100644
--- a/chrome_frame/npapi_url_request.h
+++ b/chrome_frame/npapi_url_request.h
@@ -5,40 +5,58 @@
#ifndef CHROME_FRAME_NPAPI_URL_REQUEST_H_
#define CHROME_FRAME_NPAPI_URL_REQUEST_H_
+#include <map>
+
#include "base/platform_thread.h"
#include "chrome_frame/plugin_url_request.h"
#include "third_party/WebKit/WebCore/bridge/npapi.h"
-class NPAPIUrlRequest : public PluginUrlRequest {
+class NPAPIUrlRequest;
+class NPAPIUrlRequestManager : public PluginUrlRequestManager,
+ public PluginUrlRequestDelegate {
public:
- explicit NPAPIUrlRequest(NPP instance);
- ~NPAPIUrlRequest();
-
- virtual bool Start();
- virtual void Stop();
- virtual bool Read(int bytes_to_read);
-
- // Called from NPAPI
- bool OnStreamCreated(const char* mime_type, NPStream* stream);
- void OnStreamDestroyed(NPReason reason);
- int OnWriteReady();
- int OnWrite(void* buffer, int len);
-
- // Thread unsafe implementation of ref counting, since
- // this will be called on the plugin UI thread only.
- virtual unsigned long API_CALL AddRef();
- virtual unsigned long API_CALL Release();
+ NPAPIUrlRequestManager();
+ ~NPAPIUrlRequestManager();
+
+ void set_NPPInstance(NPP instance) {
+ instance_ = instance;
+ }
+
+ // Notifications from the browser. We find the appropriate NPAPIUrlRequest
+ // and forward the call.
+ bool NewStream(NPMIMEType type, NPStream* stream,
+ NPBool seekable, uint16* stream_type);
+ int32 WriteReady(NPStream* stream);
+ int32 Write(NPStream* stream, int32 offset, int32 len, void* buffer);
+ NPError DestroyStream(NPStream* stream, NPReason reason);
+ void UrlNotify(const char* url, NPReason reason, void* notify_data);
private:
- unsigned long ref_count_;
- NPP instance_;
- NPStream* stream_;
- size_t pending_read_size_;
- URLRequestStatus status_;
+ // PluginUrlRequestManager implementation. Called from AutomationClient.
+ virtual bool IsThreadSafe();
+ virtual void StartRequest(int request_id,
+ const IPC::AutomationURLRequest& request_info);
+ virtual void ReadRequest(int request_id, int bytes_to_read);
+ virtual void EndRequest(int request_id);
+ virtual void StopAll();
+
+ // Outstanding requests map.
+ typedef std::map<int, scoped_refptr<NPAPIUrlRequest> > RequestMap;
+ RequestMap request_map_;
+
+ // PluginUrlRequestDelegate implementation. Forwards back to delegate.
+ 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);
+ virtual void OnReadComplete(int request_id, const void* buffer, int len);
+ virtual void OnResponseEnd(int request_id, const URLRequestStatus& status);
+
+ static inline NPAPIUrlRequest* RequestFromNotifyData(void* notify_data) {
+ return reinterpret_cast<NPAPIUrlRequest*>(notify_data);
+ }
- PlatformThreadId thread_;
- static int instance_count_;
- DISALLOW_COPY_AND_ASSIGN(NPAPIUrlRequest);
+ NPP instance_;
};
#endif // CHROME_FRAME_NPAPI_URL_REQUEST_H_