Index: chrome/browser/extensions/api/webstore_private/webstore_private_api.cc |
diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc |
index 565053ebb1dd39ee82b333bf4ad14ea6a5356161..d245bd7eb5b9c8d5453fca3917dd79bb3902a833 100644 |
--- a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc |
+++ b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc |
@@ -47,6 +47,17 @@ using content::GpuDataManager; |
namespace extensions { |
+namespace BeginInstallWithManifest3 = |
+ api::webstore_private::BeginInstallWithManifest3; |
+namespace CompleteInstall = api::webstore_private::CompleteInstall; |
+namespace GetBrowserLogin = api::webstore_private::GetBrowserLogin; |
+namespace GetIsLauncherEnabled = api::webstore_private::GetIsLauncherEnabled; |
+namespace GetStoreLogin = api::webstore_private::GetStoreLogin; |
+namespace GetWebGLStatus = api::webstore_private::GetWebGLStatus; |
+namespace InstallBundle = api::webstore_private::InstallBundle; |
+namespace IsInIncognitoMode = api::webstore_private::IsInIncognitoMode; |
+namespace SetStoreLogin = api::webstore_private::SetStoreLogin; |
+ |
namespace { |
// Holds the Approvals between the time we prompt and start the installs. |
@@ -142,15 +153,6 @@ static base::LazyInstance<PendingApprovals> g_pending_approvals = |
static base::LazyInstance<PendingInstalls> g_pending_installs = |
LAZY_INSTANCE_INITIALIZER; |
-const char kAppInstallBubbleKey[] = "appInstallBubble"; |
-const char kEnableLauncherKey[] = "enableLauncher"; |
-const char kIconDataKey[] = "iconData"; |
-const char kIconUrlKey[] = "iconUrl"; |
-const char kIdKey[] = "id"; |
-const char kLocalizedNameKey[] = "localizedName"; |
-const char kLoginKey[] = "login"; |
-const char kManifestKey[] = "manifest"; |
- |
// A preference set by the web store to indicate login information for |
// purchased apps. |
const char kWebstoreLogin[] = "extensions.webstore_login"; |
@@ -164,16 +166,6 @@ const char kNoPreviousBeginInstallWithManifestError[] = |
"* does not match a previous call to beginInstallWithManifest3"; |
const char kUserCancelledError[] = "User cancelled install"; |
-// Helper to create a dictionary with login properties set from the appropriate |
-// values in the passed-in |profile|. |
-base::DictionaryValue* CreateLoginResult(Profile* profile) { |
- base::DictionaryValue* dictionary = new base::DictionaryValue(); |
- std::string username = profile->GetPrefs()->GetString( |
- prefs::kGoogleServicesUsername); |
- dictionary->SetString(kLoginKey, username); |
- return dictionary; |
-} |
- |
WebstoreInstaller::Delegate* test_webstore_installer_delegate = NULL; |
// We allow the web store to set a string containing login information when a |
@@ -210,11 +202,12 @@ WebstorePrivateInstallBundleFunction::WebstorePrivateInstallBundleFunction() {} |
WebstorePrivateInstallBundleFunction::~WebstorePrivateInstallBundleFunction() {} |
bool WebstorePrivateInstallBundleFunction::RunImpl() { |
- base::ListValue* extensions = NULL; |
- EXTENSION_FUNCTION_VALIDATE(args_->GetList(0, &extensions)); |
+ scoped_ptr<InstallBundle::Params> params( |
+ InstallBundle::Params::Create(*args_)); |
+ EXTENSION_FUNCTION_VALIDATE(params); |
BundleInstaller::ItemList items; |
- if (!ReadBundleInfo(extensions, &items)) |
+ if (!ReadBundleInfo(*params, &items)) |
return false; |
bundle_ = new BundleInstaller(GetCurrentBrowser(), items); |
@@ -226,20 +219,13 @@ bool WebstorePrivateInstallBundleFunction::RunImpl() { |
} |
bool WebstorePrivateInstallBundleFunction:: |
- ReadBundleInfo(base::ListValue* extensions, |
+ ReadBundleInfo(const InstallBundle::Params& params, |
BundleInstaller::ItemList* items) { |
- for (size_t i = 0; i < extensions->GetSize(); ++i) { |
- base::DictionaryValue* details = NULL; |
- EXTENSION_FUNCTION_VALIDATE(extensions->GetDictionary(i, &details)); |
- |
+ for (size_t i = 0; i < params.details.size(); ++i) { |
BundleInstaller::Item item; |
- EXTENSION_FUNCTION_VALIDATE(details->GetString( |
- kIdKey, &item.id)); |
- EXTENSION_FUNCTION_VALIDATE(details->GetString( |
- kManifestKey, &item.manifest)); |
- EXTENSION_FUNCTION_VALIDATE(details->GetString( |
- kLocalizedNameKey, &item.localized_name)); |
- |
+ item.id = params.details[i]->id; |
+ item.manifest = params.details[i]->manifest; |
+ item.localized_name = params.details[i]->localized_name; |
items->push_back(item); |
} |
@@ -271,40 +257,31 @@ void WebstorePrivateInstallBundleFunction::OnBundleInstallCompleted() { |
} |
WebstorePrivateBeginInstallWithManifest3Function:: |
- WebstorePrivateBeginInstallWithManifest3Function() |
- : use_app_installed_bubble_(false), enable_launcher_(false) {} |
+ WebstorePrivateBeginInstallWithManifest3Function() {} |
WebstorePrivateBeginInstallWithManifest3Function:: |
~WebstorePrivateBeginInstallWithManifest3Function() {} |
bool WebstorePrivateBeginInstallWithManifest3Function::RunImpl() { |
- base::DictionaryValue* details = NULL; |
- EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &details)); |
- CHECK(details); |
+ params_ = BeginInstallWithManifest3::Params::Create(*args_); |
+ EXTENSION_FUNCTION_VALIDATE(params_); |
- EXTENSION_FUNCTION_VALIDATE(details->GetString(kIdKey, &id_)); |
- if (!extensions::Extension::IdIsValid(id_)) { |
+ if (!extensions::Extension::IdIsValid(params_->details.id)) { |
SetResultCode(INVALID_ID); |
error_ = kInvalidIdError; |
return false; |
} |
- EXTENSION_FUNCTION_VALIDATE(details->GetString(kManifestKey, &manifest_)); |
- |
- if (details->HasKey(kIconDataKey) && details->HasKey(kIconUrlKey)) { |
+ if (params_->details.icon_data && params_->details.icon_url) { |
SetResultCode(ICON_ERROR); |
error_ = kCannotSpecifyIconDataAndUrlError; |
return false; |
} |
- if (details->HasKey(kIconDataKey)) |
- EXTENSION_FUNCTION_VALIDATE(details->GetString(kIconDataKey, &icon_data_)); |
- |
GURL icon_url; |
- if (details->HasKey(kIconUrlKey)) { |
+ if (params_->details.icon_url) { |
std::string tmp_url; |
- EXTENSION_FUNCTION_VALIDATE(details->GetString(kIconUrlKey, &tmp_url)); |
- icon_url = source_url().Resolve(tmp_url); |
+ icon_url = source_url().Resolve(*params_->details.icon_url); |
if (!icon_url.is_valid()) { |
SetResultCode(INVALID_ICON_URL); |
error_ = kInvalidIconUrlError; |
@@ -312,22 +289,13 @@ bool WebstorePrivateBeginInstallWithManifest3Function::RunImpl() { |
} |
} |
- if (details->HasKey(kLocalizedNameKey)) |
- EXTENSION_FUNCTION_VALIDATE(details->GetString(kLocalizedNameKey, |
- &localized_name_)); |
- |
- if (details->HasKey(kAppInstallBubbleKey)) |
- EXTENSION_FUNCTION_VALIDATE(details->GetBoolean( |
- kAppInstallBubbleKey, &use_app_installed_bubble_)); |
- |
- if (details->HasKey(kEnableLauncherKey)) |
- EXTENSION_FUNCTION_VALIDATE(details->GetBoolean( |
- kEnableLauncherKey, &enable_launcher_)); |
+ std::string icon_data = params_->details.icon_data ? |
+ *params_->details.icon_data : std::string(); |
ExtensionService* service = |
extensions::ExtensionSystem::Get(profile_)->extension_service(); |
- if (service->GetInstalledExtension(id_) || |
- !g_pending_installs.Get().InsertInstall(profile_, id_)) { |
+ if (service->GetInstalledExtension(params_->details.id) || |
+ !g_pending_installs.Get().InsertInstall(profile_, params_->details.id)) { |
SetResultCode(ALREADY_INSTALLED); |
error_ = kAlreadyInstalledError; |
return false; |
@@ -338,7 +306,8 @@ bool WebstorePrivateBeginInstallWithManifest3Function::RunImpl() { |
context_getter = profile()->GetRequestContext(); |
scoped_refptr<WebstoreInstallHelper> helper = new WebstoreInstallHelper( |
- this, id_, manifest_, icon_data_, icon_url, context_getter); |
+ this, params_->details.id, params_->details.manifest, icon_data, icon_url, |
+ context_getter); |
// The helper will call us back via OnWebstoreParseSuccess or |
// OnWebstoreParseFailure. |
@@ -352,65 +321,63 @@ bool WebstorePrivateBeginInstallWithManifest3Function::RunImpl() { |
return true; |
} |
- |
-void WebstorePrivateBeginInstallWithManifest3Function::SetResultCode( |
- ResultCode code) { |
+const char* WebstorePrivateBeginInstallWithManifest3Function:: |
+ ResultCodeToString(ResultCode code) { |
switch (code) { |
case ERROR_NONE: |
- SetResult(new base::StringValue(std::string())); |
- break; |
+ return ""; |
case UNKNOWN_ERROR: |
- SetResult(new base::StringValue("unknown_error")); |
- break; |
+ return "unknown_error"; |
case USER_CANCELLED: |
- SetResult(new base::StringValue("user_cancelled")); |
- break; |
+ return "user_cancelled"; |
case MANIFEST_ERROR: |
- SetResult(new base::StringValue("manifest_error")); |
- break; |
+ return "manifest_error"; |
case ICON_ERROR: |
- SetResult(new base::StringValue("icon_error")); |
- break; |
+ return "icon_error"; |
case INVALID_ID: |
- SetResult(new base::StringValue("invalid_id")); |
- break; |
+ return "invalid_id"; |
case PERMISSION_DENIED: |
- SetResult(new base::StringValue("permission_denied")); |
- break; |
+ return "permission_denied"; |
case INVALID_ICON_URL: |
- SetResult(new base::StringValue("invalid_icon_url")); |
- break; |
+ return "invalid_icon_url"; |
case SIGNIN_FAILED: |
- SetResult(new base::StringValue("signin_failed")); |
- break; |
+ return "signin_failed"; |
case ALREADY_INSTALLED: |
- SetResult(new base::StringValue("already_installed")); |
- break; |
- default: |
- CHECK(false); |
+ return "already_installed"; |
} |
+ NOTREACHED(); |
+ return ""; |
+} |
+ |
+void WebstorePrivateBeginInstallWithManifest3Function::SetResultCode( |
+ ResultCode code) { |
+ results_ = BeginInstallWithManifest3::Results::Create( |
+ ResultCodeToString(code)); |
} |
void WebstorePrivateBeginInstallWithManifest3Function::OnWebstoreParseSuccess( |
const std::string& id, |
const SkBitmap& icon, |
base::DictionaryValue* parsed_manifest) { |
- CHECK_EQ(id_, id); |
+ CHECK_EQ(params_->details.id, id); |
CHECK(parsed_manifest); |
icon_ = icon; |
parsed_manifest_.reset(parsed_manifest); |
+ std::string localized_name = params_->details.localized_name ? |
+ *params_->details.localized_name : std::string(); |
+ |
std::string error; |
dummy_extension_ = ExtensionInstallPrompt::GetLocalizedExtensionForDisplay( |
parsed_manifest_.get(), |
Extension::FROM_WEBSTORE, |
id, |
- localized_name_, |
+ localized_name, |
std::string(), |
&error); |
if (!dummy_extension_.get()) { |
- OnWebstoreParseFailure(id_, |
+ OnWebstoreParseFailure(params_->details.id, |
WebstoreInstallHelper::Delegate::MANIFEST_ERROR, |
kInvalidManifestError); |
return; |
@@ -433,7 +400,7 @@ void WebstorePrivateBeginInstallWithManifest3Function::OnWebstoreParseFailure( |
const std::string& id, |
WebstoreInstallHelper::Delegate::InstallHelperResultCode result_code, |
const std::string& error_message) { |
- CHECK_EQ(id_, id); |
+ CHECK_EQ(params_->details.id, id); |
// Map from WebstoreInstallHelper's result codes to ours. |
switch (result_code) { |
@@ -463,7 +430,7 @@ void WebstorePrivateBeginInstallWithManifest3Function::SigninFailed( |
SetResultCode(SIGNIN_FAILED); |
error_ = error.ToString(); |
- g_pending_installs.Get().EraseInstall(profile_, id_); |
+ g_pending_installs.Get().EraseInstall(profile_, params_->details.id); |
SendResponse(false); |
// Matches the AddRef in RunImpl(). |
@@ -496,12 +463,12 @@ void WebstorePrivateBeginInstallWithManifest3Function::InstallUIProceed() { |
// entry is only valid for some number of minutes. |
scoped_ptr<WebstoreInstaller::Approval> approval( |
WebstoreInstaller::Approval::CreateWithNoInstallPrompt( |
- profile(), id_, parsed_manifest_.Pass())); |
- approval->use_app_installed_bubble = use_app_installed_bubble_; |
- approval->enable_launcher = enable_launcher_; |
+ profile(), params_->details.id, parsed_manifest_.Pass())); |
+ approval->use_app_installed_bubble = params_->details.app_install_bubble; |
+ approval->enable_launcher = params_->details.enable_launcher; |
// If we are enabling the launcher, we should not show the app list in order |
// to train the user to open it themselves at least once. |
- approval->skip_post_install_ui = enable_launcher_; |
+ approval->skip_post_install_ui = params_->details.enable_launcher; |
approval->installing_icon = gfx::ImageSkia::CreateFrom1xBitmap(icon_); |
g_pending_approvals.Get().PushApproval(approval.Pass()); |
@@ -522,7 +489,7 @@ void WebstorePrivateBeginInstallWithManifest3Function::InstallUIAbort( |
bool user_initiated) { |
error_ = kUserCancelledError; |
SetResultCode(USER_CANCELLED); |
- g_pending_installs.Get().EraseInstall(profile_, id_); |
+ g_pending_installs.Get().EraseInstall(profile_, params_->details.id); |
SendResponse(false); |
// The web store install histograms are a subset of the install histograms. |
@@ -551,17 +518,19 @@ WebstorePrivateCompleteInstallFunction:: |
~WebstorePrivateCompleteInstallFunction() {} |
bool WebstorePrivateCompleteInstallFunction::RunImpl() { |
- std::string id; |
- EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &id)); |
- if (!extensions::Extension::IdIsValid(id)) { |
+ scoped_ptr<CompleteInstall::Params> params( |
+ CompleteInstall::Params::Create(*args_)); |
+ EXTENSION_FUNCTION_VALIDATE(params); |
+ if (!extensions::Extension::IdIsValid(params->expected_id)) { |
error_ = kInvalidIdError; |
return false; |
} |
- approval_ = g_pending_approvals.Get().PopApproval(profile(), id).Pass(); |
+ approval_ = g_pending_approvals.Get().PopApproval(profile(), |
+ params->expected_id).Pass(); |
if (!approval_) { |
error_ = ErrorUtils::FormatErrorMessage( |
- kNoPreviousBeginInstallWithManifestError, id); |
+ kNoPreviousBeginInstallWithManifestError, params->expected_id); |
return false; |
} |
@@ -585,7 +554,7 @@ bool WebstorePrivateCompleteInstallFunction::RunImpl() { |
scoped_refptr<WebstoreInstaller> installer = new WebstoreInstaller( |
profile(), this, |
&(dispatcher()->delegate()->GetAssociatedWebContents()->GetController()), |
- id, approval_.Pass(), WebstoreInstaller::FLAG_NONE); |
+ params->expected_id, approval_.Pass(), WebstoreInstaller::FLAG_NONE); |
installer->Start(); |
return true; |
@@ -630,24 +599,27 @@ WebstorePrivateEnableAppLauncherFunction:: |
bool WebstorePrivateEnableAppLauncherFunction::RunImpl() { |
AppListService::Get()->EnableAppList(profile()); |
- SendResponse(true); |
return true; |
} |
bool WebstorePrivateGetBrowserLoginFunction::RunImpl() { |
- SetResult(CreateLoginResult(profile_->GetOriginalProfile())); |
+ GetBrowserLogin::Results::Info info; |
+ info.login = profile_->GetOriginalProfile()->GetPrefs()->GetString( |
+ prefs::kGoogleServicesUsername); |
+ results_ = GetBrowserLogin::Results::Create(info); |
return true; |
} |
bool WebstorePrivateGetStoreLoginFunction::RunImpl() { |
- SetResult(new base::StringValue(GetWebstoreLogin(profile_))); |
+ results_ = GetStoreLogin::Results::Create(GetWebstoreLogin(profile_)); |
return true; |
} |
bool WebstorePrivateSetStoreLoginFunction::RunImpl() { |
- std::string login; |
- EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &login)); |
- SetWebstoreLogin(profile_, login); |
+ scoped_ptr<SetStoreLogin::Params> params( |
+ SetStoreLogin::Params::Create(*args_)); |
+ EXTENSION_FUNCTION_VALIDATE(params); |
+ SetWebstoreLogin(profile_, params->login); |
return true; |
} |
@@ -662,8 +634,8 @@ WebstorePrivateGetWebGLStatusFunction:: |
~WebstorePrivateGetWebGLStatusFunction() {} |
void WebstorePrivateGetWebGLStatusFunction::CreateResult(bool webgl_allowed) { |
- SetResult(new base::StringValue( |
- webgl_allowed ? "webgl_allowed" : "webgl_blocked")); |
+ results_ = GetWebGLStatus::Results::Create(GetWebGLStatus::Results:: |
+ ParseWebgl_status(webgl_allowed ? "webgl_allowed" : "webgl_blocked")); |
} |
bool WebstorePrivateGetWebGLStatusFunction::RunImpl() { |
@@ -678,15 +650,14 @@ void WebstorePrivateGetWebGLStatusFunction:: |
} |
bool WebstorePrivateGetIsLauncherEnabledFunction::RunImpl() { |
- SetResult(new base::FundamentalValue(apps::IsAppLauncherEnabled())); |
- SendResponse(true); |
+ results_ = GetIsLauncherEnabled::Results::Create( |
+ apps::IsAppLauncherEnabled()); |
return true; |
} |
bool WebstorePrivateIsInIncognitoModeFunction::RunImpl() { |
- SetResult( |
- new base::FundamentalValue(profile_ != profile_->GetOriginalProfile())); |
- SendResponse(true); |
+ results_ = IsInIncognitoMode::Results::Create( |
+ profile_ != profile_->GetOriginalProfile()); |
return true; |
} |