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

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

Issue 1008973002: [Extensions UI] Update extensions page to use api methods for permissions prompt (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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/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"
8 #include "apps/saved_files_service.h"
9 #include "base/base64.h" 7 #include "base/base64.h"
10 #include "base/bind.h" 8 #include "base/bind.h"
11 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
12 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
13 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
14 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
15 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
16 #include "chrome/browser/devtools/devtools_window.h" 14 #include "chrome/browser/devtools/devtools_window.h"
17 #include "chrome/browser/extensions/api/developer_private/developer_private_mang le.h" 15 #include "chrome/browser/extensions/api/developer_private/developer_private_mang le.h"
18 #include "chrome/browser/extensions/api/developer_private/entry_picker.h" 16 #include "chrome/browser/extensions/api/developer_private/entry_picker.h"
19 #include "chrome/browser/extensions/api/developer_private/extension_info_generat or.h" 17 #include "chrome/browser/extensions/api/developer_private/extension_info_generat or.h"
18 #include "chrome/browser/extensions/api/developer_private/show_permissions_dialo g_helper.h"
20 #include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h" 19 #include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h"
21 #include "chrome/browser/extensions/devtools_util.h" 20 #include "chrome/browser/extensions/devtools_util.h"
22 #include "chrome/browser/extensions/extension_service.h" 21 #include "chrome/browser/extensions/extension_service.h"
23 #include "chrome/browser/extensions/extension_ui_util.h" 22 #include "chrome/browser/extensions/extension_ui_util.h"
24 #include "chrome/browser/extensions/extension_util.h" 23 #include "chrome/browser/extensions/extension_util.h"
25 #include "chrome/browser/extensions/shared_module_service.h" 24 #include "chrome/browser/extensions/shared_module_service.h"
26 #include "chrome/browser/extensions/unpacked_installer.h" 25 #include "chrome/browser/extensions/unpacked_installer.h"
27 #include "chrome/browser/extensions/updater/extension_updater.h" 26 #include "chrome/browser/extensions/updater/extension_updater.h"
28 #include "chrome/browser/profiles/profile.h" 27 #include "chrome/browser/profiles/profile.h"
29 #include "chrome/browser/ui/browser_finder.h" 28 #include "chrome/browser/ui/browser_finder.h"
30 #include "chrome/browser/ui/tabs/tab_strip_model.h" 29 #include "chrome/browser/ui/tabs/tab_strip_model.h"
31 #include "chrome/common/extensions/api/developer_private.h" 30 #include "chrome/common/extensions/api/developer_private.h"
32 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" 31 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
33 #include "chrome/common/url_constants.h" 32 #include "chrome/common/url_constants.h"
34 #include "chrome/grit/generated_resources.h" 33 #include "chrome/grit/generated_resources.h"
35 #include "content/public/browser/browser_thread.h" 34 #include "content/public/browser/browser_thread.h"
36 #include "content/public/browser/notification_service.h" 35 #include "content/public/browser/notification_service.h"
37 #include "content/public/browser/render_process_host.h" 36 #include "content/public/browser/render_process_host.h"
38 #include "content/public/browser/render_view_host.h" 37 #include "content/public/browser/render_view_host.h"
39 #include "content/public/browser/site_instance.h" 38 #include "content/public/browser/site_instance.h"
40 #include "content/public/browser/storage_partition.h" 39 #include "content/public/browser/storage_partition.h"
41 #include "content/public/browser/web_contents.h" 40 #include "content/public/browser/web_contents.h"
42 #include "extensions/browser/api/device_permissions_manager.h"
43 #include "extensions/browser/app_window/app_window.h" 41 #include "extensions/browser/app_window/app_window.h"
44 #include "extensions/browser/app_window/app_window_registry.h" 42 #include "extensions/browser/app_window/app_window_registry.h"
45 #include "extensions/browser/extension_error.h" 43 #include "extensions/browser/extension_error.h"
46 #include "extensions/browser/extension_prefs.h" 44 #include "extensions/browser/extension_prefs.h"
47 #include "extensions/browser/extension_registry.h" 45 #include "extensions/browser/extension_registry.h"
48 #include "extensions/browser/extension_system.h" 46 #include "extensions/browser/extension_system.h"
49 #include "extensions/browser/file_highlighter.h" 47 #include "extensions/browser/file_highlighter.h"
50 #include "extensions/browser/management_policy.h" 48 #include "extensions/browser/management_policy.h"
51 #include "extensions/browser/notification_types.h" 49 #include "extensions/browser/notification_types.h"
52 #include "extensions/browser/warning_service.h" 50 #include "extensions/browser/warning_service.h"
(...skipping 28 matching lines...) Expand all
81 const char kRequiresUserGestureError[] = 79 const char kRequiresUserGestureError[] =
82 "This action requires a user gesture."; 80 "This action requires a user gesture.";
83 const char kCouldNotShowSelectFileDialogError[] = 81 const char kCouldNotShowSelectFileDialogError[] =
84 "Could not show a file chooser."; 82 "Could not show a file chooser.";
85 const char kFileSelectionCanceled[] = 83 const char kFileSelectionCanceled[] =
86 "File selection was canceled."; 84 "File selection was canceled.";
87 const char kNoSuchRendererError[] = "No such renderer."; 85 const char kNoSuchRendererError[] = "No such renderer.";
88 const char kInvalidPathError[] = "Invalid path."; 86 const char kInvalidPathError[] = "Invalid path.";
89 const char kManifestKeyIsRequiredError[] = 87 const char kManifestKeyIsRequiredError[] =
90 "The 'manifestKey' argument is required for manifest files."; 88 "The 'manifestKey' argument is required for manifest files.";
89 const char kCouldNotFindWebContentsError[] =
90 "Could not find a valid web contents.";
91 91
92 const char kUnpackedAppsFolder[] = "apps_target"; 92 const char kUnpackedAppsFolder[] = "apps_target";
93 const char kManifestFile[] = "manifest.json"; 93 const char kManifestFile[] = "manifest.json";
94 94
95 ExtensionService* GetExtensionService(content::BrowserContext* context) { 95 ExtensionService* GetExtensionService(content::BrowserContext* context) {
96 return ExtensionSystem::Get(context)->extension_service(); 96 return ExtensionSystem::Get(context)->extension_service();
97 } 97 }
98 98
99 ExtensionUpdater* GetExtensionUpdater(Profile* profile) { 99 ExtensionUpdater* GetExtensionUpdater(Profile* profile) {
100 return GetExtensionService(profile)->updater(); 100 return GetExtensionService(profile)->updater();
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 // Should this take into account policy settings? 533 // Should this take into account policy settings?
534 util::SetIsIncognitoEnabled( 534 util::SetIsIncognitoEnabled(
535 extension->id(), browser_context(), params->allow); 535 extension->id(), browser_context(), params->allow);
536 536
537 return RespondNow(NoArguments()); 537 return RespondNow(NoArguments());
538 } 538 }
539 539
540 DeveloperPrivateAllowIncognitoFunction:: 540 DeveloperPrivateAllowIncognitoFunction::
541 ~DeveloperPrivateAllowIncognitoFunction() {} 541 ~DeveloperPrivateAllowIncognitoFunction() {}
542 542
543 DeveloperPrivateReloadFunction::~DeveloperPrivateReloadFunction() {}
544
543 ExtensionFunction::ResponseAction DeveloperPrivateReloadFunction::Run() { 545 ExtensionFunction::ResponseAction DeveloperPrivateReloadFunction::Run() {
544 scoped_ptr<Reload::Params> params(Reload::Params::Create(*args_)); 546 scoped_ptr<Reload::Params> params(Reload::Params::Create(*args_));
545 EXTENSION_FUNCTION_VALIDATE(params.get()); 547 EXTENSION_FUNCTION_VALIDATE(params.get());
546 548
547 const Extension* extension = GetExtensionById(params->extension_id); 549 const Extension* extension = GetExtensionById(params->extension_id);
548 if (!extension) 550 if (!extension)
549 return RespondNow(Error(kNoSuchExtensionError)); 551 return RespondNow(Error(kNoSuchExtensionError));
550 552
551 bool fail_quietly = params->options && 553 bool fail_quietly = params->options &&
552 params->options->fail_quietly && 554 params->options->fail_quietly &&
553 *params->options->fail_quietly; 555 *params->options->fail_quietly;
554 556
555 ExtensionService* service = GetExtensionService(browser_context()); 557 ExtensionService* service = GetExtensionService(browser_context());
556 if (fail_quietly) 558 if (fail_quietly)
557 service->ReloadExtensionWithQuietFailure(params->extension_id); 559 service->ReloadExtensionWithQuietFailure(params->extension_id);
558 else 560 else
559 service->ReloadExtension(params->extension_id); 561 service->ReloadExtension(params->extension_id);
560 562
561 // TODO(devlin): We shouldn't return until the extension has finished trying 563 // TODO(devlin): We shouldn't return until the extension has finished trying
562 // to reload (and then we could also return the error). 564 // to reload (and then we could also return the error).
563 return RespondNow(NoArguments()); 565 return RespondNow(NoArguments());
564 } 566 }
565 567
566 bool DeveloperPrivateShowPermissionsDialogFunction::RunSync() { 568 DeveloperPrivateShowPermissionsDialogFunction::
567 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &extension_id_)); 569 DeveloperPrivateShowPermissionsDialogFunction() {}
568 CHECK(!extension_id_.empty());
569 AppWindowRegistry* registry = AppWindowRegistry::Get(GetProfile());
570 DCHECK(registry);
571 AppWindow* app_window =
572 registry->GetAppWindowForRenderViewHost(render_view_host());
573 prompt_.reset(new ExtensionInstallPrompt(app_window->web_contents()));
574 const Extension* extension =
575 ExtensionRegistry::Get(GetProfile())
576 ->GetExtensionById(extension_id_, ExtensionRegistry::EVERYTHING);
577 570
578 if (!extension) 571 DeveloperPrivateShowPermissionsDialogFunction::
579 return false; 572 ~DeveloperPrivateShowPermissionsDialogFunction() {}
580 573
581 // Released by InstallUIAbort or InstallUIProceed. 574 ExtensionFunction::ResponseAction
582 AddRef(); 575 DeveloperPrivateShowPermissionsDialogFunction::Run() {
583 std::vector<base::FilePath> retained_file_paths; 576 scoped_ptr<developer::ShowPermissionsDialog::Params> params(
584 if (extension->permissions_data()->HasAPIPermission( 577 developer::ShowPermissionsDialog::Params::Create(*args_));
585 APIPermission::kFileSystem)) { 578 EXTENSION_FUNCTION_VALIDATE(params);
586 std::vector<apps::SavedFileEntry> retained_file_entries = 579
587 apps::SavedFilesService::Get(GetProfile()) 580 const Extension* target_extension = GetExtensionById(params->extension_id);
588 ->GetAllFileEntries(extension_id_); 581 if (!target_extension)
589 for (size_t i = 0; i < retained_file_entries.size(); i++) { 582 return RespondNow(Error(kNoSuchExtensionError));
590 retained_file_paths.push_back(retained_file_entries[i].path); 583
591 } 584 content::WebContents* web_contents = GetSenderWebContents();
592 } 585 if (!web_contents)
593 std::vector<base::string16> retained_device_messages; 586 return RespondNow(Error(kCouldNotFindWebContentsError));
594 if (extension->permissions_data()->HasAPIPermission(APIPermission::kUsb)) { 587
595 retained_device_messages = 588 ShowPermissionsDialogHelper::Show(
596 extensions::DevicePermissionsManager::Get(GetProfile()) 589 browser_context(),
597 ->GetPermissionMessageStrings(extension_id_); 590 web_contents,
598 } 591 target_extension,
599 prompt_->ReviewPermissions( 592 source_context_type() == Feature::WEBUI_CONTEXT,
600 this, extension, retained_file_paths, retained_device_messages); 593 base::Bind(&DeveloperPrivateShowPermissionsDialogFunction::Finish, this));
601 return true; 594 return RespondLater();
602 } 595 }
603 596
604 DeveloperPrivateReloadFunction::~DeveloperPrivateReloadFunction() {} 597 void DeveloperPrivateShowPermissionsDialogFunction::Finish() {
605 598 Respond(NoArguments());
606 // This is called when the user clicks "Revoke File Access."
607 void DeveloperPrivateShowPermissionsDialogFunction::InstallUIProceed() {
608 Profile* profile = GetProfile();
609 extensions::DevicePermissionsManager::Get(profile)->Clear(extension_id_);
610 const Extension* extension = ExtensionRegistry::Get(
611 profile)->GetExtensionById(extension_id_, ExtensionRegistry::EVERYTHING);
612 apps::SavedFilesService::Get(profile)->ClearQueue(extension);
613 apps::AppLoadService::Get(profile)
614 ->RestartApplicationIfRunning(extension_id_);
615 SendResponse(true);
616 Release();
617 } 599 }
618 600
619 void DeveloperPrivateShowPermissionsDialogFunction::InstallUIAbort(
620 bool user_initiated) {
621 SendResponse(true);
622 Release();
623 }
624
625 DeveloperPrivateShowPermissionsDialogFunction::
626 DeveloperPrivateShowPermissionsDialogFunction() {}
627
628 DeveloperPrivateShowPermissionsDialogFunction::
629 ~DeveloperPrivateShowPermissionsDialogFunction() {}
630
631 ExtensionFunction::ResponseAction DeveloperPrivateInspectFunction::Run() { 601 ExtensionFunction::ResponseAction DeveloperPrivateInspectFunction::Run() {
632 scoped_ptr<developer::Inspect::Params> params( 602 scoped_ptr<developer::Inspect::Params> params(
633 developer::Inspect::Params::Create(*args_)); 603 developer::Inspect::Params::Create(*args_));
634 EXTENSION_FUNCTION_VALIDATE(params); 604 EXTENSION_FUNCTION_VALIDATE(params);
635 const developer::InspectOptions& options = params->options; 605 const developer::InspectOptions& options = params->options;
636 606
637 int render_process_id = 0; 607 int render_process_id = 0;
638 if (options.render_process_id.as_string && 608 if (options.render_process_id.as_string &&
639 !base::StringToInt(*options.render_process_id.as_string, 609 !base::StringToInt(*options.render_process_id.as_string,
640 &render_process_id)) { 610 &render_process_id)) {
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after
1255 1225
1256 TabStripModel* tab_strip = browser->tab_strip_model(); 1226 TabStripModel* tab_strip = browser->tab_strip_model();
1257 tab_strip->ActivateTabAt(tab_strip->GetIndexOfWebContents(web_contents), 1227 tab_strip->ActivateTabAt(tab_strip->GetIndexOfWebContents(web_contents),
1258 false); // Not through direct user gesture. 1228 false); // Not through direct user gesture.
1259 return RespondNow(NoArguments()); 1229 return RespondNow(NoArguments());
1260 } 1230 }
1261 1231
1262 } // namespace api 1232 } // namespace api
1263 1233
1264 } // namespace extensions 1234 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698