Pepper: Make it possible to pass external file systems to NaCl modules.

BUG=327171

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@263166 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/renderer/pepper/content_renderer_pepper_host_factory.cc b/content/renderer/pepper/content_renderer_pepper_host_factory.cc
index 8cffc73..651aafe 100644
--- a/content/renderer/pepper/content_renderer_pepper_host_factory.cc
+++ b/content/renderer/pepper/content_renderer_pepper_host_factory.cc
@@ -83,12 +83,11 @@
 
   // Public interfaces.
   switch (message.type()) {
-    case PpapiHostMsg_FileRef_CreateInternal::ID: {
+    case PpapiHostMsg_FileRef_CreateForFileAPI::ID: {
       PP_Resource file_system;
       std::string internal_path;
-      if (!UnpackMessage<PpapiHostMsg_FileRef_CreateInternal>(message,
-                                                              &file_system,
-                                                              &internal_path)) {
+      if (!UnpackMessage<PpapiHostMsg_FileRef_CreateForFileAPI>(
+          message, &file_system, &internal_path)) {
         NOTREACHED();
         return scoped_ptr<ResourceHost>();
       }
diff --git a/content/renderer/pepper/pepper_file_chooser_host.cc b/content/renderer/pepper/pepper_file_chooser_host.cc
index eb7e2dd..3a10bd1 100644
--- a/content/renderer/pepper/pepper_file_chooser_host.cc
+++ b/content/renderer/pepper/pepper_file_chooser_host.cc
@@ -24,7 +24,7 @@
 class PepperFileChooserHost::CompletionHandler
     : public blink::WebFileChooserCompletion {
  public:
-  CompletionHandler(const base::WeakPtr<PepperFileChooserHost>& host)
+  explicit CompletionHandler(const base::WeakPtr<PepperFileChooserHost>& host)
       : host_(host) {
   }
 
@@ -108,7 +108,7 @@
     base::FilePath file_path(files[i].path);
 #endif
     file_paths.push_back(file_path);
-    create_msgs.push_back(PpapiHostMsg_FileRef_CreateExternal(file_path));
+    create_msgs.push_back(PpapiHostMsg_FileRef_CreateForRawFS(file_path));
     display_names.push_back(files[i].display_name);
   }
 
diff --git a/content/renderer/pepper/resource_converter.cc b/content/renderer/pepper/resource_converter.cc
index d4847b73..0ec93ba7 100644
--- a/content/renderer/pepper/resource_converter.cc
+++ b/content/renderer/pepper/resource_converter.cc
@@ -96,11 +96,13 @@
       WebFileSystemTypeToPPAPI(dom_file_system.type());
   GURL root_url = dom_file_system.rootURL();
 
-  // External file systems are not currently supported. (Without this check,
-  // there would be a CHECK-fail in FileRefResource.)
-  // TODO(mgiuca): Support external file systems.
-  if (file_system_type == PP_FILESYSTEMTYPE_EXTERNAL)
+  // Raw external file system access is not allowed, but external file system
+  // access through fileapi is allowed. (Without this check, there would be a
+  // CHECK failure in FileRefResource.)
+  if ((file_system_type == PP_FILESYSTEMTYPE_EXTERNAL) &&
+      (!root_url.is_valid())) {
     return false;
+  }
 
   *pending_renderer_id = host->GetPpapiHost()->AddPendingResourceHost(
       scoped_ptr<ppapi::host::ResourceHost>(
diff --git a/content/renderer/pepper/url_response_info_util.cc b/content/renderer/pepper/url_response_info_util.cc
index 6349226a..9df6534 100644
--- a/content/renderer/pepper/url_response_info_util.cc
+++ b/content/renderer/pepper/url_response_info_util.cc
@@ -52,7 +52,7 @@
                             int renderer_pending_host_id,
                             const DataFromWebURLResponseCallback& callback,
                             const std::vector<int>& browser_pending_host_ids) {
-  DCHECK(browser_pending_host_ids.size() == 1);
+  DCHECK_EQ(1U, browser_pending_host_ids.size());
   int browser_pending_host_id = 0;
 
   if (browser_pending_host_ids.size() == 1)
@@ -99,7 +99,7 @@
             scoped_ptr<ppapi::host::ResourceHost>(renderer_host));
 
     std::vector<IPC::Message> create_msgs;
-    create_msgs.push_back(PpapiHostMsg_FileRef_CreateExternal(external_path));
+    create_msgs.push_back(PpapiHostMsg_FileRef_CreateForRawFS(external_path));
     host_impl->CreateBrowserResourceHosts(
         pp_instance,
         create_msgs,