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

Side by Side Diff: chrome/browser/extensions/api/developer_private/developer_private_api.cc

Issue 13885007: Add API to load a unpacked project to developerPrivate. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 8 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/extensions/api/developer_private/developer_private_api. h" 5 #include "chrome/browser/extensions/api/developer_private/developer_private_api. h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 #include "webkit/fileapi/file_system_context.h" 49 #include "webkit/fileapi/file_system_context.h"
50 #include "webkit/fileapi/file_system_operation.h" 50 #include "webkit/fileapi/file_system_operation.h"
51 #include "webkit/fileapi/syncable/syncable_file_system_util.h" 51 #include "webkit/fileapi/syncable/syncable_file_system_util.h"
52 52
53 using content::RenderViewHost; 53 using content::RenderViewHost;
54 54
55 namespace extensions { 55 namespace extensions {
56 56
57 namespace { 57 namespace {
58 58
59 char kUnpackedAppsFolder[] = "apps_target";
60
59 ExtensionUpdater* GetExtensionUpdater(Profile* profile) { 61 ExtensionUpdater* GetExtensionUpdater(Profile* profile) {
60 return profile->GetExtensionService()->updater(); 62 return profile->GetExtensionService()->updater();
61 } 63 }
62 64
63 GURL ToDataURL(const base::FilePath& path) { 65 GURL ToDataURL(const base::FilePath& path) {
64 std::string contents; 66 std::string contents;
65 if (!file_util::ReadFileToString(path, &contents)) 67 if (!file_util::ReadFileToString(path, &contents))
66 return GURL(); 68 return GURL();
67 69
68 std::string contents_base64; 70 std::string contents_base64;
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 811
810 for (size_t i = 0; i < file_list.size(); ++i) { 812 for (size_t i = 0; i < file_list.size(); ++i) {
811 std::string origin_url( 813 std::string origin_url(
812 Extension::GetBaseURLFromExtensionId(extension_id()).spec()); 814 Extension::GetBaseURLFromExtensionId(extension_id()).spec());
813 fileapi::FileSystemURL url(sync_file_system::CreateSyncableFileSystemURL( 815 fileapi::FileSystemURL url(sync_file_system::CreateSyncableFileSystemURL(
814 GURL(origin_url), 816 GURL(origin_url),
815 sync_file_system::DriveFileSyncService::kServiceName, 817 sync_file_system::DriveFileSyncService::kServiceName,
816 base::FilePath(file_list[i].name))); 818 base::FilePath(file_list[i].name)));
817 base::FilePath target_path(profile()->GetPath()); 819 base::FilePath target_path(profile()->GetPath());
818 target_path = 820 target_path =
819 target_path.Append(FILE_PATH_LITERAL("apps_target")); 821 target_path.Append(FILE_PATH_LITERAL(kUnpackedAppsFolder));
820 target_path = target_path.Append(project_name); 822 target_path = target_path.Append(project_name);
821 target_path = target_path.Append(file_list[i].name); 823 target_path = target_path.Append(file_list[i].name);
822 824
823 base::PlatformFileError error_code; 825 base::PlatformFileError error_code;
824 fileapi::FileSystemOperation* op = 826 fileapi::FileSystemOperation* op =
825 context_->CreateFileSystemOperation(url, &error_code); 827 context_->CreateFileSystemOperation(url, &error_code);
826 DCHECK(op); 828 DCHECK(op);
827 829
828 if (error_code != base::PLATFORM_FILE_OK) { 830 if (error_code != base::PLATFORM_FILE_OK) {
829 DLOG(ERROR) << "Error in copying files from sync filesystem."; 831 DLOG(ERROR) << "Error in copying files from sync filesystem.";
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 file_util::CopyFile(src_path, target_path); 872 file_util::CopyFile(src_path, target_path);
871 } 873 }
872 874
873 DeveloperPrivateExportSyncfsFolderToLocalfsFunction:: 875 DeveloperPrivateExportSyncfsFolderToLocalfsFunction::
874 DeveloperPrivateExportSyncfsFolderToLocalfsFunction() 876 DeveloperPrivateExportSyncfsFolderToLocalfsFunction()
875 {} 877 {}
876 878
877 DeveloperPrivateExportSyncfsFolderToLocalfsFunction:: 879 DeveloperPrivateExportSyncfsFolderToLocalfsFunction::
878 ~DeveloperPrivateExportSyncfsFolderToLocalfsFunction() {} 880 ~DeveloperPrivateExportSyncfsFolderToLocalfsFunction() {}
879 881
882 bool DeveloperPrivateLoadProjectToSyncfsFunction::RunImpl() {
883 // TODO(grv) : implement
884 return true;
885 }
886
887 DeveloperPrivateLoadProjectToSyncfsFunction::
888 DeveloperPrivateLoadProjectToSyncfsFunction() {}
889
890 DeveloperPrivateLoadProjectToSyncfsFunction::
891 ~DeveloperPrivateLoadProjectToSyncfsFunction() {}
892
893 bool DeveloperPrivateGetProjectsInfoFunction::RunImpl() {
894 content::BrowserThread::PostTask(content::BrowserThread::FILE, FROM_HERE,
895 base::Bind(&DeveloperPrivateGetProjectsInfoFunction::ReadFolder,
896 this));
897
898 // Released by ReadFolder
899 AddRef();
900 return true;
901 }
902
903 void DeveloperPrivateGetProjectsInfoFunction::ReadFolder() {
904 base::FilePath path(profile()->GetPath());
905 path = path.Append(FILE_PATH_LITERAL(kUnpackedAppsFolder));
906
907 file_util::FileEnumerator files(
908 path, false, file_util::FileEnumerator::DIRECTORIES);
909 ProjectInfoList info_list;
910 for (base::FilePath current_path = files.Next(); !current_path.empty();
911 current_path = files.Next()) {
912 scoped_ptr<developer::ProjectInfo> info(new developer::ProjectInfo());
913 info->name = current_path.BaseName().MaybeAsASCII();
914 info_list.push_back(
915 make_linked_ptr<developer::ProjectInfo>(info.release()));
916 }
917 results_ = developer::GetProjectsInfo::Results::Create(info_list);
918 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
919 base::Bind(&DeveloperPrivateGetProjectsInfoFunction::SendResponse,
920 this,
921 true));
922 Release();
923 }
924
925 DeveloperPrivateGetProjectsInfoFunction::
926 DeveloperPrivateGetProjectsInfoFunction() {}
927
928 DeveloperPrivateGetProjectsInfoFunction::
929 ~DeveloperPrivateGetProjectsInfoFunction() {}
930
931 bool DeveloperPrivateLoadProjectFunction::RunImpl() {
932 std::string project_name;
933 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &project_name));
934 base::FilePath path(profile()->GetPath());
935 path = path.Append(FILE_PATH_LITERAL(kUnpackedAppsFolder));
936 path = path.Append(project_name);
miket_OOO 2013/04/18 03:12:00 Please add a TODO to sanitize this value, and furt
Gaurav 2013/04/18 17:24:06 Done.
miket_OOO 2013/04/23 17:02:47 This didn't happen. What's going on?
Gaurav 2013/04/23 18:08:33 Added the checks for folder name validation (was t
937 ExtensionService* service = profile()->GetExtensionService();
938 UnpackedInstaller::Create(service)->Load(path);
939 SendResponse(true);
940 return true;
941 }
942
943 DeveloperPrivateLoadProjectFunction::DeveloperPrivateLoadProjectFunction() {}
944
945 DeveloperPrivateLoadProjectFunction::~DeveloperPrivateLoadProjectFunction() {}
946
880 bool DeveloperPrivateChoosePathFunction::RunImpl() { 947 bool DeveloperPrivateChoosePathFunction::RunImpl() {
881 948
882 scoped_ptr<developer::ChoosePath::Params> params( 949 scoped_ptr<developer::ChoosePath::Params> params(
883 developer::ChoosePath::Params::Create(*args_)); 950 developer::ChoosePath::Params::Create(*args_));
884 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL); 951 EXTENSION_FUNCTION_VALIDATE(params.get() != NULL);
885 952
886 ui::SelectFileDialog::Type type = ui::SelectFileDialog::SELECT_FOLDER; 953 ui::SelectFileDialog::Type type = ui::SelectFileDialog::SELECT_FOLDER;
887 ui::SelectFileDialog::FileTypeInfo info; 954 ui::SelectFileDialog::FileTypeInfo info;
888 if (params->select_type == developer::SELECT_TYPE_FILE) { 955 if (params->select_type == developer::SELECT_TYPE_FILE) {
889 type = ui::SelectFileDialog::SELECT_OPEN_FILE; 956 type = ui::SelectFileDialog::SELECT_OPEN_FILE;
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 1076
1010 #undef SET_STRING 1077 #undef SET_STRING
1011 return true; 1078 return true;
1012 } 1079 }
1013 1080
1014 DeveloperPrivateGetStringsFunction::~DeveloperPrivateGetStringsFunction() {} 1081 DeveloperPrivateGetStringsFunction::~DeveloperPrivateGetStringsFunction() {}
1015 1082
1016 } // namespace api 1083 } // namespace api
1017 1084
1018 } // namespace extensions 1085 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698