Chromium Code Reviews| Index: content/renderer/pepper/resource_converter.cc |
| diff --git a/content/renderer/pepper/resource_converter.cc b/content/renderer/pepper/resource_converter.cc |
| index 118a1ac4dfe81cd18bee3c643f7e073aa1322aea..979868112bf05d6a8f17648c4db3e5a872abc9ae 100644 |
| --- a/content/renderer/pepper/resource_converter.cc |
| +++ b/content/renderer/pepper/resource_converter.cc |
| @@ -7,9 +7,15 @@ |
| #include "base/bind.h" |
| #include "base/message_loop/message_loop.h" |
| #include "content/public/renderer/renderer_ppapi_host.h" |
| +#include "content/renderer/pepper/pepper_file_system_host.h" |
| #include "ipc/ipc_message.h" |
| +#include "ppapi/host/ppapi_host.h" |
| +#include "ppapi/host/resource_host.h" |
| +#include "ppapi/proxy/ppapi_messages.h" |
| #include "ppapi/shared_impl/resource_var.h" |
| #include "ppapi/shared_impl/scoped_pp_var.h" |
| +#include "third_party/WebKit/public/platform/WebFileSystem.h" |
| +#include "third_party/WebKit/public/web/WebDOMFileSystem.h" |
| namespace { |
| @@ -24,6 +30,56 @@ void FlushComplete( |
| callback.Run(true); |
| } |
| +// Converts a WebKit::WebFileSystem::Type to a PP_FileSystemType. |
| +// Returns true on success, false on failure. |
|
raymes
2013/10/11 04:02:24
Seems like this comment doesn't match the behavior
Matt Giuca
2013/10/15 00:25:16
Done.
|
| +PP_FileSystemType WebFileSystemTypeToPPAPI( |
| + WebKit::WebFileSystem::Type type) { |
|
raymes
2013/10/11 04:02:24
Does this fit on the previous line?
Matt Giuca
2013/10/15 00:25:16
Done.
|
| + switch (type) { |
| + case WebKit::WebFileSystem::TypeTemporary: |
| + return PP_FILESYSTEMTYPE_LOCALTEMPORARY; |
| + case WebKit::WebFileSystem::TypePersistent: |
| + return PP_FILESYSTEMTYPE_LOCALPERSISTENT; |
| + case WebKit::WebFileSystem::TypeIsolated: |
| + return PP_FILESYSTEMTYPE_ISOLATED; |
| + case WebKit::WebFileSystem::TypeExternal: |
| + return PP_FILESYSTEMTYPE_EXTERNAL; |
| + } |
|
raymes
2013/10/11 04:02:24
Do we need a default case for safety here?
Matt Giuca
2013/10/15 00:25:16
Done.
|
| +} |
| + |
| +// Given a V8 value containing a DOMFileSystem, creates a resource host and |
| +// returns the resource information for serialization. |
| +// On error, false. |
| +bool DOMFileSystemToResource( |
| + PP_Instance instance, |
| + content::RendererPpapiHost* host, |
| + const WebKit::WebDOMFileSystem& dom_file_system, |
| + int* pending_renderer_id, |
| + IPC::Message* create_message, |
| + IPC::Message* browser_host_create_message) { |
| + PP_FileSystemType file_system_type; |
|
dmichael (off chromium)
2013/10/11 19:21:36
would be better to initialize this immediately. Yo
Matt Giuca
2013/10/15 00:25:16
Done.
|
| + // TODO(mgiuca): Ensure that external file systems are supported. |
| + DCHECK(!dom_file_system.isNull()); |
| + |
| + file_system_type = WebFileSystemTypeToPPAPI(dom_file_system.type()); |
| + GURL root_url = dom_file_system.rootURL(); |
| + |
| + content::PepperFileSystemHost* file_system_host = |
|
raymes
2013/10/11 04:02:24
nit: maybe initialize a scoped_ptr here to make ow
Matt Giuca
2013/10/15 00:25:16
That doesn't work; scoped_ptr can't be copied so i
yzshen1
2013/10/15 18:38:03
nit: You could call Pass() on the scoped_ptr if yo
Matt Giuca
2013/10/17 09:17:58
Fair enough, but I think it looks fine the way I c
|
| + new content::PepperFileSystemHost(host, instance, 0, root_url, |
| + file_system_type); |
| + *pending_renderer_id = host->GetPpapiHost()->AddPendingResourceHost( |
| + scoped_ptr<::ppapi::host::ResourceHost>(file_system_host)); |
| + if (!*pending_renderer_id) |
| + return false; |
| + |
| + *create_message = PpapiPluginMsg_FileSystem_CreateFromPendingHost( |
| + file_system_type); |
|
dmichael (off chromium)
2013/10/11 19:21:36
Maybe it would make sense to use scoped_ptr<IPC::M
Matt Giuca
2013/10/17 09:17:58
These are already being passed out of this functio
dmichael (off chromium)
2013/10/17 17:36:11
Because of the interface you have here, you also c
Matt Giuca
2013/10/18 07:09:30
Oh I see where the extra copy is here. I've fixed
|
| + |
| + *browser_host_create_message = |
|
dmichael (off chromium)
2013/10/11 19:21:36
(same suggestion for this message)
Matt Giuca
2013/10/18 07:09:30
Done.
|
| + PpapiHostMsg_FileSystem_CreateFromRenderer(root_url.spec(), |
| + file_system_type); |
| + return true; |
| +} |
| + |
| } // namespace |
| namespace content { |
| @@ -50,8 +106,24 @@ bool ResourceConverterImpl::FromV8Value(v8::Handle<v8::Object> val, |
| v8::HandleScope handle_scope(context->GetIsolate()); |
| *was_resource = false; |
| - // TODO(mgiuca): There are currently no values which can be converted to |
| - // resources. |
| + |
| + WebKit::WebDOMFileSystem dom_file_system = |
| + WebKit::WebDOMFileSystem::fromV8Value(val); |
| + if (!dom_file_system.isNull()) { |
|
yzshen1
2013/10/11 17:45:45
if this if-block doesn't run, |result| is not touc
dmichael (off chromium)
2013/10/11 19:21:36
+1. I think we should leave |result| untouched and
Matt Giuca
2013/10/15 00:25:16
Yes, this was intentional (but perhaps not the bes
yzshen1
2013/10/15 18:38:03
More comment sounds like a good idea. :)
On 2013/1
Matt Giuca
2013/10/17 09:17:58
Done.
|
| + int pending_renderer_id; |
| + IPC::Message create_message; |
| + IPC::Message browser_host_create_message; |
| + if (!DOMFileSystemToResource(instance_, host_, dom_file_system, |
| + &pending_renderer_id, &create_message, |
| + &browser_host_create_message)) |
| + return false; |
|
raymes
2013/10/11 04:02:24
nit: usually use { with multi-line if's
Matt Giuca
2013/10/15 00:25:16
Done.
|
| + scoped_refptr<HostResourceVar> result_var = |
| + CreateResourceVarWithBrowserHost( |
| + pending_renderer_id, create_message, browser_host_create_message); |
| + *result = result_var->GetPPVar(); |
|
raymes
2013/10/11 04:02:24
optional: is it clearer to combine the previous tw
Matt Giuca
2013/10/15 00:25:16
I don't think so, because then you'll never see th
raymes
2013/10/16 00:45:14
It shouldn't be important to know that it's a scop
Matt Giuca
2013/10/17 09:17:58
OK. (Also it would be a very long line, so I'll le
|
| + *was_resource = true; |
| + return true; |
| + } |
| return true; |
| } |