| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "content/browser/renderer_host/pepper/pepper_file_system_browser_host.h
" | 5 #include "content/browser/renderer_host/pepper/pepper_file_system_browser_host.h
" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "content/public/browser/browser_ppapi_host.h" | 9 #include "content/public/browser/browser_ppapi_host.h" |
| 10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 PP_FileSystemType type) | 45 PP_FileSystemType type) |
| 46 : ResourceHost(host->GetPpapiHost(), instance, resource), | 46 : ResourceHost(host->GetPpapiHost(), instance, resource), |
| 47 browser_ppapi_host_(host), | 47 browser_ppapi_host_(host), |
| 48 type_(type), | 48 type_(type), |
| 49 opened_(false), | 49 opened_(false), |
| 50 fs_context_(NULL), | 50 fs_context_(NULL), |
| 51 called_open_(false), | 51 called_open_(false), |
| 52 weak_factory_(this) { | 52 weak_factory_(this) { |
| 53 } | 53 } |
| 54 | 54 |
| 55 PepperFileSystemBrowserHost::PepperFileSystemBrowserHost(BrowserPpapiHost* host, | 55 void PepperFileSystemBrowserHost::OpenExisting(const GURL& root_url, |
| 56 PP_Instance instance, | 56 const base::Closure& callback) { |
| 57 PP_Resource resource, | 57 root_url_ = root_url; |
| 58 const GURL& root_url, | 58 int render_process_id = 0; |
| 59 PP_FileSystemType type) | 59 int unused; |
| 60 : ResourceHost(host->GetPpapiHost(), instance, resource), | 60 if (!browser_ppapi_host_->GetRenderViewIDsForInstance( |
| 61 browser_ppapi_host_(host), | 61 pp_instance(), &render_process_id, &unused)) { |
| 62 type_(type), | 62 NOTREACHED(); |
| 63 opened_(true), | 63 } |
| 64 root_url_(root_url), | 64 called_open_ = true; |
| 65 fs_context_(NULL), | 65 // Get the file system context asynchronously, and then complete the Open |
| 66 called_open_(true), | 66 // operation by calling |callback|. |
| 67 weak_factory_(this) { | 67 BrowserThread::PostTaskAndReplyWithResult( |
| 68 BrowserThread::UI, |
| 69 FROM_HERE, |
| 70 base::Bind(&GetFileSystemContextFromRenderId, render_process_id), |
| 71 base::Bind(&PepperFileSystemBrowserHost::OpenExistingWithContext, |
| 72 weak_factory_.GetWeakPtr(), callback)); |
| 68 } | 73 } |
| 69 | 74 |
| 70 PepperFileSystemBrowserHost::~PepperFileSystemBrowserHost() { | 75 PepperFileSystemBrowserHost::~PepperFileSystemBrowserHost() { |
| 71 // TODO(teravest): Create a FileSystemOperationRunner | 76 // TODO(teravest): Create a FileSystemOperationRunner |
| 72 // per-PepperFileSystemBrowserHost, force users of this FileSystem to use it, | 77 // per-PepperFileSystemBrowserHost, force users of this FileSystem to use it, |
| 73 // and call Shutdown() on it here. | 78 // and call Shutdown() on it here. |
| 74 } | 79 } |
| 75 | 80 |
| 76 int32_t PepperFileSystemBrowserHost::OnResourceMessageReceived( | 81 int32_t PepperFileSystemBrowserHost::OnResourceMessageReceived( |
| 77 const IPC::Message& msg, | 82 const IPC::Message& msg, |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 BrowserThread::UI, | 133 BrowserThread::UI, |
| 129 FROM_HERE, | 134 FROM_HERE, |
| 130 base::Bind(&GetFileSystemContextFromRenderId, render_process_id), | 135 base::Bind(&GetFileSystemContextFromRenderId, render_process_id), |
| 131 base::Bind(&PepperFileSystemBrowserHost::GotFileSystemContext, | 136 base::Bind(&PepperFileSystemBrowserHost::GotFileSystemContext, |
| 132 weak_factory_.GetWeakPtr(), | 137 weak_factory_.GetWeakPtr(), |
| 133 context->MakeReplyMessageContext(), | 138 context->MakeReplyMessageContext(), |
| 134 file_system_type)); | 139 file_system_type)); |
| 135 return PP_OK_COMPLETIONPENDING; | 140 return PP_OK_COMPLETIONPENDING; |
| 136 } | 141 } |
| 137 | 142 |
| 143 void PepperFileSystemBrowserHost::OpenExistingWithContext( |
| 144 const base::Closure& callback, |
| 145 scoped_refptr<fileapi::FileSystemContext> fs_context) { |
| 146 if (fs_context.get()) { |
| 147 opened_ = true; |
| 148 } else { |
| 149 // If there is no file system context, we log a warning and continue with an |
| 150 // invalid resource (which will produce errors when used), since we have no |
| 151 // way to communicate the error to the caller. |
| 152 LOG(WARNING) << "Could not retrieve file system context."; |
| 153 } |
| 154 fs_context_ = fs_context; |
| 155 callback.Run(); |
| 156 } |
| 157 |
| 138 void PepperFileSystemBrowserHost::GotFileSystemContext( | 158 void PepperFileSystemBrowserHost::GotFileSystemContext( |
| 139 ppapi::host::ReplyMessageContext reply_context, | 159 ppapi::host::ReplyMessageContext reply_context, |
| 140 fileapi::FileSystemType file_system_type, | 160 fileapi::FileSystemType file_system_type, |
| 141 scoped_refptr<fileapi::FileSystemContext> fs_context) { | 161 scoped_refptr<fileapi::FileSystemContext> fs_context) { |
| 142 if (!fs_context.get()) { | 162 if (!fs_context.get()) { |
| 143 OpenFileSystemComplete( | 163 OpenFileSystemComplete( |
| 144 reply_context, GURL(), std::string(), base::PLATFORM_FILE_ERROR_FAILED); | 164 reply_context, GURL(), std::string(), base::PLATFORM_FILE_ERROR_FAILED); |
| 145 return; | 165 return; |
| 146 } | 166 } |
| 147 GURL origin = browser_ppapi_host_->GetDocumentURLForInstance( | 167 GURL origin = browser_ppapi_host_->GetDocumentURLForInstance( |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 BrowserThread::UI, | 227 BrowserThread::UI, |
| 208 FROM_HERE, | 228 FROM_HERE, |
| 209 base::Bind(&GetFileSystemContextFromRenderId, render_process_id), | 229 base::Bind(&GetFileSystemContextFromRenderId, render_process_id), |
| 210 base::Bind(&PepperFileSystemBrowserHost::GotIsolatedFileSystemContext, | 230 base::Bind(&PepperFileSystemBrowserHost::GotIsolatedFileSystemContext, |
| 211 weak_factory_.GetWeakPtr(), | 231 weak_factory_.GetWeakPtr(), |
| 212 context->MakeReplyMessageContext())); | 232 context->MakeReplyMessageContext())); |
| 213 return PP_OK_COMPLETIONPENDING; | 233 return PP_OK_COMPLETIONPENDING; |
| 214 } | 234 } |
| 215 | 235 |
| 216 } // namespace content | 236 } // namespace content |
| OLD | NEW |