OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "webkit/plugins/ppapi/ppb_url_loader_impl.h" | 5 #include "webkit/plugins/ppapi/ppb_url_loader_impl.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "ppapi/c/pp_completion_callback.h" | 8 #include "ppapi/c/pp_completion_callback.h" |
9 #include "ppapi/c/pp_errors.h" | 9 #include "ppapi/c/pp_errors.h" |
| 10 #include "ppapi/c/ppb_core.h" |
10 #include "ppapi/c/ppb_url_loader.h" | 11 #include "ppapi/c/ppb_url_loader.h" |
11 #include "ppapi/c/trusted/ppb_url_loader_trusted.h" | 12 #include "ppapi/c/trusted/ppb_url_loader_trusted.h" |
12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" | 13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" |
13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h" | 14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h" |
14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" | 16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" |
16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKitClient.h" | 17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKitClient.h" |
17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h" | 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h" |
18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" | 19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" |
19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoader.h" | 20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoader.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 PP_Bool IsURLLoader(PP_Resource resource) { | 60 PP_Bool IsURLLoader(PP_Resource resource) { |
60 return BoolToPPBool(!!Resource::GetAs<PPB_URLLoader_Impl>(resource)); | 61 return BoolToPPBool(!!Resource::GetAs<PPB_URLLoader_Impl>(resource)); |
61 } | 62 } |
62 | 63 |
63 int32_t Open(PP_Resource loader_id, | 64 int32_t Open(PP_Resource loader_id, |
64 PP_Resource request_id, | 65 PP_Resource request_id, |
65 PP_CompletionCallback callback) { | 66 PP_CompletionCallback callback) { |
66 scoped_refptr<PPB_URLLoader_Impl> loader( | 67 scoped_refptr<PPB_URLLoader_Impl> loader( |
67 Resource::GetAs<PPB_URLLoader_Impl>(loader_id)); | 68 Resource::GetAs<PPB_URLLoader_Impl>(loader_id)); |
68 if (!loader) | 69 if (!loader) |
69 return PP_ERROR_BADRESOURCE; | 70 return MayForceCallback(callback, PP_ERROR_BADRESOURCE); |
70 | 71 |
71 scoped_refptr<PPB_URLRequestInfo_Impl> request( | 72 scoped_refptr<PPB_URLRequestInfo_Impl> request( |
72 Resource::GetAs<PPB_URLRequestInfo_Impl>(request_id)); | 73 Resource::GetAs<PPB_URLRequestInfo_Impl>(request_id)); |
73 if (!request) | 74 if (!request) |
74 return PP_ERROR_BADRESOURCE; | 75 return MayForceCallback(callback, PP_ERROR_BADRESOURCE); |
75 | 76 |
76 return loader->Open(request, callback); | 77 int32_t result = loader->Open(request, callback); |
| 78 return MayForceCallback(callback, result); |
77 } | 79 } |
78 | 80 |
79 int32_t FollowRedirect(PP_Resource loader_id, | 81 int32_t FollowRedirect(PP_Resource loader_id, |
80 PP_CompletionCallback callback) { | 82 PP_CompletionCallback callback) { |
81 scoped_refptr<PPB_URLLoader_Impl> loader( | 83 scoped_refptr<PPB_URLLoader_Impl> loader( |
82 Resource::GetAs<PPB_URLLoader_Impl>(loader_id)); | 84 Resource::GetAs<PPB_URLLoader_Impl>(loader_id)); |
83 if (!loader) | 85 if (!loader) |
84 return PP_ERROR_BADRESOURCE; | 86 return MayForceCallback(callback, PP_ERROR_BADRESOURCE); |
85 | 87 |
86 return loader->FollowRedirect(callback); | 88 int32_t result = loader->FollowRedirect(callback); |
| 89 return MayForceCallback(callback, result); |
87 } | 90 } |
88 | 91 |
89 PP_Bool GetUploadProgress(PP_Resource loader_id, | 92 PP_Bool GetUploadProgress(PP_Resource loader_id, |
90 int64_t* bytes_sent, | 93 int64_t* bytes_sent, |
91 int64_t* total_bytes_to_be_sent) { | 94 int64_t* total_bytes_to_be_sent) { |
92 scoped_refptr<PPB_URLLoader_Impl> loader( | 95 scoped_refptr<PPB_URLLoader_Impl> loader( |
93 Resource::GetAs<PPB_URLLoader_Impl>(loader_id)); | 96 Resource::GetAs<PPB_URLLoader_Impl>(loader_id)); |
94 if (!loader) | 97 if (!loader) |
95 return PP_FALSE; | 98 return PP_FALSE; |
96 | 99 |
(...skipping 26 matching lines...) Expand all Loading... |
123 return response_info->GetReference(); | 126 return response_info->GetReference(); |
124 } | 127 } |
125 | 128 |
126 int32_t ReadResponseBody(PP_Resource loader_id, | 129 int32_t ReadResponseBody(PP_Resource loader_id, |
127 void* buffer, | 130 void* buffer, |
128 int32_t bytes_to_read, | 131 int32_t bytes_to_read, |
129 PP_CompletionCallback callback) { | 132 PP_CompletionCallback callback) { |
130 scoped_refptr<PPB_URLLoader_Impl> loader( | 133 scoped_refptr<PPB_URLLoader_Impl> loader( |
131 Resource::GetAs<PPB_URLLoader_Impl>(loader_id)); | 134 Resource::GetAs<PPB_URLLoader_Impl>(loader_id)); |
132 if (!loader) | 135 if (!loader) |
133 return PP_ERROR_BADRESOURCE; | 136 return MayForceCallback(callback, PP_ERROR_BADRESOURCE); |
134 | 137 |
135 return loader->ReadResponseBody(buffer, bytes_to_read, callback); | 138 int32_t result = loader->ReadResponseBody(buffer, bytes_to_read, callback); |
| 139 return MayForceCallback(callback, result); |
136 } | 140 } |
137 | 141 |
138 int32_t FinishStreamingToFile(PP_Resource loader_id, | 142 int32_t FinishStreamingToFile(PP_Resource loader_id, |
139 PP_CompletionCallback callback) { | 143 PP_CompletionCallback callback) { |
140 scoped_refptr<PPB_URLLoader_Impl> loader( | 144 scoped_refptr<PPB_URLLoader_Impl> loader( |
141 Resource::GetAs<PPB_URLLoader_Impl>(loader_id)); | 145 Resource::GetAs<PPB_URLLoader_Impl>(loader_id)); |
142 if (!loader) | 146 if (!loader) |
143 return PP_ERROR_BADRESOURCE; | 147 return MayForceCallback(callback, PP_ERROR_BADRESOURCE); |
144 | 148 |
145 return loader->FinishStreamingToFile(callback); | 149 int32_t result = loader->FinishStreamingToFile(callback); |
| 150 return MayForceCallback(callback, result); |
146 } | 151 } |
147 | 152 |
148 void Close(PP_Resource loader_id) { | 153 void Close(PP_Resource loader_id) { |
149 scoped_refptr<PPB_URLLoader_Impl> loader( | 154 scoped_refptr<PPB_URLLoader_Impl> loader( |
150 Resource::GetAs<PPB_URLLoader_Impl>(loader_id)); | 155 Resource::GetAs<PPB_URLLoader_Impl>(loader_id)); |
151 if (!loader) | 156 if (!loader) |
152 return; | 157 return; |
153 | 158 |
154 loader->Close(); | 159 loader->Close(); |
155 } | 160 } |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 } | 245 } |
241 } | 246 } |
242 | 247 |
243 int32_t PPB_URLLoader_Impl::Open(PPB_URLRequestInfo_Impl* request, | 248 int32_t PPB_URLLoader_Impl::Open(PPB_URLRequestInfo_Impl* request, |
244 PP_CompletionCallback callback) { | 249 PP_CompletionCallback callback) { |
245 int32_t rv = ValidateCallback(callback); | 250 int32_t rv = ValidateCallback(callback); |
246 if (rv != PP_OK) | 251 if (rv != PP_OK) |
247 return rv; | 252 return rv; |
248 | 253 |
249 if (request->RequiresUniversalAccess() && !has_universal_access_) | 254 if (request->RequiresUniversalAccess() && !has_universal_access_) |
250 return PP_ERROR_BADARGUMENT; | 255 return PP_ERROR_NOACCESS; |
251 | 256 |
252 if (loader_.get()) | 257 if (loader_.get()) |
253 return PP_ERROR_INPROGRESS; | 258 return PP_ERROR_INPROGRESS; |
254 | 259 |
255 WebFrame* frame = GetFrame(instance()); | 260 WebFrame* frame = GetFrame(instance()); |
256 if (!frame) | 261 if (!frame) |
257 return PP_ERROR_FAILED; | 262 return PP_ERROR_FAILED; |
258 WebURLRequest web_request(request->ToWebURLRequest(frame)); | |
259 | 263 |
260 WebURLLoaderOptions options; | 264 WebURLLoaderOptions options; |
261 if (has_universal_access_) { | 265 if (has_universal_access_) { |
262 // Universal access allows cross-origin requests and sends credentials. | 266 // Universal access allows cross-origin requests and sends credentials. |
263 options.crossOriginRequestPolicy = | 267 options.crossOriginRequestPolicy = |
264 WebURLLoaderOptions::CrossOriginRequestPolicyAllow; | 268 WebURLLoaderOptions::CrossOriginRequestPolicyAllow; |
265 options.allowCredentials = true; | 269 options.allowCredentials = true; |
266 } else if (request->allow_cross_origin_requests()) { | 270 } else if (request->allow_cross_origin_requests()) { |
267 // Otherwise, allow cross-origin requests with access control. | 271 // Otherwise, allow cross-origin requests with access control. |
268 options.crossOriginRequestPolicy = | 272 options.crossOriginRequestPolicy = |
269 WebURLLoaderOptions::CrossOriginRequestPolicyUseAccessControl; | 273 WebURLLoaderOptions::CrossOriginRequestPolicyUseAccessControl; |
270 options.allowCredentials = request->allow_credentials(); | 274 options.allowCredentials = request->allow_credentials(); |
271 } | 275 } |
272 | 276 |
273 is_asynchronous_load_suspended_ = false; | 277 is_asynchronous_load_suspended_ = false; |
274 loader_.reset(frame->createAssociatedURLLoader(options)); | 278 loader_.reset(frame->createAssociatedURLLoader(options)); |
275 if (!loader_.get()) | 279 if (!loader_.get()) |
276 return PP_ERROR_FAILED; | 280 return PP_ERROR_FAILED; |
277 | 281 |
| 282 WebURLRequest web_request(request->ToWebURLRequest(frame)); |
278 loader_->loadAsynchronously(web_request, this); | 283 loader_->loadAsynchronously(web_request, this); |
279 // Check for immediate failure; The AssociatedURLLoader will call our | 284 // Check for immediate failure; The AssociatedURLLoader will call our |
280 // didFail method synchronously for certain kinds of access violations | 285 // didFail method synchronously for certain kinds of access violations |
281 // so we must return an error to the caller. | 286 // so we must return an error to the caller. |
282 // TODO(bbudge) Modify the underlying AssociatedURLLoader to only call | 287 // TODO(bbudge) Modify the underlying AssociatedURLLoader to only call |
283 // back asynchronously. | 288 // back asynchronously. |
284 if (done_status_ == PP_ERROR_FAILED) | 289 if (done_status_ == PP_ERROR_FAILED) |
285 return PP_ERROR_NOACCESS; | 290 return PP_ERROR_NOACCESS; |
286 | 291 |
287 request_info_ = scoped_refptr<PPB_URLRequestInfo_Impl>(request); | 292 request_info_ = scoped_refptr<PPB_URLRequestInfo_Impl>(request); |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
573 bool PPB_URLLoader_Impl::RecordDownloadProgress() const { | 578 bool PPB_URLLoader_Impl::RecordDownloadProgress() const { |
574 return request_info_ && request_info_->record_download_progress(); | 579 return request_info_ && request_info_->record_download_progress(); |
575 } | 580 } |
576 | 581 |
577 bool PPB_URLLoader_Impl::RecordUploadProgress() const { | 582 bool PPB_URLLoader_Impl::RecordUploadProgress() const { |
578 return request_info_ && request_info_->record_upload_progress(); | 583 return request_info_ && request_info_->record_upload_progress(); |
579 } | 584 } |
580 | 585 |
581 } // namespace ppapi | 586 } // namespace ppapi |
582 } // namespace webkit | 587 } // namespace webkit |
OLD | NEW |