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

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

Issue 954943007: [Extensions] Make chrome://extensions use api functions for file access, reload (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 "apps/app_load_service.h" 7 #include "apps/app_load_service.h"
8 #include "apps/saved_files_service.h" 8 #include "apps/saved_files_service.h"
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 83
84 using content::RenderViewHost; 84 using content::RenderViewHost;
85 85
86 namespace extensions { 86 namespace extensions {
87 87
88 namespace developer_private = api::developer_private; 88 namespace developer_private = api::developer_private;
89 89
90 namespace { 90 namespace {
91 91
92 const char kNoSuchExtensionError[] = "No such extension."; 92 const char kNoSuchExtensionError[] = "No such extension.";
93 const char kCannotModifyPolicyExtensionError[] =
94 "Cannot modify the extension by policy.";
95 const char kRequiresUserGestureError[] =
96 "This action requires a user gesture.";
93 97
94 const char kUnpackedAppsFolder[] = "apps_target"; 98 const char kUnpackedAppsFolder[] = "apps_target";
95 99
96 ExtensionService* GetExtensionService(Profile* profile) { 100 ExtensionService* GetExtensionService(content::BrowserContext* context) {
97 return ExtensionSystem::Get(profile)->extension_service(); 101 return ExtensionSystem::Get(context)->extension_service();
98 } 102 }
99 103
100 ExtensionUpdater* GetExtensionUpdater(Profile* profile) { 104 ExtensionUpdater* GetExtensionUpdater(Profile* profile) {
101 return GetExtensionService(profile)->updater(); 105 return GetExtensionService(profile)->updater();
102 } 106 }
103 107
104 GURL GetImageURLFromData(const std::string& contents) { 108 GURL GetImageURLFromData(const std::string& contents) {
105 std::string contents_base64; 109 std::string contents_base64;
106 base::Base64Encode(contents, &contents_base64); 110 base::Base64Encode(contents, &contents_base64);
107 111
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 base::Bind(&DeveloperPrivateGetItemsInfoFunction::GetIconsOnFileThread, 668 base::Bind(&DeveloperPrivateGetItemsInfoFunction::GetIconsOnFileThread,
665 this, 669 this,
666 item_list, 670 item_list,
667 id_to_icon)); 671 id_to_icon));
668 672
669 return true; 673 return true;
670 } 674 }
671 675
672 DeveloperPrivateGetItemsInfoFunction::~DeveloperPrivateGetItemsInfoFunction() {} 676 DeveloperPrivateGetItemsInfoFunction::~DeveloperPrivateGetItemsInfoFunction() {}
673 677
674 bool DeveloperPrivateAllowFileAccessFunction::RunSync() { 678 ExtensionFunction::ResponseAction
679 DeveloperPrivateAllowFileAccessFunction::Run() {
675 scoped_ptr<AllowFileAccess::Params> params( 680 scoped_ptr<AllowFileAccess::Params> params(
676 AllowFileAccess::Params::Create(*args_)); 681 AllowFileAccess::Params::Create(*args_));
677 EXTENSION_FUNCTION_VALIDATE(params.get()); 682 EXTENSION_FUNCTION_VALIDATE(params.get());
678 683
679 EXTENSION_FUNCTION_VALIDATE(user_gesture_); 684 const Extension* extension =
685 ExtensionRegistry::Get(browser_context())
686 ->GetExtensionById(params->item_id, ExtensionRegistry::EVERYTHING);
680 687
681 ExtensionSystem* system = ExtensionSystem::Get(GetProfile()); 688 if (!extension)
682 ManagementPolicy* management_policy = system->management_policy(); 689 return RespondNow(Error(kNoSuchExtensionError));
683 const Extension* extension =
684 ExtensionRegistry::Get(GetProfile())
685 ->GetExtensionById(params->item_id, ExtensionRegistry::EVERYTHING);
686 bool result = true;
687 690
688 if (!extension) { 691 if (!user_gesture())
689 result = false; 692 return RespondNow(Error(kRequiresUserGestureError));
690 } else if (!management_policy->UserMayModifySettings(extension, NULL)) { 693
694 ManagementPolicy* management_policy =
695 ExtensionSystem::Get(browser_context())->management_policy();
696 if (!management_policy->UserMayModifySettings(extension, nullptr)) {
691 LOG(ERROR) << "Attempt to change allow file access of an extension that " 697 LOG(ERROR) << "Attempt to change allow file access of an extension that "
692 << "non-usermanagable was made. Extension id : " 698 << "non-usermanagable was made. Extension id : "
693 << extension->id(); 699 << extension->id();
694 result = false; 700 return RespondNow(Error(kCannotModifyPolicyExtensionError));
695 } else {
696 util::SetAllowFileAccess(extension->id(), GetProfile(), params->allow);
697 result = true;
698 } 701 }
699 702
700 return result; 703 util::SetAllowFileAccess(extension->id(), browser_context(), params->allow);
704 return RespondNow(NoArguments());
701 } 705 }
702 706
703 DeveloperPrivateAllowFileAccessFunction:: 707 DeveloperPrivateAllowFileAccessFunction::
704 ~DeveloperPrivateAllowFileAccessFunction() {} 708 ~DeveloperPrivateAllowFileAccessFunction() {}
705 709
706 ExtensionFunction::ResponseAction 710 ExtensionFunction::ResponseAction
707 DeveloperPrivateAllowIncognitoFunction::Run() { 711 DeveloperPrivateAllowIncognitoFunction::Run() {
708 scoped_ptr<AllowIncognito::Params> params( 712 scoped_ptr<AllowIncognito::Params> params(
709 AllowIncognito::Params::Create(*args_)); 713 AllowIncognito::Params::Create(*args_));
710 EXTENSION_FUNCTION_VALIDATE(params.get()); 714 EXTENSION_FUNCTION_VALIDATE(params.get());
711 715
712 const Extension* extension = 716 const Extension* extension =
713 ExtensionRegistry::Get(browser_context()) 717 ExtensionRegistry::Get(browser_context())
714 ->GetExtensionById(params->item_id, ExtensionRegistry::EVERYTHING); 718 ->GetExtensionById(params->item_id, ExtensionRegistry::EVERYTHING);
715 719
716 if (!extension) 720 if (!extension)
717 return RespondNow(Error(kNoSuchExtensionError)); 721 return RespondNow(Error(kNoSuchExtensionError));
718 722
723 if (!user_gesture())
not at google - send to devlin 2015/02/26 00:56:47 ... drive by I guess?
Devlin 2015/02/26 01:14:03 Yes. :)
724 return RespondNow(Error(kRequiresUserGestureError));
725
719 // Should this take into account policy settings? 726 // Should this take into account policy settings?
720 util::SetIsIncognitoEnabled( 727 util::SetIsIncognitoEnabled(
721 extension->id(), browser_context(), params->allow); 728 extension->id(), browser_context(), params->allow);
722 729
723 return RespondNow(NoArguments()); 730 return RespondNow(NoArguments());
724 } 731 }
725 732
726 DeveloperPrivateAllowIncognitoFunction:: 733 DeveloperPrivateAllowIncognitoFunction::
727 ~DeveloperPrivateAllowIncognitoFunction() {} 734 ~DeveloperPrivateAllowIncognitoFunction() {}
728 735
729 bool DeveloperPrivateReloadFunction::RunSync() { 736 ExtensionFunction::ResponseAction DeveloperPrivateReloadFunction::Run() {
730 scoped_ptr<Reload::Params> params(Reload::Params::Create(*args_)); 737 scoped_ptr<Reload::Params> params(Reload::Params::Create(*args_));
731 EXTENSION_FUNCTION_VALIDATE(params.get()); 738 EXTENSION_FUNCTION_VALIDATE(params.get());
732 739
733 CHECK(!params->item_id.empty()); 740 const Extension* extension =
734 ExtensionService* service = GetExtensionService(GetProfile()); 741 ExtensionRegistry::Get(browser_context())
735 service->ReloadExtension(params->item_id); 742 ->GetExtensionById(params->item_id, ExtensionRegistry::EVERYTHING);
not at google - send to devlin 2015/02/26 00:56:47 Can we pull this huge 3-line "get me installed ext
Devlin 2015/02/26 01:14:03 Was meaning to do that for awhile. Done.
736 return true; 743 if (!extension)
744 return RespondNow(Error(kNoSuchExtensionError));
745
746 // Default to failing "noisily".
not at google - send to devlin 2015/02/26 00:56:47 comment unnecssary
Devlin 2015/02/26 01:14:03 Done.
747 bool fail_quietly =
748 params->options.get() &&
749 params->options->fail_quietly.get() &&
750 *params->options->fail_quietly;
751
752 ExtensionService* service = GetExtensionService(browser_context());
753 if (fail_quietly)
754 service->ReloadExtensionWithQuietFailure(params->item_id);
755 else
756 service->ReloadExtension(params->item_id);
757
758 // TODO(devlin): We shouldn't return until the extension has finished trying
759 // to reload (and then we could also return the error).
760 return RespondNow(NoArguments());
737 } 761 }
738 762
739 bool DeveloperPrivateShowPermissionsDialogFunction::RunSync() { 763 bool DeveloperPrivateShowPermissionsDialogFunction::RunSync() {
740 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &extension_id_)); 764 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &extension_id_));
741 CHECK(!extension_id_.empty()); 765 CHECK(!extension_id_.empty());
742 AppWindowRegistry* registry = AppWindowRegistry::Get(GetProfile()); 766 AppWindowRegistry* registry = AppWindowRegistry::Get(GetProfile());
743 DCHECK(registry); 767 DCHECK(registry);
744 AppWindow* app_window = 768 AppWindow* app_window =
745 registry->GetAppWindowForRenderViewHost(render_view_host()); 769 registry->GetAppWindowForRenderViewHost(render_view_host());
746 prompt_.reset(new ExtensionInstallPrompt(app_window->web_contents())); 770 prompt_.reset(new ExtensionInstallPrompt(app_window->web_contents()));
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after
1398 } 1422 }
1399 1423
1400 error_ui_util::HandleOpenDevTools(dict); 1424 error_ui_util::HandleOpenDevTools(dict);
1401 1425
1402 return true; 1426 return true;
1403 } 1427 }
1404 1428
1405 } // namespace api 1429 } // namespace api
1406 1430
1407 } // namespace extensions 1431 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698