summaryrefslogtreecommitdiffstats
path: root/webkit/plugins/ppapi/ppb_file_ref_impl.cc
diff options
context:
space:
mode:
authorericu@google.com <ericu@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-07 20:29:19 +0000
committerericu@google.com <ericu@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-07 20:29:19 +0000
commit647a0c2471827a26451a59894059384d0985e88a (patch)
treedeb842d8421f67c681156e2f3d305856ab7795c8 /webkit/plugins/ppapi/ppb_file_ref_impl.cc
parent3abdc9c0071d48e308491119cf1bc373ab60ada2 (diff)
downloadchromium_src-647a0c2471827a26451a59894059384d0985e88a.zip
chromium_src-647a0c2471827a26451a59894059384d0985e88a.tar.gz
chromium_src-647a0c2471827a26451a59894059384d0985e88a.tar.bz2
More filesystem cleanup: convert URL-encoded-as-FilePath to actual URL, where
possible without WebKit API changes. The WebKit changes will happen in another CL. BUG=none TEST=none Review URL: http://codereview.chromium.org/6767010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80833 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/plugins/ppapi/ppb_file_ref_impl.cc')
-rw-r--r--webkit/plugins/ppapi/ppb_file_ref_impl.cc45
1 files changed, 25 insertions, 20 deletions
diff --git a/webkit/plugins/ppapi/ppb_file_ref_impl.cc b/webkit/plugins/ppapi/ppb_file_ref_impl.cc
index 55bf3f1..872d9b0 100644
--- a/webkit/plugins/ppapi/ppb_file_ref_impl.cc
+++ b/webkit/plugins/ppapi/ppb_file_ref_impl.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -6,6 +6,7 @@
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
+#include "googleurl/src/gurl.h"
#include "ppapi/c/pp_errors.h"
#include "webkit/plugins/ppapi/common.h"
#include "webkit/plugins/ppapi/file_callbacks.h"
@@ -126,7 +127,7 @@ int32_t MakeDirectory(PP_Resource directory_ref_id,
PluginInstance* instance = file_system->instance();
if (!instance->delegate()->MakeDirectory(
- directory_ref->GetSystemPath(), PPBoolToBool(make_ancestors),
+ directory_ref->GetFileSystemURL(), PPBoolToBool(make_ancestors),
new FileCallbacks(instance->module()->AsWeakPtr(), directory_ref_id,
callback, NULL, NULL, NULL)))
return PP_ERROR_FAILED;
@@ -150,7 +151,8 @@ int32_t Touch(PP_Resource file_ref_id,
PluginInstance* instance = file_system->instance();
if (!instance->delegate()->Touch(
- file_ref->GetSystemPath(), base::Time::FromDoubleT(last_access_time),
+ file_ref->GetFileSystemURL(),
+ base::Time::FromDoubleT(last_access_time),
base::Time::FromDoubleT(last_modified_time),
new FileCallbacks(instance->module()->AsWeakPtr(), file_ref_id,
callback, NULL, NULL, NULL)))
@@ -173,7 +175,7 @@ int32_t Delete(PP_Resource file_ref_id,
PluginInstance* instance = file_system->instance();
if (!instance->delegate()->Delete(
- file_ref->GetSystemPath(),
+ file_ref->GetFileSystemURL(),
new FileCallbacks(instance->module()->AsWeakPtr(), file_ref_id,
callback, NULL, NULL, NULL)))
return PP_ERROR_FAILED;
@@ -204,7 +206,7 @@ int32_t Rename(PP_Resource file_ref_id,
// http://crbug.com/67624
PluginInstance* instance = file_system->instance();
if (!instance->delegate()->Rename(
- file_ref->GetSystemPath(), new_file_ref->GetSystemPath(),
+ file_ref->GetFileSystemURL(), new_file_ref->GetFileSystemURL(),
new FileCallbacks(instance->module()->AsWeakPtr(), file_ref_id,
callback, NULL, NULL, NULL)))
return PP_ERROR_FAILED;
@@ -320,22 +322,25 @@ std::string PPB_FileRef_Impl::GetPath() const {
}
FilePath PPB_FileRef_Impl::GetSystemPath() const {
- if (GetFileSystemType() == PP_FILESYSTEMTYPE_EXTERNAL)
- return system_path_;
+ if (GetFileSystemType() != PP_FILESYSTEMTYPE_EXTERNAL) {
+ NOTREACHED();
+ return FilePath();
+ }
+ return system_path_;
+}
- // Since |virtual_path_| starts with a '/', it is considered an absolute path
- // on POSIX systems. We need to remove the '/' before calling Append() or we
- // will run into a DCHECK.
- FilePath virtual_file_path(
-#if defined(OS_WIN)
- UTF8ToWide(virtual_path_.substr(1))
-#elif defined(OS_POSIX)
- virtual_path_.substr(1)
-#else
-#error "Unsupported platform."
-#endif
- );
- return file_system_->root_path().Append(virtual_file_path);
+GURL PPB_FileRef_Impl::GetFileSystemURL() const {
+ if (GetFileSystemType() != PP_FILESYSTEMTYPE_LOCALPERSISTENT &&
+ GetFileSystemType() != PP_FILESYSTEMTYPE_LOCALTEMPORARY) {
+ NOTREACHED();
+ return GURL();
+ }
+ if (!virtual_path_.size())
+ return file_system_->root_url();
+ // Since |virtual_path_| starts with a '/', it looks like an absolute path.
+ // We need to trim off the '/' before calling Resolve, as FileSystem URLs
+ // start with a storage type identifier that looks like a path segment.
+ return file_system_->root_url().Resolve(virtual_path_.substr(1));
}
} // namespace ppapi