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

Unified Diff: chrome/browser/extensions/extension_webstore_private_api.cc

Issue 8391004: Add webstorePrivate API for installing bundles of extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 2 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/extension_webstore_private_api.cc
diff --git a/chrome/browser/extensions/extension_webstore_private_api.cc b/chrome/browser/extensions/extension_webstore_private_api.cc
index 3e9a605cfaa4274808788940b089f9da654d5eee..ca763e37addf54fdf1392470f8a040a7f75e59eb 100644
--- a/chrome/browser/extensions/extension_webstore_private_api.cc
+++ b/chrome/browser/extensions/extension_webstore_private_api.cc
@@ -52,6 +52,8 @@ const char kInvalidManifestError[] = "Invalid manifest";
const char kNoPreviousBeginInstallWithManifestError[] =
"* does not match a previous call to beginInstallWithManifest3";
const char kUserCancelledError[] = "User cancelled install";
+const char kNoPermissionError[] =
+ "You do not have permission to use this method.";
ProfileSyncService* test_sync_service = NULL;
@@ -109,6 +111,92 @@ void WebstorePrivateApi::SetWebstoreInstallerDelegateForTesting(
test_webstore_installer_delegate = delegate;
}
+InstallBundleFunction::InstallBundleFunction() {}
+InstallBundleFunction::~InstallBundleFunction() {}
+
+bool InstallBundleFunction::RunImpl() {
+ if (!IsWebStoreURL(profile_, source_url())) {
+ SetResult(PERMISSION_DENIED);
+ return false;
+ }
+
+ ListValue* extensions = NULL;
+ EXTENSION_FUNCTION_VALIDATE(args_->GetList(0, &extensions));
+
+ WebstoreBundle::ItemList items;
+ if (!ReadBundleInfo(extensions, &items))
+ return false;
+
+ bundle_ = new WebstoreBundle(profile(), &items);
+
+ AddRef(); // Balanced in OnBundleInstallApproved and OnBundleInstallCanceled.
+
+ bundle_->PromptForApproval(this);
+ return true;
+}
+
+bool InstallBundleFunction::ReadBundleInfo(
+ ListValue* extensions, WebstoreBundle::ItemList* items) {
+ for (size_t i = 0; i < extensions->GetSize(); ++i) {
+ DictionaryValue* details = NULL;
+ EXTENSION_FUNCTION_VALIDATE(extensions->GetDictionary(i, &details));
+
+ std::string id;
+ EXTENSION_FUNCTION_VALIDATE(details->GetString(kIdKey, &id));
+
+ std::string manifest;
+ EXTENSION_FUNCTION_VALIDATE(details->GetString(kManifestKey, &manifest));
+
+ std::string localized_name;
+ EXTENSION_FUNCTION_VALIDATE(details->GetString(
+ kLocalizedNameKey, &localized_name));
+
+ // WebstoreBundle::Item ownership will be passed to WebstoreBundle.
+ items->push_back(new WebstoreBundle::Item(id, manifest, localized_name));
+ }
+
+ return true;
+}
+
+void InstallBundleFunction::OnBundleInstallApproved() {
+ bundle_->CompleteInstall(
+ &(dispatcher()->delegate()->GetAssociatedTabContents()->controller()),
+ this);
+}
+
+void InstallBundleFunction::OnBundleInstallCanceled(bool user_initiated) {
+ SetResult(user_initiated ? USER_CANCELLED : UNKNOWN_ERROR);
+ SendResponse(false);
+
+ Release(); // Balanced in RunImpl().
+}
+
+void InstallBundleFunction::OnBundleInstallCompleted() {
+ SetResult(ERROR_NONE);
+ SendResponse(true);
+
+ Release(); // Balanced in RunImpl().
+}
+
+void InstallBundleFunction::SetResult(ErrorCode code) {
+ switch (code) {
+ case ERROR_NONE:
+ result_.reset(Value::CreateStringValue(""));
+ break;
+ case UNKNOWN_ERROR:
+ result_.reset(Value::CreateStringValue("unknown_error"));
+ break;
+ case USER_CANCELLED:
+ result_.reset(Value::CreateStringValue("user_cancelled"));
+ break;
+ case PERMISSION_DENIED:
+ result_.reset(Value::CreateStringValue("permission_denied"));
+ break;
+ default:
+ CHECK(false);
+ }
+}
+
BeginInstallWithManifestFunction::BeginInstallWithManifestFunction()
: use_app_installed_bubble_(false) {}
« no previous file with comments | « chrome/browser/extensions/extension_webstore_private_api.h ('k') | chrome/browser/extensions/webstore_bundle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698