OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "ppapi/proxy/url_loader_resource.h" | 5 #include "ppapi/proxy/url_loader_resource.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_url_loader.h" | 10 #include "ppapi/c/ppb_url_loader.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
61 user_buffer_(NULL), | 61 user_buffer_(NULL), |
62 user_buffer_size_(0), | 62 user_buffer_size_(0), |
63 done_status_(PP_OK_COMPLETIONPENDING), | 63 done_status_(PP_OK_COMPLETIONPENDING), |
64 is_streaming_to_file_(false), | 64 is_streaming_to_file_(false), |
65 is_asynchronous_load_suspended_(false) { | 65 is_asynchronous_load_suspended_(false) { |
66 AttachToPendingHost(RENDERER, pending_main_document_loader_id); | 66 AttachToPendingHost(RENDERER, pending_main_document_loader_id); |
67 SaveResponseInfo(data); | 67 SaveResponseInfo(data); |
68 } | 68 } |
69 | 69 |
70 URLLoaderResource::~URLLoaderResource() { | 70 URLLoaderResource::~URLLoaderResource() { |
71 // Destroying a loader will cancel a pending load which causes the document | |
72 // ready state to change. A page may respond to that event by destroying the | |
73 // plugin instance. For in-process plugins, this can re-enter the proxy code | |
74 // before the base Resource destructor removes the loader from the resource | |
75 // tracker. The instance cleanup code will then attempt to call methods on | |
76 // this partially destructed object. Remove the loader from the tracker now | |
77 // to avoid this. | |
78 if (PpapiGlobals::Get()->GetProxyLock() == NULL) | |
Tom Sepez
2013/09/09 21:05:01
nit: (!PpapiGlobals::Get()->GetProxyLock())
| |
79 RemoveFromResourceTracker(); | |
71 } | 80 } |
72 | 81 |
73 PPB_URLLoader_API* URLLoaderResource::AsPPB_URLLoader_API() { | 82 PPB_URLLoader_API* URLLoaderResource::AsPPB_URLLoader_API() { |
74 return this; | 83 return this; |
75 } | 84 } |
76 | 85 |
77 int32_t URLLoaderResource::Open(PP_Resource request_id, | 86 int32_t URLLoaderResource::Open(PP_Resource request_id, |
78 scoped_refptr<TrackedCallback> callback) { | 87 scoped_refptr<TrackedCallback> callback) { |
79 EnterResourceNoLock<PPB_URLRequestInfo_API> enter_request(request_id, true); | 88 EnterResourceNoLock<PPB_URLRequestInfo_API> enter_request(request_id, true); |
80 if (enter_request.failed()) { | 89 if (enter_request.failed()) { |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
383 } | 392 } |
384 | 393 |
385 // Reset for next time. | 394 // Reset for next time. |
386 user_buffer_ = NULL; | 395 user_buffer_ = NULL; |
387 user_buffer_size_ = 0; | 396 user_buffer_size_ = 0; |
388 return bytes_to_copy; | 397 return bytes_to_copy; |
389 } | 398 } |
390 | 399 |
391 } // namespace proxy | 400 } // namespace proxy |
392 } // namespace ppapi | 401 } // namespace ppapi |
OLD | NEW |