Home | History | Annotate | Download | only in proxy
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "ppapi/proxy/isolated_file_system_private_resource.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/logging.h"
      9 #include "ppapi/c/pp_errors.h"
     10 #include "ppapi/c/pp_file_info.h"
     11 #include "ppapi/proxy/file_system_resource.h"
     12 #include "ppapi/proxy/ppapi_messages.h"
     13 #include "ppapi/proxy/resource_message_params.h"
     14 #include "ppapi/shared_impl/host_resource.h"
     15 #include "ppapi/shared_impl/tracked_callback.h"
     16 #include "ppapi/thunk/enter.h"
     17 
     18 namespace ppapi {
     19 namespace proxy {
     20 
     21 namespace {
     22 void RunTrackedCallback(scoped_refptr<TrackedCallback> callback,
     23                         int32_t rc) {
     24   callback->Run(rc);
     25 }
     26 }  // namespace
     27 
     28 IsolatedFileSystemPrivateResource::IsolatedFileSystemPrivateResource(
     29     Connection connection, PP_Instance instance)
     30     : PluginResource(connection, instance) {
     31   SendCreate(BROWSER, PpapiHostMsg_IsolatedFileSystem_Create());
     32 }
     33 
     34 IsolatedFileSystemPrivateResource::~IsolatedFileSystemPrivateResource() {
     35 }
     36 
     37 thunk::PPB_IsolatedFileSystem_Private_API*
     38 IsolatedFileSystemPrivateResource::AsPPB_IsolatedFileSystem_Private_API() {
     39   return this;
     40 }
     41 
     42 int32_t IsolatedFileSystemPrivateResource::Open(
     43     PP_Instance /* unused */,
     44     PP_IsolatedFileSystemType_Private type,
     45     PP_Resource* file_system_resource,
     46     scoped_refptr<TrackedCallback> callback) {
     47   if (!file_system_resource)
     48     return PP_ERROR_BADARGUMENT;
     49 
     50   Call<PpapiPluginMsg_IsolatedFileSystem_BrowserOpenReply>(BROWSER,
     51       PpapiHostMsg_IsolatedFileSystem_BrowserOpen(type),
     52       base::Bind(&IsolatedFileSystemPrivateResource::OnBrowserOpenComplete,
     53                  this, type, file_system_resource, callback));
     54   return PP_OK_COMPLETIONPENDING;
     55 }
     56 
     57 void IsolatedFileSystemPrivateResource::OnBrowserOpenComplete(
     58     PP_IsolatedFileSystemType_Private type,
     59     PP_Resource* file_system_resource,
     60     scoped_refptr<TrackedCallback> callback,
     61     const ResourceMessageReplyParams& params,
     62     const std::string& fsid) {
     63   if (!TrackedCallback::IsPending(callback))
     64     return;
     65 
     66   if (params.result() != PP_OK) {
     67     callback->Run(params.result());
     68     return;
     69   }
     70 
     71   FileSystemResource* fs = new FileSystemResource(
     72       connection(), pp_instance(), PP_FILESYSTEMTYPE_ISOLATED);
     73   *file_system_resource = fs->GetReference();
     74   if (*file_system_resource == 0)
     75     callback->Run(PP_ERROR_FAILED);
     76   fs->InitIsolatedFileSystem(
     77       fsid, type, base::Bind(&RunTrackedCallback, callback));
     78 }
     79 
     80 }  // namespace proxy
     81 }  // namespace ppapi
     82