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

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

Issue 11794034: Adds functionality to pack an extension / app from the app. (Closed) Base URL: http://git.chromium.org/chromium/src.git@bacha_lo
Patch Set: Created 7 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 (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/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 return true; 578 return true;
579 } 579 }
580 580
581 DeveloperPrivateInspectFunction::~DeveloperPrivateInspectFunction() {} 581 DeveloperPrivateInspectFunction::~DeveloperPrivateInspectFunction() {}
582 582
583 bool DeveloperPrivateLoadUnpackedFunction::RunImpl() { 583 bool DeveloperPrivateLoadUnpackedFunction::RunImpl() {
584 string16 select_title = 584 string16 select_title =
585 l10n_util::GetStringUTF16(IDS_EXTENSION_LOAD_FROM_DIRECTORY); 585 l10n_util::GetStringUTF16(IDS_EXTENSION_LOAD_FROM_DIRECTORY);
586 586
587 const ui::SelectFileDialog::Type kSelectType = 587 const ui::SelectFileDialog::Type kSelectType =
588 ui::SelectFileDialog::SELECT_FOLDER; 588 ui::SelectFileDialog::SELECT_FOLDER;
miket_OOO 2013/01/09 18:52:41 This local constant definition doesn't really make
Gaurav 2013/01/12 01:08:26 Done.
589 const FilePath& last_unpacked_directory = 589 const FilePath& last_unpacked_directory =
590 DeveloperPrivateAPI::Get(profile())->getLastUnpackedDirectory(); 590 DeveloperPrivateAPI::Get(profile())->getLastUnpackedDirectory();
591 SetResult(Value::CreateBooleanValue(true)); 591 SetResult(Value::CreateBooleanValue(true));
592 return ShowPicker(kSelectType, last_unpacked_directory, select_title); 592 return
miket_OOO 2013/01/09 18:52:41 The newline after this return shouldn't be necessa
Gaurav 2013/01/12 01:08:26 Done.
593 ShowPicker(kSelectType,
594 last_unpacked_directory,
595 select_title,
596 ui::SelectFileDialog::FileTypeInfo(),
597 0);
593 } 598 }
594 599
595 bool DeveloperPrivateChooseEntryFunction::ShowPicker( 600 bool DeveloperPrivateChooseEntryFunction::ShowPicker(
asargent_no_longer_on_chrome 2013/01/09 00:48:05 nit: remove the extra space on this line between b
Gaurav 2013/01/12 01:08:26 Done.
596 ui::SelectFileDialog::Type picker_type, 601 ui::SelectFileDialog::Type picker_type,
597 const FilePath& last_directory, 602 const FilePath& last_directory,
598 const string16& select_title) { 603 const string16& select_title,
604 const ui::SelectFileDialog::FileTypeInfo& info,
605 int file_type_index) {
599 ShellWindowRegistry* registry = ShellWindowRegistry::Get(profile()); 606 ShellWindowRegistry* registry = ShellWindowRegistry::Get(profile());
600 DCHECK(registry); 607 DCHECK(registry);
601 ShellWindow* shell_window = registry->GetShellWindowForRenderViewHost( 608 ShellWindow* shell_window = registry->GetShellWindowForRenderViewHost(
602 render_view_host()); 609 render_view_host());
603 if (!shell_window) { 610 if (!shell_window) {
604 return false; 611 return false;
605 } 612 }
606 613
607 // The entry picker will hold a reference to this function instance, 614 // The entry picker will hold a reference to this function instance,
608 // preventing its destruction (and subsequent sending of the function 615 // preventing its destruction (and subsequent sending of the function
609 // response) until the user has selected a file or cancelled the picker. 616 // response) until the user has selected a file or cancelled the picker.
610 // At that point, the picker will delete itself, which will also free the 617 // At that point, the picker will delete itself, which will also free the
611 // function instance. 618 // function instance.
612 new EntryPicker(this, shell_window->web_contents(), picker_type, 619 new EntryPicker(this, shell_window->web_contents(), picker_type,
613 last_directory, select_title); 620 last_directory, select_title, info, file_type_index);
614 return true; 621 return true;
615 } 622 }
616 623
617 bool DeveloperPrivateChooseEntryFunction::RunImpl() { return false; } 624 bool DeveloperPrivateChooseEntryFunction::RunImpl() { return false; }
618 625
619 DeveloperPrivateChooseEntryFunction::~DeveloperPrivateChooseEntryFunction() {} 626 DeveloperPrivateChooseEntryFunction::~DeveloperPrivateChooseEntryFunction() {}
620 627
621 void DeveloperPrivateChooseEntryFunction::FileSelected(const FilePath& path) { 628 void DeveloperPrivateChooseEntryFunction::FileSelected(const FilePath& path) {
622 629
623 DeveloperPrivateAPI::Get(profile())->LoadUnpacked(path); 630 DeveloperPrivateAPI::Get(profile())->LoadUnpacked(path);
624 SendResponse(true); 631 SendResponse(true);
625 } 632 }
626 633
627 void DeveloperPrivateChooseEntryFunction::FileSelectionCanceled() { 634 void DeveloperPrivateChooseEntryFunction::FileSelectionCanceled() {
628 SendResponse(false); 635 SendResponse(false);
629 } 636 }
630 637
638
639 void DeveloperPrivatePackItemFunction::OnPackSuccess(
640 const FilePath& crx_file,
641 const FilePath& pem_file) {
642 std::string success_message(UTF16ToUTF8(
643 extensions::PackExtensionJob::StandardSuccessMessage(
644 crx_file, pem_file)));
miket_OOO 2013/01/09 18:52:41 Similar comment as earlier in this file: why creat
Gaurav 2013/01/12 01:08:26 Done.
645 developer::PackItemResponse response;
646 response.message = success_message;
647 response.status = developer::DEVELOPER_PRIVATE_PACK_STATUS_SUCCESS;
648 results_ = developer::PackItem::Results::Create(response);
649 SendResponse(true);
650 Release();
651 }
652
653 void DeveloperPrivatePackItemFunction::OnPackFailure(
654 const std::string& error,
655 extensions::ExtensionCreator::ErrorType error_type) {
656 developer::PackItemResponse response;
657 response.message = error;
658 if (error_type == extensions::ExtensionCreator::kCRXExists) {
659 response.item_path = item_path_str_;
660 response.pem_path = key_path_str_;
661 response.override_flags = extensions::ExtensionCreator::kOverwriteCRX;
662 response.status = developer::DEVELOPER_PRIVATE_PACK_STATUS_WARNING;
663 } else {
664 response.status = developer::DEVELOPER_PRIVATE_PACK_STATUS_ERROR;
665 }
666 results_ = developer::PackItem::Results::Create(response);
667 SendResponse(true);
668 Release();
669 }
670
671 bool DeveloperPrivatePackItemFunction::RunImpl() {
672 int flags;
673 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &item_path_str_));
674 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &key_path_str_));
675 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(2, &flags));
676
677 FilePath root_directory =
678 FilePath::FromWStringHack(UTF8ToWide(item_path_str_));
679
680 FilePath key_file =
681 FilePath::FromWStringHack(UTF8ToWide(key_path_str_));
682
683 developer::PackItemResponse response;
684 if (root_directory.empty()) {
685 if (item_path_str_.empty()) {
686 response.message = l10n_util::GetStringUTF8(
687 IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_REQUIRED);
688 } else {
689 response.message = l10n_util::GetStringUTF8(
miket_OOO 2013/01/09 18:52:41 These inner braces aren't needed.
Gaurav 2013/01/12 01:08:26 Done.
690 IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_INVALID);
691 }
692
693 response.status = developer::DEVELOPER_PRIVATE_PACK_STATUS_ERROR;
694 results_ = developer::PackItem::Results::Create(response);
695 SendResponse(true);
696 return true;
697 }
698
699 if (!key_path_str_.empty() && key_file.empty()) {
700 response.message = l10n_util::GetStringUTF8(
miket_OOO 2013/01/09 18:52:41 Did you mean to set response.status in this case?
Gaurav 2013/01/12 01:08:26 yes. Fixed now. On 2013/01/09 18:52:41, miket wrot
701 IDS_EXTENSION_PACK_DIALOG_ERROR_KEY_INVALID);
702 results_ = developer::PackItem::Results::Create(response);
703 SendResponse(true);
704 return true;
705 }
706
707 // Pack job will release the function instance.
708 AddRef();
709
710 pack_job_ = new extensions::PackExtensionJob(
711 this, root_directory, key_file, flags);
712 pack_job_->Start();
713 return true;
714 }
715
716 DeveloperPrivatePackItemFunction::DeveloperPrivatePackItemFunction() {}
717
718 DeveloperPrivatePackItemFunction::~DeveloperPrivatePackItemFunction() {}
719
631 DeveloperPrivateLoadUnpackedFunction::~DeveloperPrivateLoadUnpackedFunction() {} 720 DeveloperPrivateLoadUnpackedFunction::~DeveloperPrivateLoadUnpackedFunction() {}
632 721
722 bool DeveloperPrivateChooseItemFunction::RunImpl() {
723
724 std::string select_type;
725 std::string file_type;
726 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &select_type));
727 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &file_type));
728 ui::SelectFileDialog::Type type = ui::SelectFileDialog::SELECT_FOLDER;
729 ui::SelectFileDialog::FileTypeInfo info;
730 if (select_type == "file") {
731 type = ui::SelectFileDialog::SELECT_OPEN_FILE;
miket_OOO 2013/01/09 18:52:41 No braces
Gaurav 2013/01/12 01:08:26 Done.
732 }
733 string16 select_title;
734
735 int file_type_index = 0;
736 if (file_type == "load") {
737 select_title = l10n_util::GetStringUTF16(IDS_EXTENSION_LOAD_FROM_DIRECTORY);
738 } else if (file_type == "pem") {
739 select_title = l10n_util::GetStringUTF16(
740 IDS_EXTENSION_PACK_DIALOG_SELECT_KEY);
741 info.extensions.push_back(std::vector<FilePath::StringType>());
742 info.extensions.front().push_back(FILE_PATH_LITERAL("pem"));
743 info.extension_description_overrides.push_back(
744 l10n_util::GetStringUTF16(
745 IDS_EXTENSION_PACK_DIALOG_KEY_FILE_TYPE_DESCRIPTION));
746 info.include_all_files = true;
747 file_type_index = 1;
748 } else {
749 NOTREACHED();
750 }
751
752 const FilePath& last_unpacked_directory =
753 DeveloperPrivateAPI::Get(profile())->getLastUnpackedDirectory();
miket_OOO 2013/01/09 18:52:41 That's a weirdly capitalized method (probably not
Gaurav 2013/01/12 01:08:26 Done.
754 return
755 ShowPicker(type,
miket_OOO 2013/01/09 18:52:41 Don't wrap after the return.
Gaurav 2013/01/12 01:08:26 Done.
756 last_unpacked_directory,
757 select_title,
758 info,
759 file_type_index);
760 }
761
762 void DeveloperPrivateChooseItemFunction::FileSelected(const FilePath& path) {
763 std::string result(std::string(UTF16ToUTF8(path.LossyDisplayName())));
miket_OOO 2013/01/09 18:52:41 Similar to above (temp variable doesn't add anythi
Gaurav 2013/01/12 01:08:26 Done.
764 SetResult(base::Value::CreateStringValue(result));
765 SendResponse(true);
766 }
767
768 void DeveloperPrivateChooseItemFunction::FileSelectionCanceled() {
769 SendResponse(false);
770 }
771
772 DeveloperPrivateChooseItemFunction::~DeveloperPrivateChooseItemFunction() {}
773
633 bool DeveloperPrivateGetStringsFunction::RunImpl() { 774 bool DeveloperPrivateGetStringsFunction::RunImpl() {
634 DictionaryValue* dict = new DictionaryValue(); 775 DictionaryValue* dict = new DictionaryValue();
635 SetResult(dict); 776 SetResult(dict);
636 777
637 #define SET_STRING(id, idr) \ 778 #define SET_STRING(id, idr) \
638 dict->SetString(id, l10n_util::GetStringUTF16(idr)) 779 dict->SetString(id, l10n_util::GetStringUTF16(idr))
639 SET_STRING("extensionSettings", IDS_MANAGE_EXTENSIONS_SETTING_WINDOWS_TITLE); 780 SET_STRING("extensionSettings", IDS_MANAGE_EXTENSIONS_SETTING_WINDOWS_TITLE);
640 781
641 SET_STRING("extensionSettingsNoExtensions", IDS_EXTENSIONS_NONE_INSTALLED); 782 SET_STRING("extensionSettingsNoExtensions", IDS_EXTENSIONS_NONE_INSTALLED);
642 SET_STRING("extensionSettingsGetMoreExtensions", IDS_GET_MORE_EXTENSIONS); 783 SET_STRING("extensionSettingsGetMoreExtensions", IDS_GET_MORE_EXTENSIONS);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 837
697 #undef SET_STRING 838 #undef SET_STRING
698 return true; 839 return true;
699 } 840 }
700 841
701 DeveloperPrivateGetStringsFunction::~DeveloperPrivateGetStringsFunction() {} 842 DeveloperPrivateGetStringsFunction::~DeveloperPrivateGetStringsFunction() {}
702 843
703 } // namespace api 844 } // namespace api
704 845
705 } // namespace extensions 846 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698