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

Side by Side Diff: chrome/browser/chromeos/arc/fileapi/arc_documents_provider_util.cc

Issue 2580303002: mediaview: Mount ARC documents provider file system volumes. (Closed)
Patch Set: Add a getter of ArcFileSystemService to ArcServiceManager so that VolumeManager can subscribe to AF… Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_util.h" 5 #include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_util.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
11 #include "net/base/escape.h" 11 #include "net/base/escape.h"
12 #include "storage/browser/fileapi/file_system_url.h" 12 #include "storage/browser/fileapi/file_system_url.h"
13 #include "url/gurl.h" 13 #include "url/gurl.h"
14 14
15 namespace arc { 15 namespace arc {
16 16
17 const char kDocumentsProviderMountPointName[] = "arc-documents-provider"; 17 const char kDocumentsProviderMountPointName[] = "arc-documents-provider";
18 const base::FilePath::CharType kDocumentsProviderMountPointPath[] = 18 const base::FilePath::CharType kDocumentsProviderMountPointPath[] =
19 "/special/arc-documents-provider"; 19 "/special/arc-documents-provider";
20 const char kAndroidDirectoryMimeType[] = "vnd.android.document/directory"; 20 const char kAndroidDirectoryMimeType[] = "vnd.android.document/directory";
21 21
22 base::FilePath GetDocumentsProviderMountPath(
mtomasz 2017/01/11 09:35:22 Is this going to be reused for any document provid
Shuhei Takahashi 2017/01/12 08:20:28 Right, done.
23 const std::string& authority,
24 const std::string& root_document_id) {
25 return base::FilePath(kDocumentsProviderMountPointPath)
26 .Append(authority)
27 .Append(root_document_id);
28 }
29
22 bool ParseDocumentsProviderUrl(const storage::FileSystemURL& url, 30 bool ParseDocumentsProviderUrl(const storage::FileSystemURL& url,
23 std::string* authority, 31 std::string* authority,
24 std::string* root_document_id, 32 std::string* root_document_id,
mtomasz 2017/01/11 09:35:22 nit: Is the returned root_document_id escaped or n
Shuhei Takahashi 2017/01/12 08:20:28 Done.
25 base::FilePath* path) { 33 base::FilePath* path) {
26 if (url.type() != storage::kFileSystemTypeArcDocumentsProvider) 34 if (url.type() != storage::kFileSystemTypeArcDocumentsProvider)
27 return false; 35 return false;
28 base::FilePath url_path_stripped = url.path().StripTrailingSeparators(); 36 base::FilePath url_path_stripped = url.path().StripTrailingSeparators();
29 37
30 if (!base::FilePath(kDocumentsProviderMountPointPath) 38 if (!base::FilePath(kDocumentsProviderMountPointPath)
31 .IsParent(url_path_stripped)) { 39 .IsParent(url_path_stripped)) {
32 return false; 40 return false;
33 } 41 }
34 42
35 // Filesystem URL format for documents provider is: 43 // Filesystem URL format for documents provider is:
36 // /special/arc-documents-provider/<authority>/<root_doc_id>/<relative_path> 44 // /special/arc-documents-provider/<authority>/<root_doc_id>/<relative_path>
37 std::vector<base::FilePath::StringType> components; 45 std::vector<base::FilePath::StringType> components;
38 url_path_stripped.GetComponents(&components); 46 url_path_stripped.GetComponents(&components);
39 if (components.size() < 5) 47 if (components.size() < 5)
40 return false; 48 return false;
41 49
42 *authority = components[3]; 50 *authority = components[3];
43 *root_document_id = components[4]; 51 *root_document_id = components[4];
44 52
45 base::FilePath root_path = base::FilePath(kDocumentsProviderMountPointPath) 53 base::FilePath root_path =
46 .Append(*authority) 54 GetDocumentsProviderMountPath(*authority, *root_document_id);
47 .Append(*root_document_id);
48 // Special case: AppendRelativePath() fails for identical paths. 55 // Special case: AppendRelativePath() fails for identical paths.
49 if (url_path_stripped == root_path) { 56 if (url_path_stripped == root_path) {
50 path->clear(); 57 path->clear();
51 } else { 58 } else {
52 bool success = root_path.AppendRelativePath(url_path_stripped, path); 59 bool success = root_path.AppendRelativePath(url_path_stripped, path);
53 DCHECK(success); 60 DCHECK(success);
54 } 61 }
55 return true; 62 return true;
56 } 63 }
57 64
58 GURL BuildDocumentUrl(const std::string& authority, 65 GURL BuildDocumentUrl(const std::string& authority,
59 const std::string& document_id) { 66 const std::string& document_id) {
60 return GURL(base::StringPrintf( 67 return GURL(base::StringPrintf(
61 "content://%s/document/%s", 68 "content://%s/document/%s",
62 net::EscapeQueryParamValue(authority, false /* use_plus */).c_str(), 69 net::EscapeQueryParamValue(authority, false /* use_plus */).c_str(),
63 net::EscapeQueryParamValue(document_id, false /* use_plus */).c_str())); 70 net::EscapeQueryParamValue(document_id, false /* use_plus */).c_str()));
64 } 71 }
65 72
66 } // namespace arc 73 } // namespace arc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698