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

Side by Side Diff: chrome/browser/chromeos/extensions/file_browser_private_api.cc

Issue 9545006: This adds some GData private API to the file manager (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Adding dirty bit and edit url Created 8 years, 9 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 (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/chromeos/extensions/file_browser_private_api.h" 5 #include "chrome/browser/chromeos/extensions/file_browser_private_api.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/json/json_writer.h" 10 #include "base/json/json_writer.h"
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 } 379 }
380 380
381 mount_info->SetString("mountCondition", 381 mount_info->SetString("mountCondition",
382 DiskMountManager::MountConditionToString( 382 DiskMountManager::MountConditionToString(
383 mount_point_info.mount_condition)); 383 mount_point_info.mount_condition));
384 384
385 return mount_info; 385 return mount_info;
386 } 386 }
387 #endif // defined(OS_CHROMEOS) 387 #endif // defined(OS_CHROMEOS)
388 388
389 // Delegate used to find file properties.
390 class FilePropertiesDelegate : public gdata::FindFileDelegate {
391 public:
392 FilePropertiesDelegate();
393 virtual ~FilePropertiesDelegate();
394
395 // Builds a dictionary from the GDataFile file property information
396 void CopyProperties(base::DictionaryValue* property_dict);
397
398 base::PlatformFileError error() const { return error_; }
399
400 private:
401 // GDataFileSystem::FindFileDelegate overrides.
402 virtual void OnFileFound(gdata::GDataFile* file) OVERRIDE;
403 virtual void OnDirectoryFound(const FilePath&,
404 gdata::GDataDirectory* dir) OVERRIDE;
405 virtual FindFileTraversalCommand OnEnterDirectory(
406 const FilePath&,
407 gdata::GDataDirectory*) OVERRIDE;
408 virtual void OnError(base::PlatformFileError error) OVERRIDE;
409
410 GURL thumbnail_url_;
411 GURL edit_url_;
412 int cache_state_;
413 base::PlatformFileError error_;
414 };
415
416 // FilePropertiesDelegate class implementation.
417
418 FilePropertiesDelegate::FilePropertiesDelegate()
419 : cache_state_(0), error_(base::PLATFORM_FILE_OK) {
420 }
421
422 FilePropertiesDelegate::~FilePropertiesDelegate() { }
423
424 void FilePropertiesDelegate::CopyProperties(
425 base::DictionaryValue* property_dict) {
426 DCHECK(property_dict);
427 DCHECK(!property_dict->HasKey("thumbnailUrl"));
428 DCHECK(!property_dict->HasKey("editUrl"));
429 DCHECK(!property_dict->HasKey("isPinned"));
430 DCHECK(!property_dict->HasKey("isPresent"));
431 DCHECK(!property_dict->HasKey("isDirty"));
432 DCHECK(!property_dict->HasKey("errorCode"));
433
434 if (error_ != base::PLATFORM_FILE_OK) {
435 property_dict->SetInteger("errorCode", error_);
436 return;
437 }
438
439 property_dict->SetString("thumbnailUrl", thumbnail_url_.spec());
440 property_dict->SetString("editUrl", edit_url_.spec());
zel 2012/03/01 22:16:12 let's check if we even have it - only hosted doc i
441
442 base::FundamentalValue* pinned =
443 new base::FundamentalValue(static_cast<bool>(cache_state_ &
444 gdata::GDataFile::CACHE_STATE_PINNED));
445 property_dict->Set("isPinned", pinned);
446
447 base::FundamentalValue* present =
448 new base::FundamentalValue(static_cast<bool>(cache_state_ &
449 gdata::GDataFile::CACHE_STATE_PRESENT));
450 property_dict->Set("isPresent", present);
451
452 base::FundamentalValue* dirty =
453 new base::FundamentalValue(static_cast<bool>(cache_state_ &
454 gdata::GDataFile::CACHE_STATE_DIRTY));
455 property_dict->Set("isDirty", dirty);
456 }
457
458 void FilePropertiesDelegate::OnFileFound(gdata::GDataFile* file) {
459 DCHECK(!file->file_info().is_directory);
460 thumbnail_url_ = file->thumbnail_url();
461 edit_url_ = file->edit_url();
462 cache_state_ = file->cache_state();
463 }
464
465 void FilePropertiesDelegate::OnDirectoryFound(const FilePath&,
466 gdata::GDataDirectory* dir) {
467 DCHECK(dir->file_info().is_directory);
468 // We don't set anything here because we don't have any properties for
469 // directories yet.
470 }
471
472 gdata::FindFileDelegate::FindFileTraversalCommand
473 FilePropertiesDelegate::OnEnterDirectory(const FilePath&,
474 gdata::GDataDirectory*) {
475 // Keep traversing while doing read only lookups.
476 return FIND_FILE_CONTINUES;
477 }
478
479 void FilePropertiesDelegate::OnError(base::PlatformFileError error) {
480 error_ = error;
481 }
482
483 FilePath GetVirtualPathFromURL(const GURL& file_url) {
484 FilePath virtual_path;
485 fileapi::FileSystemType type = fileapi::kFileSystemTypeUnknown;
486 GURL file_origin_url;
487 if (!CrackFileSystemURL(file_url, &file_origin_url, &type, &virtual_path) ||
488 type != fileapi::kFileSystemTypeExternal) {
489 NOTREACHED();
490 return FilePath();
491 }
492 return virtual_path;
493 }
494
389 } // namespace 495 } // namespace
390 496
391 class RequestLocalFileSystemFunction::LocalFileSystemCallbackDispatcher { 497 class RequestLocalFileSystemFunction::LocalFileSystemCallbackDispatcher {
392 public: 498 public:
393 static fileapi::FileSystemContext::OpenFileSystemCallback CreateCallback( 499 static fileapi::FileSystemContext::OpenFileSystemCallback CreateCallback(
394 RequestLocalFileSystemFunction* function, 500 RequestLocalFileSystemFunction* function,
395 Profile* profile, 501 Profile* profile,
396 int child_id, 502 int child_id,
397 scoped_refptr<const Extension> extension) { 503 scoped_refptr<const Extension> extension) {
398 return base::Bind( 504 return base::Bind(
(...skipping 1386 matching lines...) Expand 10 before | Expand all | Expand 10 after
1785 ChromeURLDataManager::DataSource::SetFontAndTextDirection(dict); 1891 ChromeURLDataManager::DataSource::SetFontAndTextDirection(dict);
1786 1892
1787 dict->SetString("PLAY_MEDIA", 1893 dict->SetString("PLAY_MEDIA",
1788 l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_PLAY)); 1894 l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_PLAY));
1789 1895
1790 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableGData)) 1896 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableGData))
1791 dict->SetString("ENABLE_GDATA", "1"); 1897 dict->SetString("ENABLE_GDATA", "1");
1792 1898
1793 return true; 1899 return true;
1794 } 1900 }
1901
1902 GetGDataFilePropertiesFunction::GetGDataFilePropertiesFunction() {
1903 }
1904
1905 GetGDataFilePropertiesFunction::~GetGDataFilePropertiesFunction() {
1906 }
1907
1908 bool GetGDataFilePropertiesFunction::RunImpl() {
1909 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1910 if (args_->GetSize() != 1)
1911 return false;
1912
1913 ListValue* path_list = NULL;
1914 args_->GetList(0, &path_list);
1915 DCHECK(path_list);
1916
1917 std::string file_url;
1918 size_t len = path_list->GetSize();
1919 FilePathList files;
1920 files.reserve(len);
1921 for (size_t i = 0; i < len; ++i) {
1922 path_list->GetString(i, &file_url);
1923 files.push_back(GetVirtualPathFromURL(GURL(file_url)));
1924 }
1925
1926 base::ListValue* file_info = new base::ListValue;
1927 result_.reset(file_info);
1928
1929 gdata::GDataFileSystem* file_system =
1930 gdata::GDataFileSystemFactory::GetForProfile(profile_);
1931 DCHECK(file_system);
1932
1933 for (FilePathList::const_iterator iter = files.begin();
1934 iter != files.end(); ++iter) {
1935 scoped_refptr<FilePropertiesDelegate> property_delegate(
1936 new FilePropertiesDelegate());
1937 file_system->FindFileByPath(*iter, property_delegate);
1938 base::DictionaryValue* property_dict = new base::DictionaryValue;
1939 property_delegate->CopyProperties(property_dict);
1940 file_info->Append(property_dict);
1941 }
1942
1943 return true;
1944 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698