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

Unified Diff: chrome/browser/extensions/api/developer_private/show_permissions_dialog_helper.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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/developer_private/show_permissions_dialog_helper.cc
diff --git a/chrome/browser/extensions/api/developer_private/show_permissions_dialog_helper.cc b/chrome/browser/extensions/api/developer_private/show_permissions_dialog_helper.cc
new file mode 100644
index 0000000000000000000000000000000000000000..65d80897c0313c0b26a124fe89bd91f3a5cfa530
--- /dev/null
+++ b/chrome/browser/extensions/api/developer_private/show_permissions_dialog_helper.cc
@@ -0,0 +1,109 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/api/developer_private/show_permissions_dialog_helper.h"
+
+#include "apps/app_load_service.h"
+#include "apps/saved_files_service.h"
+#include "base/metrics/histogram.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/apps/app_info_dialog.h"
+#include "content/public/browser/web_contents.h"
+#include "extensions/browser/api/device_permissions_manager.h"
+#include "extensions/browser/extension_registry.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/permissions/permissions_data.h"
+
+namespace extensions {
+
+ShowPermissionsDialogHelper::ShowPermissionsDialogHelper(
+ Profile* profile,
+ const base::Closure& on_complete)
+ : profile_(profile),
+ on_complete_(on_complete) {
+}
+
+ShowPermissionsDialogHelper::~ShowPermissionsDialogHelper() {
+}
+
+// static
+void ShowPermissionsDialogHelper::Show(content::BrowserContext* browser_context,
+ content::WebContents* web_contents,
+ const Extension* extension,
+ bool from_webui,
+ const base::Closure& on_complete) {
+ Profile* profile = Profile::FromBrowserContext(browser_context);
+
+ // Show the new-style extensions dialog when it is available. It is currently
+ // unavailable by default on Mac.
+ if (CanShowAppInfoDialog()) {
+ if (from_webui) {
+ UMA_HISTOGRAM_ENUMERATION("Apps.AppInfoDialog.Launches",
+ AppInfoLaunchSource::FROM_EXTENSIONS_PAGE,
+ AppInfoLaunchSource::NUM_LAUNCH_SOURCES);
+ }
+
+ ShowAppInfoInNativeDialog(
+ web_contents->GetTopLevelNativeWindow(),
+ GetAppInfoNativeDialogSize(),
+ profile,
+ extension,
+ on_complete);
+
+ return; // All done.
+ }
+
+ // ShowPermissionsDialogHelper manages its own lifetime.
+ ShowPermissionsDialogHelper* helper =
+ new ShowPermissionsDialogHelper(profile, on_complete);
+ helper->ShowPermissionsDialog(web_contents, extension);
+}
+
+void ShowPermissionsDialogHelper::ShowPermissionsDialog(
+ content::WebContents* web_contents,
+ const Extension* extension) {
+ extension_id_ = extension->id();
+ prompt_.reset(new ExtensionInstallPrompt(web_contents));
+ std::vector<base::FilePath> retained_file_paths;
+ if (extension->permissions_data()->HasAPIPermission(
+ APIPermission::kFileSystem)) {
+ std::vector<apps::SavedFileEntry> retained_file_entries =
+ apps::SavedFilesService::Get(profile_)
+ ->GetAllFileEntries(extension_id_);
+ for (const apps::SavedFileEntry& entry : retained_file_entries)
+ retained_file_paths.push_back(entry.path);
+ }
+ std::vector<base::string16> retained_device_messages;
+ if (extension->permissions_data()->HasAPIPermission(APIPermission::kUsb)) {
+ retained_device_messages =
+ DevicePermissionsManager::Get(profile_)
+ ->GetPermissionMessageStrings(extension_id_);
+ }
+ prompt_->ReviewPermissions(
+ this, extension, retained_file_paths, retained_device_messages);
+}
+
+// This is called when the user clicks "Revoke File Access."
+void ShowPermissionsDialogHelper::InstallUIProceed() {
+ const Extension* extension =
+ ExtensionRegistry::Get(profile_)->GetExtensionById(
+ extension_id_, ExtensionRegistry::EVERYTHING);
+
+ if (extension)
+ apps::SavedFilesService::Get(profile_)->ClearQueue(extension);
+ apps::AppLoadService::Get(profile_)
+ ->RestartApplicationIfRunning(extension_id_);
+
+ on_complete_.Run();
+
+ delete this;
+}
+
+void ShowPermissionsDialogHelper::InstallUIAbort(bool user_initiated) {
+ on_complete_.Run();
+
+ delete this;
+}
+
+} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698