OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 'use strict'; | 5 'use strict'; |
6 | 6 |
7 /** | 7 /** |
8 * Represents each volume, such as "drive", "download directory", each "USB | 8 * Represents each volume, such as "drive", "download directory", each "USB |
9 * flush storage", or "mounted zip archive" etc. | 9 * flush storage", or "mounted zip archive" etc. |
10 * | 10 * |
(...skipping 12 matching lines...) Expand all Loading... |
23 */ | 23 */ |
24 function VolumeInfo( | 24 function VolumeInfo( |
25 volumeType, | 25 volumeType, |
26 mountPath, | 26 mountPath, |
27 volumeId, | 27 volumeId, |
28 root, | 28 root, |
29 error, | 29 error, |
30 deviceType, | 30 deviceType, |
31 isReadOnly, | 31 isReadOnly, |
32 profile) { | 32 profile) { |
33 this.volumeType = volumeType; | 33 this.volumeType_ = volumeType; |
34 // TODO(hidehiko): This should include FileSystem instance. | 34 // TODO(hidehiko): This should include FileSystem instance. |
35 this.mountPath = mountPath; | 35 this.mountPath_ = mountPath; |
36 this.volumeId = volumeId; | 36 this.volumeId_ = volumeId; |
37 this.root = root; | 37 this.root_ = root; |
38 this.fakeEntries = {}; | 38 this.displayRoot_ = null; |
| 39 this.fakeEntries_ = {}; |
| 40 this.resolveQueue_ = new AsyncUtil.Queue(); |
39 | 41 |
40 if (volumeType === util.VolumeType.DRIVE) { | 42 if (volumeType === util.VolumeType.DRIVE) { |
41 this.fakeEntries[RootType.DRIVE] = { | |
42 fullPath: RootDirectory.DRIVE + '/' + DriveSubRootDirectory.ROOT, | |
43 isDirectory: true, | |
44 rootType: RootType.DRIVE, | |
45 label: PathUtil.getRootLabel(RootType.DRIVE), | |
46 toURL: function() { return 'fake-entry://' + this.fullPath; } | |
47 }; | |
48 this.fakeEntries[RootType.DRIVE_OFFLINE] = { | 43 this.fakeEntries[RootType.DRIVE_OFFLINE] = { |
49 fullPath: RootDirectory.DRIVE_OFFLINE, | 44 fullPath: RootDirectory.DRIVE_OFFLINE, |
50 isDirectory: true, | 45 isDirectory: true, |
51 rootType: RootType.DRIVE_OFFLINE, | 46 rootType: RootType.DRIVE_OFFLINE, |
52 label: PathUtil.getRootLabel(RootType.DRIVE_OFFLINE), | |
53 toURL: function() { return 'fake-entry://' + this.fullPath; } | 47 toURL: function() { return 'fake-entry://' + this.fullPath; } |
54 }; | 48 }; |
55 this.fakeEntries[RootType.DRIVE_SHARED_WITH_ME] = { | 49 this.fakeEntries[RootType.DRIVE_SHARED_WITH_ME] = { |
56 fullPath: RootDirectory.DRIVE_SHARED_WITH_ME, | 50 fullPath: RootDirectory.DRIVE_SHARED_WITH_ME, |
57 isDirectory: true, | 51 isDirectory: true, |
58 rootType: RootType.DRIVE_SHARED_WITH_ME, | 52 rootType: RootType.DRIVE_SHARED_WITH_ME, |
59 label: PathUtil.getRootLabel(RootType.DRIVE_SHARED_WITH_ME), | |
60 toURL: function() { return 'fake-entry://' + this.fullPath; } | 53 toURL: function() { return 'fake-entry://' + this.fullPath; } |
61 }; | 54 }; |
62 this.fakeEntries[RootType.DRIVE_RECENT] = { | 55 this.fakeEntries[RootType.DRIVE_RECENT] = { |
63 fullPath: RootDirectory.DRIVE_RECENT, | 56 fullPath: RootDirectory.DRIVE_RECENT, |
64 isDirectory: true, | 57 isDirectory: true, |
65 rootType: RootType.DRIVE_RECENT, | 58 rootType: RootType.DRIVE_RECENT, |
66 label: PathUtil.getRootLabel(RootType.DRIVE_RECENT), | |
67 toURL: function() { return 'fake-entry://' + this.fullPath; } | 59 toURL: function() { return 'fake-entry://' + this.fullPath; } |
68 }; | 60 }; |
69 } | 61 } |
70 | 62 |
71 // Note: This represents if the mounting of the volume is successfully done | 63 // Note: This represents if the mounting of the volume is successfully done |
72 // or not. (If error is empty string, the mount is successfully done). | 64 // or not. (If error is empty string, the mount is successfully done). |
73 // TODO(hidehiko): Rename to make this more understandable. | 65 // TODO(hidehiko): Rename to make this more understandable. |
74 this.error = error; | 66 this.error = error; |
75 this.deviceType = deviceType; | 67 this.deviceType = deviceType; |
76 this.isReadOnly = isReadOnly; | 68 this.isReadOnly = isReadOnly; |
77 this.profile = Object.freeze(profile); | 69 this.profile = Object.freeze(profile); |
78 | 70 |
79 // VolumeInfo is immutable. | 71 Object.seal(this); |
80 Object.freeze(this); | |
81 } | 72 } |
82 | 73 |
83 /** | 74 VolumeInfo.prototype = { |
84 * Obtains a URL of the display root directory that users can see as a root. | 75 /** |
85 * @return {string} URL of root entry. | 76 * @return {util.VolumeType} Volume type. |
86 */ | 77 */ |
87 VolumeInfo.prototype.getDisplayRootDirectoryURL = function() { | 78 get volumeType() { |
88 return this.root.toURL() + | 79 return this.volumeType_; |
89 (this.volumeType === util.VolumeType.DRIVE ? '/root' : ''); | 80 }, |
| 81 /** |
| 82 * @return {string} Mount path. |
| 83 */ |
| 84 get mountPath() { |
| 85 return this.mountPath_; |
| 86 }, |
| 87 /** |
| 88 * @return {string} Volume id. |
| 89 */ |
| 90 get volumeId() { |
| 91 return this.volumeId_; |
| 92 }, |
| 93 /** |
| 94 * @return {DirectoryEntry} Root path. |
| 95 */ |
| 96 get root() { |
| 97 return this.root_; |
| 98 }, |
| 99 /** |
| 100 * @return {DirectoryEntry} Display root path. It is null before |
| 101 * resolveDisplayRoot() is called. |
| 102 */ |
| 103 get displayRoot() { |
| 104 return this.displayRoot_; |
| 105 }, |
| 106 /** |
| 107 * @return {Object.<string, Object>} Fake entries. |
| 108 */ |
| 109 get fakeEntries() { |
| 110 return this.fakeEntries_; |
| 111 } |
90 }; | 112 }; |
91 | 113 |
92 /** | 114 /** |
| 115 * Obtains the display root of the entry. It may take long time for Drive. Once |
| 116 * resolved, it is cached. |
| 117 * |
| 118 * @param {function(DirectoryEntry)} onSuccess Success callback with the display |
| 119 * root directory as an argument. |
| 120 * @param {function(FileError)} onFailure Failure callback. |
| 121 */ |
| 122 VolumeInfo.prototype.resolveDisplayRoot = function(onSuccess, onFailure) { |
| 123 // TODO(mtomasz): Do not add VolumeInfo which failed to resolve root, and |
| 124 // remove this if logic. Call onSuccess() always, instead. |
| 125 if (this.volumeType !== util.VolumeType.DRIVE) { |
| 126 if (this.root) |
| 127 onSuccess(this.root); |
| 128 else |
| 129 onFailure(this.error); |
| 130 return; |
| 131 } |
| 132 |
| 133 // For Drive, we need to resolve. |
| 134 this.resolveQueue_.run(function(callback) { |
| 135 if (this.displayRoot) { |
| 136 onSuccess(this.displayRoot); |
| 137 callback(); |
| 138 return; |
| 139 } |
| 140 var displayRootURL = this.root.toURL() + '/root'; |
| 141 webkitResolveLocalFileSystemURL( |
| 142 displayRootURL, function(directoryEntry) { |
| 143 this.displayRoot_ = directoryEntry; |
| 144 onSuccess(directoryEntry); |
| 145 callback(); |
| 146 }.bind(this), function(fileError) { |
| 147 onFailure(fileError); |
| 148 callback(); |
| 149 }.bind(this)); |
| 150 }.bind(this)); |
| 151 }; |
| 152 |
| 153 /** |
93 * Obtains volume label. | 154 * Obtains volume label. |
94 * @return {string} Label for the volume. | 155 * @return {string} Label for the volume. |
95 */ | 156 */ |
96 VolumeInfo.prototype.getLabel = function() { | 157 VolumeInfo.prototype.getLabel = function() { |
97 if (this.volumeType === util.VolumeType.DRIVE) | 158 if (this.volumeType === util.VolumeType.DRIVE) |
98 return str('DRIVE_DIRECTORY_LABEL'); | 159 return str('DRIVE_DIRECTORY_LABEL'); |
99 else | 160 else |
100 return PathUtil.getFolderLabel(this.mountPath); | 161 return PathUtil.getFolderLabel(this.mountPath); |
101 }; | 162 }; |
102 | 163 |
(...skipping 745 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
848 this.isDriveBased; | 909 this.isDriveBased; |
849 | 910 |
850 /** | 911 /** |
851 * Whether the entry is read only or not. | 912 * Whether the entry is read only or not. |
852 * @type {boolean} | 913 * @type {boolean} |
853 */ | 914 */ |
854 this.isReadOnly = isReadOnly; | 915 this.isReadOnly = isReadOnly; |
855 | 916 |
856 Object.freeze(this); | 917 Object.freeze(this); |
857 } | 918 } |
OLD | NEW |