| 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 #include "chrome/browser/devtools/devtools_file_helper.h" | 5 #include "chrome/browser/devtools/devtools_file_helper.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 base::WriteFile(path, content.c_str(), content.length()); | 124 base::WriteFile(path, content.c_str(), content.length()); |
| 125 } | 125 } |
| 126 | 126 |
| 127 void AppendToFile(const base::FilePath& path, const std::string& content) { | 127 void AppendToFile(const base::FilePath& path, const std::string& content) { |
| 128 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 128 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 129 DCHECK(!path.empty()); | 129 DCHECK(!path.empty()); |
| 130 | 130 |
| 131 base::AppendToFile(path, content.c_str(), content.length()); | 131 base::AppendToFile(path, content.c_str(), content.length()); |
| 132 } | 132 } |
| 133 | 133 |
| 134 fileapi::IsolatedContext* isolated_context() { | 134 storage::IsolatedContext* isolated_context() { |
| 135 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 135 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 136 fileapi::IsolatedContext* isolated_context = | 136 storage::IsolatedContext* isolated_context = |
| 137 fileapi::IsolatedContext::GetInstance(); | 137 storage::IsolatedContext::GetInstance(); |
| 138 DCHECK(isolated_context); | 138 DCHECK(isolated_context); |
| 139 return isolated_context; | 139 return isolated_context; |
| 140 } | 140 } |
| 141 | 141 |
| 142 std::string RegisterFileSystem(WebContents* web_contents, | 142 std::string RegisterFileSystem(WebContents* web_contents, |
| 143 const base::FilePath& path, | 143 const base::FilePath& path, |
| 144 std::string* registered_name) { | 144 std::string* registered_name) { |
| 145 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 145 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 146 CHECK(web_contents->GetURL().SchemeIs(content::kChromeDevToolsScheme)); | 146 CHECK(web_contents->GetURL().SchemeIs(content::kChromeDevToolsScheme)); |
| 147 std::string file_system_id = isolated_context()->RegisterFileSystemForPath( | 147 std::string file_system_id = isolated_context()->RegisterFileSystemForPath( |
| 148 fileapi::kFileSystemTypeNativeLocal, std::string(), path, | 148 storage::kFileSystemTypeNativeLocal, |
| 149 std::string(), |
| 150 path, |
| 149 registered_name); | 151 registered_name); |
| 150 | 152 |
| 151 content::ChildProcessSecurityPolicy* policy = | 153 content::ChildProcessSecurityPolicy* policy = |
| 152 content::ChildProcessSecurityPolicy::GetInstance(); | 154 content::ChildProcessSecurityPolicy::GetInstance(); |
| 153 RenderViewHost* render_view_host = web_contents->GetRenderViewHost(); | 155 RenderViewHost* render_view_host = web_contents->GetRenderViewHost(); |
| 154 int renderer_id = render_view_host->GetProcess()->GetID(); | 156 int renderer_id = render_view_host->GetProcess()->GetID(); |
| 155 policy->GrantReadFileSystem(renderer_id, file_system_id); | 157 policy->GrantReadFileSystem(renderer_id, file_system_id); |
| 156 policy->GrantWriteFileSystem(renderer_id, file_system_id); | 158 policy->GrantWriteFileSystem(renderer_id, file_system_id); |
| 157 policy->GrantCreateFileForFileSystem(renderer_id, file_system_id); | 159 policy->GrantCreateFileForFileSystem(renderer_id, file_system_id); |
| 158 policy->GrantDeleteFromFileSystem(renderer_id, file_system_id); | 160 policy->GrantDeleteFromFileSystem(renderer_id, file_system_id); |
| 159 | 161 |
| 160 // We only need file level access for reading FileEntries. Saving FileEntries | 162 // We only need file level access for reading FileEntries. Saving FileEntries |
| 161 // just needs the file system to have read/write access, which is granted | 163 // just needs the file system to have read/write access, which is granted |
| 162 // above if required. | 164 // above if required. |
| 163 if (!policy->CanReadFile(renderer_id, path)) | 165 if (!policy->CanReadFile(renderer_id, path)) |
| 164 policy->GrantReadFile(renderer_id, path); | 166 policy->GrantReadFile(renderer_id, path); |
| 165 | 167 |
| 166 return file_system_id; | 168 return file_system_id; |
| 167 } | 169 } |
| 168 | 170 |
| 169 DevToolsFileHelper::FileSystem CreateFileSystemStruct( | 171 DevToolsFileHelper::FileSystem CreateFileSystemStruct( |
| 170 WebContents* web_contents, | 172 WebContents* web_contents, |
| 171 const std::string& file_system_id, | 173 const std::string& file_system_id, |
| 172 const std::string& registered_name, | 174 const std::string& registered_name, |
| 173 const std::string& file_system_path) { | 175 const std::string& file_system_path) { |
| 174 const GURL origin = web_contents->GetURL().GetOrigin(); | 176 const GURL origin = web_contents->GetURL().GetOrigin(); |
| 175 std::string file_system_name = fileapi::GetIsolatedFileSystemName( | 177 std::string file_system_name = |
| 176 origin, | 178 storage::GetIsolatedFileSystemName(origin, file_system_id); |
| 177 file_system_id); | 179 std::string root_url = storage::GetIsolatedFileSystemRootURIString( |
| 178 std::string root_url = fileapi::GetIsolatedFileSystemRootURIString( | 180 origin, file_system_id, registered_name); |
| 179 origin, | |
| 180 file_system_id, | |
| 181 registered_name); | |
| 182 return DevToolsFileHelper::FileSystem(file_system_name, | 181 return DevToolsFileHelper::FileSystem(file_system_name, |
| 183 root_url, | 182 root_url, |
| 184 file_system_path); | 183 file_system_path); |
| 185 } | 184 } |
| 186 | 185 |
| 187 set<std::string> GetAddedFileSystemPaths(Profile* profile) { | 186 set<std::string> GetAddedFileSystemPaths(Profile* profile) { |
| 188 const base::DictionaryValue* file_systems_paths_value = | 187 const base::DictionaryValue* file_systems_paths_value = |
| 189 profile->GetPrefs()->GetDictionary(prefs::kDevToolsFileSystemPaths); | 188 profile->GetPrefs()->GetDictionary(prefs::kDevToolsFileSystemPaths); |
| 190 set<std::string> result; | 189 set<std::string> result; |
| 191 for (base::DictionaryValue::Iterator it(*file_systems_paths_value); | 190 for (base::DictionaryValue::Iterator it(*file_systems_paths_value); |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 Bind(callback, FileSystem()), | 312 Bind(callback, FileSystem()), |
| 314 web_contents_); | 313 web_contents_); |
| 315 select_file_dialog->Show(ui::SelectFileDialog::SELECT_FOLDER, | 314 select_file_dialog->Show(ui::SelectFileDialog::SELECT_FOLDER, |
| 316 base::FilePath()); | 315 base::FilePath()); |
| 317 } | 316 } |
| 318 | 317 |
| 319 void DevToolsFileHelper::UpgradeDraggedFileSystemPermissions( | 318 void DevToolsFileHelper::UpgradeDraggedFileSystemPermissions( |
| 320 const std::string& file_system_url, | 319 const std::string& file_system_url, |
| 321 const AddFileSystemCallback& callback, | 320 const AddFileSystemCallback& callback, |
| 322 const ShowInfoBarCallback& show_info_bar_callback) { | 321 const ShowInfoBarCallback& show_info_bar_callback) { |
| 323 fileapi::FileSystemURL root_url = | 322 storage::FileSystemURL root_url = |
| 324 isolated_context()->CrackURL(GURL(file_system_url)); | 323 isolated_context()->CrackURL(GURL(file_system_url)); |
| 325 if (!root_url.is_valid() || !root_url.path().empty()) { | 324 if (!root_url.is_valid() || !root_url.path().empty()) { |
| 326 callback.Run(FileSystem()); | 325 callback.Run(FileSystem()); |
| 327 return; | 326 return; |
| 328 } | 327 } |
| 329 | 328 |
| 330 std::vector<fileapi::MountPoints::MountPointInfo> mount_points; | 329 std::vector<storage::MountPoints::MountPointInfo> mount_points; |
| 331 isolated_context()->GetDraggedFileInfo(root_url.filesystem_id(), | 330 isolated_context()->GetDraggedFileInfo(root_url.filesystem_id(), |
| 332 &mount_points); | 331 &mount_points); |
| 333 | 332 |
| 334 std::vector<fileapi::MountPoints::MountPointInfo>::const_iterator it = | 333 std::vector<storage::MountPoints::MountPointInfo>::const_iterator it = |
| 335 mount_points.begin(); | 334 mount_points.begin(); |
| 336 for (; it != mount_points.end(); ++it) | 335 for (; it != mount_points.end(); ++it) |
| 337 InnerAddFileSystem(callback, show_info_bar_callback, it->path); | 336 InnerAddFileSystem(callback, show_info_bar_callback, it->path); |
| 338 } | 337 } |
| 339 | 338 |
| 340 void DevToolsFileHelper::InnerAddFileSystem( | 339 void DevToolsFileHelper::InnerAddFileSystem( |
| 341 const AddFileSystemCallback& callback, | 340 const AddFileSystemCallback& callback, |
| 342 const ShowInfoBarCallback& show_info_bar_callback, | 341 const ShowInfoBarCallback& show_info_bar_callback, |
| 343 const base::FilePath& path) { | 342 const base::FilePath& path) { |
| 344 std::string file_system_path = path.AsUTF8Unsafe(); | 343 std::string file_system_path = path.AsUTF8Unsafe(); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 base::DictionaryValue* file_systems_paths_value = update.Get(); | 419 base::DictionaryValue* file_systems_paths_value = update.Get(); |
| 421 file_systems_paths_value->RemoveWithoutPathExpansion(file_system_path, NULL); | 420 file_systems_paths_value->RemoveWithoutPathExpansion(file_system_path, NULL); |
| 422 } | 421 } |
| 423 | 422 |
| 424 bool DevToolsFileHelper::IsFileSystemAdded( | 423 bool DevToolsFileHelper::IsFileSystemAdded( |
| 425 const std::string& file_system_path) { | 424 const std::string& file_system_path) { |
| 426 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 425 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 427 set<std::string> file_system_paths = GetAddedFileSystemPaths(profile_); | 426 set<std::string> file_system_paths = GetAddedFileSystemPaths(profile_); |
| 428 return file_system_paths.find(file_system_path) != file_system_paths.end(); | 427 return file_system_paths.find(file_system_path) != file_system_paths.end(); |
| 429 } | 428 } |
| OLD | NEW |