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

Unified Diff: content/renderer/pepper/resource_converter.cc

Issue 173143005: [PPAPI] It is now possible to pass a FileSystem to JS in PostMessage. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update comment. Created 6 years, 10 months 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
« no previous file with comments | « no previous file | ppapi/tests/test_post_message.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/pepper/resource_converter.cc
diff --git a/content/renderer/pepper/resource_converter.cc b/content/renderer/pepper/resource_converter.cc
index c4590b84b99cf1c835fc1c10200335286d020ffd..3543405b60d8852c07d12adf7d53f45a47740661 100644
--- a/content/renderer/pepper/resource_converter.cc
+++ b/content/renderer/pepper/resource_converter.cc
@@ -20,6 +20,8 @@
#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
#include "third_party/WebKit/public/web/WebDOMFileSystem.h"
#include "third_party/WebKit/public/web/WebDOMMediaStreamTrack.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
+#include "webkit/common/fileapi/file_system_util.h"
using ppapi::ResourceVar;
@@ -54,6 +56,30 @@ PP_FileSystemType WebFileSystemTypeToPPAPI(blink::WebFileSystem::Type type) {
}
}
+// Converts a fileapi::FileSystemType to a blink::WebFileSystemType.
+// Returns true on success, false if |type| does not correspond to a
+// WebFileSystemType.
+bool FileApiFileSystemTypeToWebFileSystemType(
Matt Giuca 2014/02/24 04:45:37 See Kinuko's comment on Patch Set 4 (not yet resol
kinuko 2014/02/25 05:07:05 I'm fine with this code.
+ fileapi::FileSystemType type,
+ blink::WebFileSystemType* result_type) {
+ switch (type) {
+ case fileapi::kFileSystemTypeTemporary:
+ *result_type = blink::WebFileSystemTypeTemporary;
+ return true;
+ case fileapi::kFileSystemTypePersistent:
+ *result_type = blink::WebFileSystemTypePersistent;
+ return true;
+ case fileapi::kFileSystemTypeIsolated:
+ *result_type = blink::WebFileSystemTypeIsolated;
+ return true;
+ case fileapi::kFileSystemTypeExternal:
+ *result_type = blink::WebFileSystemTypeExternal;
+ return true;
+ default:
kinuko 2014/02/25 05:07:05 nit: do we want to put NOTREACHED() here?
Matt Giuca 2014/03/06 01:06:26 I don't think we want to. It isn't a programming e
kinuko 2014/03/06 05:20:40 Ok (btw NOTREACHED won't crash renderer in product
Matt Giuca 2014/03/06 06:53:54 Yeah, I know, but the debug build still shouldn't
+ return false;
+ }
+}
+
// Given a V8 value containing a DOMFileSystem, creates a resource host and
// returns the resource information for serialization.
// On error, false.
@@ -92,6 +118,29 @@ bool DOMFileSystemToResource(
return true;
}
+bool ResourceHostToDOMFileSystem(
+ content::PepperFileSystemHost* file_system_host,
+ v8::Handle<v8::Context> context,
+ v8::Handle<v8::Value>* dom_file_system) {
+ GURL root_url = file_system_host->GetRootUrl();
+ GURL origin;
+ fileapi::FileSystemType mount_type;
+ base::FilePath virtual_path;
+ fileapi::ParseFileSystemSchemeURL(
+ root_url, &origin, &mount_type, &virtual_path);
+
+ std::string name = GetFileSystemName(origin, mount_type);
raymes 2014/02/25 04:55:44 missing namespace
kinuko 2014/02/25 05:07:05 Hmm.. does it mean we may not get the same .name v
Matt Giuca 2014/03/06 01:06:26 I don't understand this concern. Can you elaborate
kinuko 2014/03/06 05:20:40 I could be mistaken something. If we pass a DOMFil
kinuko 2014/03/06 05:30:44 Probably this code's main target is to convert a p
Matt Giuca 2014/03/06 06:53:54 OK thanks for explaining. You can also get other t
kinuko 2014/03/06 07:05:51 Most (or possibly all) filesystems use the standar
+ blink::WebFileSystemType blink_type;
+ if (!FileApiFileSystemTypeToWebFileSystemType(mount_type, &blink_type))
+ return false;
+ blink::WebFrame* frame = blink::WebFrame::frameForContext(context);
+ *dom_file_system = frame->createSerializableFileSystem(
kinuko 2014/02/25 05:07:05 Let me make sure once more (recalling past discuss
kinuko 2014/02/26 03:53:56 Btw can you instead use new WebDOMFileSystem::crea
Matt Giuca 2014/03/06 01:06:26 I don't know what you mean exactly. Can you explai
kinuko 2014/03/06 05:20:40 Yes, that's what I was asking. Serializable FileSy
Matt Giuca 2014/03/06 06:53:54 Yes, I think I remember this conversation now. I b
kinuko 2014/03/06 07:05:51 Thanks. lgtm then (as far as Raymes says yes to th
+ blink_type,
+ blink::WebString::fromUTF8(name),
+ blink::WebString::fromUTF8(root_url.spec()));
raymes 2014/02/25 04:55:44 I defer to kinuko for the creation of the dom file
+ return true;
+}
+
bool DOMMediaStreamTrackToResource(
PP_Instance instance,
RendererPpapiHost* host,
@@ -239,11 +288,16 @@ bool ResourceConverterImpl::ToV8Value(const PP_Var& var,
}
// Convert to the appropriate type of resource host.
- // TODO(mgiuca): Convert FileSystemHost resources into DOMFileSystem V8
- // objects. (http://crbug.com/345158)
- LOG(ERROR) << "The type of resource #" << resource_id
- << " cannot be converted to a JavaScript object.";
- return false;
+ if (resource_host->IsFileSystemHost()) {
+ return ResourceHostToDOMFileSystem(
+ static_cast<content::PepperFileSystemHost*>(resource_host),
+ context,
+ result);
+ } else {
+ LOG(ERROR) << "The type of resource #" << resource_id
+ << " cannot be converted to a JavaScript object.";
+ return false;
+ }
}
scoped_refptr<HostResourceVar> ResourceConverterImpl::CreateResourceVar(
« no previous file with comments | « no previous file | ppapi/tests/test_post_message.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698