Commit ef60d783 authored by bbudge@chromium.org's avatar bbudge@chromium.org

Pepper: Add PepperFileSystemBrowserHost::GotFileSystemContext method.

This will make it easier to do common setup work that requires having the
FileSystemContext, such as setting up Quota checking.

The new GotFileSystemContext method takes a callback to finish opening
each different kind of file system.

This change also renames some callbacks to be a little more consistent.

BUG=194304

Review URL: https://codereview.chromium.org/93403002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@238303 0039d316-1c4b-4281-b951-d872f2087c98
parent a72b3c47
...@@ -72,14 +72,18 @@ void PepperFileSystemBrowserHost::OpenExisting(const GURL& root_url, ...@@ -72,14 +72,18 @@ void PepperFileSystemBrowserHost::OpenExisting(const GURL& root_url,
NOTREACHED(); NOTREACHED();
} }
called_open_ = true; called_open_ = true;
// Get the file system context asynchronously, and then complete the Open // Get the file system context asynchronously, set up the file system context,
// operation by calling |callback|. // and then complete the Open operation by calling |callback|.
BrowserThread::PostTaskAndReplyWithResult( BrowserThread::PostTaskAndReplyWithResult(
BrowserThread::UI, BrowserThread::UI,
FROM_HERE, FROM_HERE,
base::Bind(&GetFileSystemContextFromRenderId, render_process_id), base::Bind(&GetFileSystemContextFromRenderId, render_process_id),
base::Bind(&PepperFileSystemBrowserHost::OpenExistingWithContext, base::Bind(&PepperFileSystemBrowserHost::GotFileSystemContext,
weak_factory_.GetWeakPtr(), callback)); weak_factory_.GetWeakPtr(),
base::Bind(
&PepperFileSystemBrowserHost::OpenExistingFileSystem,
weak_factory_.GetWeakPtr(),
callback)));
} }
int32_t PepperFileSystemBrowserHost::OnResourceMessageReceived( int32_t PepperFileSystemBrowserHost::OnResourceMessageReceived(
...@@ -130,15 +134,16 @@ int32_t PepperFileSystemBrowserHost::OnHostMsgOpen( ...@@ -130,15 +134,16 @@ int32_t PepperFileSystemBrowserHost::OnHostMsgOpen(
base::Bind(&GetFileSystemContextFromRenderId, render_process_id), base::Bind(&GetFileSystemContextFromRenderId, render_process_id),
base::Bind(&PepperFileSystemBrowserHost::GotFileSystemContext, base::Bind(&PepperFileSystemBrowserHost::GotFileSystemContext,
weak_factory_.GetWeakPtr(), weak_factory_.GetWeakPtr(),
context->MakeReplyMessageContext(), base::Bind(&PepperFileSystemBrowserHost::OpenFileSystem,
file_system_type)); weak_factory_.GetWeakPtr(),
context->MakeReplyMessageContext(),
file_system_type)));
return PP_OK_COMPLETIONPENDING; return PP_OK_COMPLETIONPENDING;
} }
void PepperFileSystemBrowserHost::OpenExistingWithContext( void PepperFileSystemBrowserHost::OpenExistingFileSystem(
const base::Closure& callback, const base::Closure& callback) {
scoped_refptr<fileapi::FileSystemContext> file_system_context) { if (file_system_context_.get()) {
if (file_system_context.get()) {
opened_ = true; opened_ = true;
} else { } else {
// If there is no file system context, we log a warning and continue with an // If there is no file system context, we log a warning and continue with an
...@@ -146,26 +151,23 @@ void PepperFileSystemBrowserHost::OpenExistingWithContext( ...@@ -146,26 +151,23 @@ void PepperFileSystemBrowserHost::OpenExistingWithContext(
// way to communicate the error to the caller. // way to communicate the error to the caller.
LOG(WARNING) << "Could not retrieve file system context."; LOG(WARNING) << "Could not retrieve file system context.";
} }
SetFileSystemContext(file_system_context);
callback.Run(); callback.Run();
} }
void PepperFileSystemBrowserHost::GotFileSystemContext( void PepperFileSystemBrowserHost::OpenFileSystem(
ppapi::host::ReplyMessageContext reply_context, ppapi::host::ReplyMessageContext reply_context,
fileapi::FileSystemType file_system_type, fileapi::FileSystemType file_system_type) {
scoped_refptr<fileapi::FileSystemContext> file_system_context) { if (!file_system_context_.get()) {
if (!file_system_context.get()) {
OpenFileSystemComplete( OpenFileSystemComplete(
reply_context, GURL(), std::string(), base::PLATFORM_FILE_ERROR_FAILED); reply_context, GURL(), std::string(), base::PLATFORM_FILE_ERROR_FAILED);
return; return;
} }
GURL origin = browser_ppapi_host_->GetDocumentURLForInstance( GURL origin = browser_ppapi_host_->GetDocumentURLForInstance(
pp_instance()).GetOrigin(); pp_instance()).GetOrigin();
file_system_context->OpenFileSystem(origin, file_system_type, file_system_context_->OpenFileSystem(origin, file_system_type,
fileapi::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT, fileapi::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT,
base::Bind(&PepperFileSystemBrowserHost::OpenFileSystemComplete, base::Bind(&PepperFileSystemBrowserHost::OpenFileSystemComplete,
weak_factory_.GetWeakPtr(), reply_context)); weak_factory_.GetWeakPtr(), reply_context));
SetFileSystemContext(file_system_context);
} }
void PepperFileSystemBrowserHost::OpenFileSystemComplete( void PepperFileSystemBrowserHost::OpenFileSystemComplete(
...@@ -182,16 +184,14 @@ void PepperFileSystemBrowserHost::OpenFileSystemComplete( ...@@ -182,16 +184,14 @@ void PepperFileSystemBrowserHost::OpenFileSystemComplete(
host()->SendReply(reply_context, PpapiPluginMsg_FileSystem_OpenReply()); host()->SendReply(reply_context, PpapiPluginMsg_FileSystem_OpenReply());
} }
void PepperFileSystemBrowserHost::GotIsolatedFileSystemContext( void PepperFileSystemBrowserHost::OpenIsolatedFileSystem(
ppapi::host::ReplyMessageContext reply_context, ppapi::host::ReplyMessageContext reply_context,
const std::string& fsid, const std::string& fsid,
PP_IsolatedFileSystemType_Private type, PP_IsolatedFileSystemType_Private type) {
scoped_refptr<fileapi::FileSystemContext> file_system_context) { if (!file_system_context_.get()) {
if (!file_system_context.get()) {
SendReplyForIsolatedFileSystem(reply_context, fsid, PP_ERROR_FAILED); SendReplyForIsolatedFileSystem(reply_context, fsid, PP_ERROR_FAILED);
return; return;
} }
SetFileSystemContext(file_system_context);
root_url_ = GURL(fileapi::GetIsolatedFileSystemRootURIString( root_url_ = GURL(fileapi::GetIsolatedFileSystemRootURIString(
browser_ppapi_host_->GetDocumentURLForInstance(pp_instance()).GetOrigin(), browser_ppapi_host_->GetDocumentURLForInstance(pp_instance()).GetOrigin(),
...@@ -207,7 +207,7 @@ void PepperFileSystemBrowserHost::GotIsolatedFileSystemContext( ...@@ -207,7 +207,7 @@ void PepperFileSystemBrowserHost::GotIsolatedFileSystemContext(
SendReplyForIsolatedFileSystem(reply_context, fsid, PP_OK); SendReplyForIsolatedFileSystem(reply_context, fsid, PP_OK);
return; return;
case PP_ISOLATEDFILESYSTEMTYPE_PRIVATE_PLUGINPRIVATE: case PP_ISOLATEDFILESYSTEMTYPE_PRIVATE_PLUGINPRIVATE:
OpenPluginPrivateFileSystem(reply_context, fsid, file_system_context_); OpenPluginPrivateFileSystem(reply_context, fsid);
return; return;
default: default:
NOTREACHED(); NOTREACHED();
...@@ -218,8 +218,7 @@ void PepperFileSystemBrowserHost::GotIsolatedFileSystemContext( ...@@ -218,8 +218,7 @@ void PepperFileSystemBrowserHost::GotIsolatedFileSystemContext(
void PepperFileSystemBrowserHost::OpenPluginPrivateFileSystem( void PepperFileSystemBrowserHost::OpenPluginPrivateFileSystem(
ppapi::host::ReplyMessageContext reply_context, ppapi::host::ReplyMessageContext reply_context,
const std::string& fsid, const std::string& fsid) {
scoped_refptr<fileapi::FileSystemContext> file_system_context) {
GURL origin = browser_ppapi_host_->GetDocumentURLForInstance( GURL origin = browser_ppapi_host_->GetDocumentURLForInstance(
pp_instance()).GetOrigin(); pp_instance()).GetOrigin();
if (!origin.is_valid()) { if (!origin.is_valid()) {
...@@ -233,7 +232,7 @@ void PepperFileSystemBrowserHost::OpenPluginPrivateFileSystem( ...@@ -233,7 +232,7 @@ void PepperFileSystemBrowserHost::OpenPluginPrivateFileSystem(
return; return;
} }
file_system_context->OpenPluginPrivateFileSystem( file_system_context_->OpenPluginPrivateFileSystem(
origin, fileapi::kFileSystemTypePluginPrivate, fsid, plugin_id, origin, fileapi::kFileSystemTypePluginPrivate, fsid, plugin_id,
fileapi::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT, fileapi::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT,
base::Bind( base::Bind(
...@@ -277,9 +276,13 @@ int32_t PepperFileSystemBrowserHost::OnHostMsgInitIsolatedFileSystem( ...@@ -277,9 +276,13 @@ int32_t PepperFileSystemBrowserHost::OnHostMsgInitIsolatedFileSystem(
BrowserThread::UI, BrowserThread::UI,
FROM_HERE, FROM_HERE,
base::Bind(&GetFileSystemContextFromRenderId, render_process_id), base::Bind(&GetFileSystemContextFromRenderId, render_process_id),
base::Bind(&PepperFileSystemBrowserHost::GotIsolatedFileSystemContext, base::Bind(&PepperFileSystemBrowserHost::GotFileSystemContext,
weak_factory_.GetWeakPtr(), weak_factory_.GetWeakPtr(),
context->MakeReplyMessageContext(), fsid, type)); base::Bind(
&PepperFileSystemBrowserHost::OpenIsolatedFileSystem,
weak_factory_.GetWeakPtr(),
context->MakeReplyMessageContext(), fsid, type)));
return PP_OK_COMPLETIONPENDING; return PP_OK_COMPLETIONPENDING;
} }
...@@ -294,13 +297,15 @@ void PepperFileSystemBrowserHost::SendReplyForIsolatedFileSystem( ...@@ -294,13 +297,15 @@ void PepperFileSystemBrowserHost::SendReplyForIsolatedFileSystem(
PpapiPluginMsg_FileSystem_InitIsolatedFileSystemReply()); PpapiPluginMsg_FileSystem_InitIsolatedFileSystemReply());
} }
void PepperFileSystemBrowserHost::SetFileSystemContext( void PepperFileSystemBrowserHost::GotFileSystemContext(
const base::Closure& closure,
scoped_refptr<fileapi::FileSystemContext> file_system_context) { scoped_refptr<fileapi::FileSystemContext> file_system_context) {
file_system_context_ = file_system_context; file_system_context_ = file_system_context;
if (type_ != PP_FILESYSTEMTYPE_EXTERNAL) { if (type_ != PP_FILESYSTEMTYPE_EXTERNAL) {
file_system_operation_runner_ = file_system_operation_runner_ =
file_system_context_->CreateFileSystemOperationRunner(); file_system_context_->CreateFileSystemOperationRunner();
} }
closure.Run();
} }
std::string PepperFileSystemBrowserHost::GetPluginMimeType() const { std::string PepperFileSystemBrowserHost::GetPluginMimeType() const {
......
...@@ -64,27 +64,23 @@ class CONTENT_EXPORT PepperFileSystemBrowserHost ...@@ -64,27 +64,23 @@ class CONTENT_EXPORT PepperFileSystemBrowserHost
private: private:
friend class PepperFileSystemBrowserHostTest; friend class PepperFileSystemBrowserHostTest;
void OpenExistingWithContext( void OpenExistingFileSystem(
const base::Closure& callback, const base::Closure& callback);
scoped_refptr<fileapi::FileSystemContext> file_system_context); void OpenFileSystem(
void GotFileSystemContext(
ppapi::host::ReplyMessageContext reply_context, ppapi::host::ReplyMessageContext reply_context,
fileapi::FileSystemType file_system_type, fileapi::FileSystemType file_system_type);
scoped_refptr<fileapi::FileSystemContext> file_system_context);
void OpenFileSystemComplete( void OpenFileSystemComplete(
ppapi::host::ReplyMessageContext reply_context, ppapi::host::ReplyMessageContext reply_context,
const GURL& root, const GURL& root,
const std::string& name, const std::string& name,
base::PlatformFileError error); base::PlatformFileError error);
void GotIsolatedFileSystemContext( void OpenIsolatedFileSystem(
ppapi::host::ReplyMessageContext reply_context, ppapi::host::ReplyMessageContext reply_context,
const std::string& fsid, const std::string& fsid,
PP_IsolatedFileSystemType_Private type, PP_IsolatedFileSystemType_Private type);
scoped_refptr<fileapi::FileSystemContext> file_system_context);
void OpenPluginPrivateFileSystem( void OpenPluginPrivateFileSystem(
ppapi::host::ReplyMessageContext reply_context, ppapi::host::ReplyMessageContext reply_context,
const std::string& fsid, const std::string& fsid);
scoped_refptr<fileapi::FileSystemContext> file_system_context);
void OpenPluginPrivateFileSystemComplete( void OpenPluginPrivateFileSystemComplete(
ppapi::host::ReplyMessageContext reply_context, ppapi::host::ReplyMessageContext reply_context,
const std::string& fsid, const std::string& fsid,
...@@ -102,7 +98,8 @@ class CONTENT_EXPORT PepperFileSystemBrowserHost ...@@ -102,7 +98,8 @@ class CONTENT_EXPORT PepperFileSystemBrowserHost
const std::string& fsid, const std::string& fsid,
int32_t error); int32_t error);
void SetFileSystemContext( void GotFileSystemContext(
const base::Closure& closure,
scoped_refptr<fileapi::FileSystemContext> file_system_context); scoped_refptr<fileapi::FileSystemContext> file_system_context);
std::string GetPluginMimeType() const; std::string GetPluginMimeType() const;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment