Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(531)

Side by Side Diff: ppapi/proxy/url_loader_resource.h

Issue 11416363: Implementation of URLLoader using PluginResource/ResourceHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef PPAPI_PROXY_URL_LOADER_RESOURCE_H_
6 #define PPAPI_PROXY_URL_LOADER_RESOURCE_H_
7
8 #include <deque>
9
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "ppapi/proxy/plugin_resource.h"
13 #include "ppapi/proxy/ppapi_proxy_export.h"
14 #include "ppapi/shared_impl/url_request_info_data.h"
15 #include "ppapi/thunk/ppb_url_loader_api.h"
16
17 namespace ppapi {
18 namespace proxy {
19
20 class URLResponseInfoResource;
21
22 class PPAPI_PROXY_EXPORT URLLoaderResource
23 : public PluginResource,
24 public NON_EXPORTED_BASE(thunk::PPB_URLLoader_API) {
25 public:
26 // Constructor for plugin-initiated loads.
27 URLLoaderResource(Connection connection,
28 PP_Instance instance);
29
30 // Constructor for renderer-initiated (document) loads. The loader ID is the
31 // pending host ID for the already-created host in the renderer, and the
32 // response data is the response for the already-opened connection.
bbudge 2012/12/17 21:13:14 Does a 'Connection' have a response? I thought a c
33 URLLoaderResource(Connection connection,
34 PP_Instance instance,
35 int pending_main_document_loader_id,
36 const URLResponseInfoData& data);
37
38 virtual ~URLLoaderResource();
39
40 // Resource override.
41 thunk::PPB_URLLoader_API* AsPPB_URLLoader_API() OVERRIDE;
42
43 // PPB_URLLoader_API implementation.
44 virtual int32_t Open(PP_Resource request_id,
45 scoped_refptr<TrackedCallback> callback) OVERRIDE;
46 virtual int32_t Open(const URLRequestInfoData& data,
47 int requestor_pid,
48 scoped_refptr<TrackedCallback> callback) OVERRIDE;
49 virtual int32_t FollowRedirect(
50 scoped_refptr<TrackedCallback> callback) OVERRIDE;
51 virtual PP_Bool GetUploadProgress(int64_t* bytes_sent,
52 int64_t* total_bytes_to_be_sent) OVERRIDE;
53 virtual PP_Bool GetDownloadProgress(
54 int64_t* bytes_received,
55 int64_t* total_bytes_to_be_received) OVERRIDE;
56 virtual PP_Resource GetResponseInfo() OVERRIDE;
57 virtual int32_t ReadResponseBody(
58 void* buffer,
59 int32_t bytes_to_read,
60 scoped_refptr<TrackedCallback> callback) OVERRIDE;
61 virtual int32_t FinishStreamingToFile(
62 scoped_refptr<TrackedCallback> callback) OVERRIDE;
63 virtual void Close() OVERRIDE;
64 virtual void GrantUniversalAccess() OVERRIDE;
65
66 // PluginResource implementation.
67 virtual void OnReplyReceived(const ResourceMessageReplyParams& params,
68 const IPC::Message& msg) OVERRIDE;
69
70 private:
71 enum Mode {
72 // The plugin has not called Open() yet.
73 MODE_WAITING_TO_OPEN,
74
75 // The plugin is waiting for the Open() or FollowRedirect callback.
76 MODE_OPENING,
77
78 // We've started to receive data and may receive more.
79 MODE_STREAMING_DATA,
80
81 // All data has been streamed or there was an error.
82 MODE_LOAD_COMPLETE
83 };
84
85 // IPC message handlers.
86 void OnPluginMsgReceivedResponse(const ResourceMessageReplyParams& params,
87 const URLResponseInfoData& data);
88 void OnPluginMsgSendData(const ResourceMessageReplyParams& params,
89 const IPC::Message& message);
90 void OnPluginMsgFinishedLoading(const ResourceMessageReplyParams& params,
91 int32_t result);
92 void OnPluginMsgUpdateProgress(const ResourceMessageReplyParams& params,
93 int64_t bytes_sent,
94 int64_t total_bytes_to_be_sent,
95 int64_t bytes_received,
96 int64_t total_bytes_to_be_received);
97
98 // Sends the defers loading message to the renderer to block or unblock the
99 // load.
100 void SetDefersLoading(bool defers_loading);
101
102 int32_t ValidateCallback(scoped_refptr<TrackedCallback> callback);
103
104 // Sets up |callback| as the pending callback. This should only be called once
105 // it is certain that |PP_OK_COMPLETIONPENDING| will be returned.
106 void RegisterCallback(scoped_refptr<TrackedCallback> callback);
107
108 void RunCallback(int32_t result);
109
110 // Saves the given response info to response_info_, handling file refs if
111 // necessary. This does not issue any callbacks.
112 void SaveResponseInfo(const URLResponseInfoData& data);
113
114 size_t FillUserBuffer();
115
116 Mode mode_;
117 URLRequestInfoData request_data_;
118
119 scoped_refptr<TrackedCallback> pending_callback_;
120
121 std::deque<char> buffer_;
122 int64_t bytes_sent_;
123 int64_t total_bytes_to_be_sent_;
124 int64_t bytes_received_;
125 int64_t total_bytes_to_be_received_;
126 char* user_buffer_;
127 size_t user_buffer_size_;
128 int32_t done_status_;
129 bool is_streaming_to_file_;
130 bool is_asynchronous_load_suspended_;
131
132 // The response info if we've received it.
133 scoped_refptr<URLResponseInfoResource> response_info_;
134
135 DISALLOW_COPY_AND_ASSIGN(URLLoaderResource);
136 };
137
138 } // namespace proxy
139 } // namespace ppapi
140
141 #endif // PPAPI_PROXY_URL_LOADER_RESOURCE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698