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

Unified Diff: chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc

Issue 26803004: PPAPI: Add PluginPrivateFileSystem (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc
diff --git a/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc b/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc
index 953fd6c43b3c3c03be72338415f4c36cb42a2198..a9f8878cbe0f5d73b3fddee9dd38426d5af6ca53 100644
--- a/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc
+++ b/chrome/browser/renderer_host/pepper/pepper_isolated_file_system_message_filter.cc
@@ -22,6 +22,7 @@
#include "ppapi/host/host_message_context.h"
#include "ppapi/host/ppapi_host.h"
#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/shared_impl/file_system_util.h"
#include "webkit/browser/fileapi/isolated_context.h"
namespace chrome {
@@ -49,16 +50,19 @@ PepperIsolatedFileSystemMessageFilter::Create(
return new PepperIsolatedFileSystemMessageFilter(
render_process_id,
host->GetProfileDataDirectory(),
- host->GetDocumentURLForInstance(instance));
+ host->GetDocumentURLForInstance(instance),
+ host->GetPpapiHost());
}
PepperIsolatedFileSystemMessageFilter::PepperIsolatedFileSystemMessageFilter(
int render_process_id,
const base::FilePath& profile_directory,
- const GURL& document_url)
+ const GURL& document_url,
+ ppapi::host::PpapiHost* ppapi_host)
: render_process_id_(render_process_id),
profile_directory_(profile_directory),
- document_url_(document_url) {
+ document_url_(document_url),
+ ppapi_host_(ppapi_host) {
for (size_t i = 0; i < arraysize(kPredefinedAllowedCrxFsOrigins); ++i)
allowed_crxfs_origins_.insert(kPredefinedAllowedCrxFsOrigins[i]);
}
@@ -125,7 +129,8 @@ int32_t PepperIsolatedFileSystemMessageFilter::OnOpenFileSystem(
break;
case PP_ISOLATEDFILESYSTEMTYPE_PRIVATE_CRX:
return OpenCrxFileSystem(context);
- // TODO(nhiroki): Other filesystem will be implemented. (crbug.com/286242)
+ case PP_ISOLATEDFILESYSTEMTYPE_PRIVATE_PLUGINPRIVATE:
+ return OpenPluginPrivateFileSystem(context);
}
NOTREACHED();
context->reply_msg =
@@ -168,4 +173,26 @@ int32_t PepperIsolatedFileSystemMessageFilter::OpenCrxFileSystem(
return PP_OK;
}
+int32_t PepperIsolatedFileSystemMessageFilter::OpenPluginPrivateFileSystem(
+ ppapi::host::HostMessageContext* context) {
+ DCHECK(ppapi_host_);
+ // Only plugins with private permission can open the filesystem.
+ if (!ppapi_host_->permissions().HasPermission(ppapi::PERMISSION_PRIVATE))
+ return PP_ERROR_NOACCESS;
+
+ const std::string& root_name = ppapi::IsolatedFileSystemTypeToRootName(
+ PP_ISOLATEDFILESYSTEMTYPE_PRIVATE_PLUGINPRIVATE);
+ const std::string& fsid =
+ fileapi::IsolatedContext::GetInstance()->RegisterFileSystemForVirtualPath(
+ fileapi::kFileSystemTypePluginPrivate, root_name, base::FilePath());
+
+ // Grant full access of isolated filesystem to renderer process.
+ content::ChildProcessSecurityPolicy* policy =
+ content::ChildProcessSecurityPolicy::GetInstance();
+ policy->GrantCreateReadWriteFileSystem(render_process_id_, fsid);
+
+ context->reply_msg = PpapiPluginMsg_IsolatedFileSystem_BrowserOpenReply(fsid);
+ return PP_OK;
+}
+
} // namespace chrome

Powered by Google App Engine
This is Rietveld 408576698