| 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 52aa1b88a57fc79a9d2e9ed1e71c07f1ea9f2f0a..1a4976727e0ca047dc45bbb933dd0bd6bf3bc5bc 100644
|
| --- a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
|
| +++ b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
|
| @@ -5,59 +5,41 @@
|
| #include "chrome/browser/extensions/api/webstore_private/webstore_private_api.h"
|
|
|
| #include "base/bind_helpers.h"
|
| -#include "base/command_line.h"
|
| #include "base/lazy_instance.h"
|
| #include "base/memory/scoped_vector.h"
|
| #include "base/metrics/histogram.h"
|
| #include "base/prefs/pref_service.h"
|
| -#include "base/strings/string_util.h"
|
| #include "base/strings/stringprintf.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| #include "base/values.h"
|
| #include "base/version.h"
|
| -#include "chrome/browser/about_flags.h"
|
| #include "chrome/browser/apps/ephemeral_app_launcher.h"
|
| -#include "chrome/browser/browser_process.h"
|
| -#include "chrome/browser/chrome_notification_types.h"
|
| #include "chrome/browser/extensions/crx_installer.h"
|
| #include "chrome/browser/extensions/extension_install_ui_util.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| #include "chrome/browser/extensions/install_tracker.h"
|
| -#include "chrome/browser/extensions/webstore_installer.h"
|
| #include "chrome/browser/gpu/gpu_feature_checker.h"
|
| -#include "chrome/browser/profiles/profile_manager.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/signin/signin_manager_factory.h"
|
| -#include "chrome/browser/sync/profile_sync_service.h"
|
| -#include "chrome/browser/sync/profile_sync_service_factory.h"
|
| #include "chrome/browser/ui/app_list/app_list_service.h"
|
| #include "chrome/browser/ui/app_list/app_list_util.h"
|
| #include "chrome/common/extensions/extension_constants.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "components/crx_file/id_util.h"
|
| #include "components/signin/core/browser/signin_manager.h"
|
| -#include "content/public/browser/gpu_data_manager.h"
|
| -#include "content/public/browser/notification_details.h"
|
| -#include "content/public/browser/notification_source.h"
|
| #include "content/public/browser/web_contents.h"
|
| -#include "extensions/browser/extension_function_dispatcher.h"
|
| -#include "extensions/browser/extension_prefs.h"
|
| #include "extensions/browser/extension_registry.h"
|
| #include "extensions/browser/extension_system.h"
|
| #include "extensions/browser/extension_util.h"
|
| -#include "extensions/common/error_utils.h"
|
| #include "extensions/common/extension.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -
|
| -using content::GpuDataManager;
|
|
|
| namespace extensions {
|
|
|
| namespace BeginInstallWithManifest3 =
|
| api::webstore_private::BeginInstallWithManifest3;
|
| -namespace GetEphemeralAppsEnabled =
|
| - api::webstore_private::GetEphemeralAppsEnabled;
|
| namespace CompleteInstall = api::webstore_private::CompleteInstall;
|
| namespace GetBrowserLogin = api::webstore_private::GetBrowserLogin;
|
| +namespace GetEphemeralAppsEnabled =
|
| + api::webstore_private::GetEphemeralAppsEnabled;
|
| namespace GetIsLauncherEnabled = api::webstore_private::GetIsLauncherEnabled;
|
| namespace GetStoreLogin = api::webstore_private::GetStoreLogin;
|
| namespace GetWebGLStatus = api::webstore_private::GetWebGLStatus;
|
| @@ -165,27 +147,24 @@ WebstorePrivateApi::PopApprovalForTesting(
|
| }
|
|
|
| WebstorePrivateBeginInstallWithManifest3Function::
|
| - WebstorePrivateBeginInstallWithManifest3Function() {
|
| + WebstorePrivateBeginInstallWithManifest3Function() : chrome_details_(this) {
|
| }
|
|
|
| WebstorePrivateBeginInstallWithManifest3Function::
|
| ~WebstorePrivateBeginInstallWithManifest3Function() {
|
| }
|
|
|
| -bool WebstorePrivateBeginInstallWithManifest3Function::RunAsync() {
|
| +ExtensionFunction::ResponseAction
|
| +WebstorePrivateBeginInstallWithManifest3Function::Run() {
|
| params_ = BeginInstallWithManifest3::Params::Create(*args_);
|
| EXTENSION_FUNCTION_VALIDATE(params_);
|
|
|
| - if (!crx_file::id_util::IdIsValid(params_->details.id)) {
|
| - SetResultCode(INVALID_ID);
|
| - error_ = kInvalidIdError;
|
| - return false;
|
| - }
|
| + if (!crx_file::id_util::IdIsValid(params_->details.id))
|
| + return RespondNow(BuildResponseForError(INVALID_ID, kInvalidIdError));
|
|
|
| if (params_->details.icon_data && params_->details.icon_url) {
|
| - SetResultCode(ICON_ERROR);
|
| - error_ = kCannotSpecifyIconDataAndUrlError;
|
| - return false;
|
| + return RespondNow(BuildResponseForError(ICON_ERROR,
|
| + kCannotSpecifyIconDataAndUrlError));
|
| }
|
|
|
| GURL icon_url;
|
| @@ -193,9 +172,8 @@ bool WebstorePrivateBeginInstallWithManifest3Function::RunAsync() {
|
| std::string tmp_url;
|
| icon_url = source_url().Resolve(*params_->details.icon_url);
|
| if (!icon_url.is_valid()) {
|
| - SetResultCode(INVALID_ICON_URL);
|
| - error_ = kInvalidIconUrlError;
|
| - return false;
|
| + return RespondNow(BuildResponseForError(INVALID_ICON_URL,
|
| + kInvalidIconUrlError));
|
| }
|
| }
|
|
|
| @@ -206,21 +184,20 @@ bool WebstorePrivateBeginInstallWithManifest3Function::RunAsync() {
|
| std::string icon_data = params_->details.icon_data ?
|
| *params_->details.icon_data : std::string();
|
|
|
| - Profile* profile = GetProfile();
|
| - InstallTracker* tracker = InstallTracker::Get(profile);
|
| + InstallTracker* tracker = InstallTracker::Get(browser_context());
|
| DCHECK(tracker);
|
| - if (util::IsExtensionInstalledPermanently(params_->details.id, profile) ||
|
| + if (util::IsExtensionInstalledPermanently(params_->details.id,
|
| + browser_context()) ||
|
| tracker->GetActiveInstall(params_->details.id)) {
|
| - SetResultCode(ALREADY_INSTALLED);
|
| - error_ = kAlreadyInstalledError;
|
| - return false;
|
| + return RespondNow(BuildResponseForError(ALREADY_INSTALLED,
|
| + kAlreadyInstalledError));
|
| }
|
| ActiveInstallData install_data(params_->details.id);
|
| scoped_active_install_.reset(new ScopedActiveInstall(tracker, install_data));
|
|
|
| net::URLRequestContextGetter* context_getter = NULL;
|
| if (!icon_url.is_empty())
|
| - context_getter = GetProfile()->GetRequestContext();
|
| + context_getter = browser_context()->GetRequestContext();
|
|
|
| scoped_refptr<WebstoreInstallHelper> helper = new WebstoreInstallHelper(
|
| this, params_->details.id, params_->details.manifest, icon_data, icon_url,
|
| @@ -235,39 +212,7 @@ bool WebstorePrivateBeginInstallWithManifest3Function::RunAsync() {
|
|
|
| // The response is sent asynchronously in OnWebstoreParseSuccess/
|
| // OnWebstoreParseFailure.
|
| - return true;
|
| -}
|
| -
|
| -const char* WebstorePrivateBeginInstallWithManifest3Function::
|
| - ResultCodeToString(ResultCode code) {
|
| - switch (code) {
|
| - case ERROR_NONE:
|
| - return "";
|
| - case UNKNOWN_ERROR:
|
| - return "unknown_error";
|
| - case USER_CANCELLED:
|
| - return "user_cancelled";
|
| - case MANIFEST_ERROR:
|
| - return "manifest_error";
|
| - case ICON_ERROR:
|
| - return "icon_error";
|
| - case INVALID_ID:
|
| - return "invalid_id";
|
| - case PERMISSION_DENIED:
|
| - return "permission_denied";
|
| - case INVALID_ICON_URL:
|
| - return "invalid_icon_url";
|
| - case ALREADY_INSTALLED:
|
| - return "already_installed";
|
| - }
|
| - NOTREACHED();
|
| - return "";
|
| -}
|
| -
|
| -void WebstorePrivateBeginInstallWithManifest3Function::SetResultCode(
|
| - ResultCode code) {
|
| - results_ = BeginInstallWithManifest3::Results::Create(
|
| - ResultCodeToString(code));
|
| + return RespondLater();
|
| }
|
|
|
| void WebstorePrivateBeginInstallWithManifest3Function::OnWebstoreParseSuccess(
|
| @@ -317,23 +262,22 @@ void WebstorePrivateBeginInstallWithManifest3Function::OnWebstoreParseFailure(
|
| CHECK_EQ(params_->details.id, id);
|
|
|
| // Map from WebstoreInstallHelper's result codes to ours.
|
| + ResultCode code = ERROR_NONE;
|
| switch (result_code) {
|
| case WebstoreInstallHelper::Delegate::UNKNOWN_ERROR:
|
| - SetResultCode(UNKNOWN_ERROR);
|
| + code = UNKNOWN_ERROR;
|
| break;
|
| case WebstoreInstallHelper::Delegate::ICON_ERROR:
|
| - SetResultCode(ICON_ERROR);
|
| + code = ICON_ERROR;
|
| break;
|
| case WebstoreInstallHelper::Delegate::MANIFEST_ERROR:
|
| - SetResultCode(MANIFEST_ERROR);
|
| + code = MANIFEST_ERROR;
|
| break;
|
| - default:
|
| - CHECK(false);
|
| }
|
| - error_ = error_message;
|
| - SendResponse(false);
|
| + DCHECK_NE(code, ERROR_NONE);
|
| + Respond(BuildResponseForError(code, error_message));
|
|
|
| - // Matches the AddRef in RunAsync().
|
| + // Matches the AddRef in Run().
|
| Release();
|
| }
|
|
|
| @@ -343,7 +287,10 @@ void WebstorePrivateBeginInstallWithManifest3Function::InstallUIProceed() {
|
| // entry is only valid for some number of minutes.
|
| scoped_ptr<WebstoreInstaller::Approval> approval(
|
| WebstoreInstaller::Approval::CreateWithNoInstallPrompt(
|
| - GetProfile(), params_->details.id, parsed_manifest_.Pass(), false));
|
| + chrome_details_.GetProfile(),
|
| + params_->details.id,
|
| + parsed_manifest_.Pass(),
|
| + false));
|
| 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
|
| @@ -357,8 +304,7 @@ void WebstorePrivateBeginInstallWithManifest3Function::InstallUIProceed() {
|
| DCHECK(scoped_active_install_.get());
|
| scoped_active_install_->CancelDeregister();
|
|
|
| - SetResultCode(ERROR_NONE);
|
| - SendResponse(true);
|
| + Respond(BuildResponseForSuccess());
|
|
|
| // The Permissions_Install histogram is recorded from the ExtensionService
|
| // for all extension installs, so we only need to record the web store
|
| @@ -366,15 +312,13 @@ void WebstorePrivateBeginInstallWithManifest3Function::InstallUIProceed() {
|
| ExtensionService::RecordPermissionMessagesHistogram(
|
| dummy_extension_.get(), "Extensions.Permissions_WebStoreInstall2");
|
|
|
| - // Matches the AddRef in RunAsync().
|
| + // Matches the AddRef in Run().
|
| Release();
|
| }
|
|
|
| void WebstorePrivateBeginInstallWithManifest3Function::InstallUIAbort(
|
| bool user_initiated) {
|
| - error_ = kUserCancelledError;
|
| - SetResultCode(USER_CANCELLED);
|
| - SendResponse(false);
|
| + Respond(BuildResponseForError(USER_CANCELLED, kUserCancelledError));
|
|
|
| // The web store install histograms are a subset of the install histograms.
|
| // We need to record both histograms here since CrxInstaller::InstallUIAbort
|
| @@ -390,42 +334,81 @@ void WebstorePrivateBeginInstallWithManifest3Function::InstallUIAbort(
|
| ExtensionService::RecordPermissionMessagesHistogram(dummy_extension_.get(),
|
| histogram_name.c_str());
|
|
|
| - // Matches the AddRef in RunAsync().
|
| + // Matches the AddRef in Run().
|
| Release();
|
| }
|
|
|
| +const char* WebstorePrivateBeginInstallWithManifest3Function::
|
| + ResultCodeToString(ResultCode code) const {
|
| + switch (code) {
|
| + case ERROR_NONE:
|
| + return "";
|
| + case UNKNOWN_ERROR:
|
| + return "unknown_error";
|
| + case USER_CANCELLED:
|
| + return "user_cancelled";
|
| + case MANIFEST_ERROR:
|
| + return "manifest_error";
|
| + case ICON_ERROR:
|
| + return "icon_error";
|
| + case INVALID_ID:
|
| + return "invalid_id";
|
| + case PERMISSION_DENIED:
|
| + return "permission_denied";
|
| + case INVALID_ICON_URL:
|
| + return "invalid_icon_url";
|
| + case ALREADY_INSTALLED:
|
| + return "already_installed";
|
| + }
|
| + NOTREACHED();
|
| + return "";
|
| +}
|
| +
|
| +ExtensionFunction::ResponseValue
|
| +WebstorePrivateBeginInstallWithManifest3Function::BuildResponseForSuccess() {
|
| + return ArgumentList(
|
| + BeginInstallWithManifest3::Results::Create(
|
| + ResultCodeToString(ERROR_NONE)));
|
| +}
|
| +
|
| +ExtensionFunction::ResponseValue
|
| +WebstorePrivateBeginInstallWithManifest3Function::BuildResponseForError(
|
| + ResultCode code, const std::string& error) {
|
| + return ErrorWithArguments(
|
| + BeginInstallWithManifest3::Results::Create(ResultCodeToString(code)),
|
| + error);
|
| +}
|
| +
|
| WebstorePrivateCompleteInstallFunction::
|
| - WebstorePrivateCompleteInstallFunction() {}
|
| + WebstorePrivateCompleteInstallFunction() : chrome_details_(this) {}
|
|
|
| WebstorePrivateCompleteInstallFunction::
|
| ~WebstorePrivateCompleteInstallFunction() {}
|
|
|
| -bool WebstorePrivateCompleteInstallFunction::RunAsync() {
|
| +ExtensionFunction::ResponseAction
|
| +WebstorePrivateCompleteInstallFunction::Run() {
|
| scoped_ptr<CompleteInstall::Params> params(
|
| CompleteInstall::Params::Create(*args_));
|
| EXTENSION_FUNCTION_VALIDATE(params);
|
| - if (!crx_file::id_util::IdIsValid(params->expected_id)) {
|
| - error_ = kInvalidIdError;
|
| - return false;
|
| - }
|
| + if (!crx_file::id_util::IdIsValid(params->expected_id))
|
| + return RespondNow(Error(kInvalidIdError));
|
|
|
| - approval_ = g_pending_approvals.Get()
|
| - .PopApproval(GetProfile(), params->expected_id)
|
| - .Pass();
|
| + approval_ =
|
| + g_pending_approvals.Get().PopApproval(chrome_details_.GetProfile(),
|
| + params->expected_id).Pass();
|
| if (!approval_) {
|
| - error_ = ErrorUtils::FormatErrorMessage(
|
| - kNoPreviousBeginInstallWithManifestError, params->expected_id);
|
| - return false;
|
| + return RespondNow(Error(kNoPreviousBeginInstallWithManifestError,
|
| + params->expected_id));
|
| }
|
|
|
| scoped_active_install_.reset(new ScopedActiveInstall(
|
| - InstallTracker::Get(GetProfile()), params->expected_id));
|
| + InstallTracker::Get(browser_context()), params->expected_id));
|
|
|
| AppListService* app_list_service = AppListService::Get(
|
| GetHostDesktopTypeForWebContents(GetAssociatedWebContents()));
|
|
|
| if (approval_->enable_launcher) {
|
| - app_list_service->EnableAppList(GetProfile(),
|
| + app_list_service->EnableAppList(chrome_details_.GetProfile(),
|
| AppListService::ENABLE_FOR_APP_INSTALL);
|
| }
|
|
|
| @@ -433,26 +416,29 @@ bool WebstorePrivateCompleteInstallFunction::RunAsync() {
|
| // Show the app list to show download is progressing. Don't show the app
|
| // list on first app install so users can be trained to open it themselves.
|
| app_list_service->ShowForAppInstall(
|
| - GetProfile(), params->expected_id, approval_->enable_launcher);
|
| + chrome_details_.GetProfile(),
|
| + params->expected_id,
|
| + approval_->enable_launcher);
|
| }
|
|
|
| // If the target extension has already been installed ephemerally and is
|
| // up to date, it can be promoted to a regular installed extension and
|
| // downloading from the Web Store is not necessary.
|
| - const Extension* extension = ExtensionRegistry::Get(GetProfile())->
|
| + const Extension* extension = ExtensionRegistry::Get(browser_context())->
|
| GetExtensionById(params->expected_id, ExtensionRegistry::EVERYTHING);
|
| if (extension && approval_->dummy_extension.get() &&
|
| - util::IsEphemeralApp(extension->id(), GetProfile()) &&
|
| + util::IsEphemeralApp(extension->id(), browser_context()) &&
|
| extension->version()->CompareTo(*approval_->dummy_extension->version()) >=
|
| 0) {
|
| install_ui::ShowPostInstallUIForApproval(
|
| - GetProfile(), *approval_, extension);
|
| + browser_context(), *approval_, extension);
|
|
|
| ExtensionService* extension_service =
|
| - ExtensionSystem::Get(GetProfile())->extension_service();
|
| + ExtensionSystem::Get(browser_context())->extension_service();
|
| extension_service->PromoteEphemeralApp(extension, false);
|
| OnInstallSuccess(extension->id());
|
| - return true;
|
| + VLOG(1) << "Install success, sending response";
|
| + return RespondNow(NoArguments());
|
| }
|
|
|
| // Balanced in OnExtensionInstallSuccess() or OnExtensionInstallFailure().
|
| @@ -461,23 +447,26 @@ bool WebstorePrivateCompleteInstallFunction::RunAsync() {
|
| // The extension will install through the normal extension install flow, but
|
| // the whitelist entry will bypass the normal permissions install dialog.
|
| scoped_refptr<WebstoreInstaller> installer = new WebstoreInstaller(
|
| - GetProfile(),
|
| + chrome_details_.GetProfile(),
|
| this,
|
| - dispatcher()->delegate()->GetAssociatedWebContents(),
|
| + chrome_details_.GetAssociatedWebContents(),
|
| params->expected_id,
|
| approval_.Pass(),
|
| WebstoreInstaller::INSTALL_SOURCE_OTHER);
|
| installer->Start();
|
|
|
| - return true;
|
| + return RespondLater();
|
| }
|
|
|
| void WebstorePrivateCompleteInstallFunction::OnExtensionInstallSuccess(
|
| const std::string& id) {
|
| OnInstallSuccess(id);
|
| + VLOG(1) << "Install success, sending response";
|
| + Respond(NoArguments());
|
| +
|
| RecordWebstoreExtensionInstallResult(true);
|
|
|
| - // Matches the AddRef in RunAsync().
|
| + // Matches the AddRef in Run().
|
| Release();
|
| }
|
|
|
| @@ -490,13 +479,12 @@ void WebstorePrivateCompleteInstallFunction::OnExtensionInstallFailure(
|
| id, error, reason);
|
| }
|
|
|
| - error_ = error;
|
| VLOG(1) << "Install failed, sending response";
|
| - SendResponse(false);
|
| + Respond(Error(error));
|
|
|
| RecordWebstoreExtensionInstallResult(false);
|
|
|
| - // Matches the AddRef in RunAsync().
|
| + // Matches the AddRef in Run().
|
| Release();
|
| }
|
|
|
| @@ -504,102 +492,129 @@ void WebstorePrivateCompleteInstallFunction::OnInstallSuccess(
|
| const std::string& id) {
|
| if (test_webstore_installer_delegate)
|
| test_webstore_installer_delegate->OnExtensionInstallSuccess(id);
|
| -
|
| - VLOG(1) << "Install success, sending response";
|
| - SendResponse(true);
|
| }
|
|
|
| WebstorePrivateEnableAppLauncherFunction::
|
| - WebstorePrivateEnableAppLauncherFunction() {}
|
| + WebstorePrivateEnableAppLauncherFunction() : chrome_details_(this) {}
|
|
|
| WebstorePrivateEnableAppLauncherFunction::
|
| ~WebstorePrivateEnableAppLauncherFunction() {}
|
|
|
| -bool WebstorePrivateEnableAppLauncherFunction::RunSync() {
|
| +ExtensionFunction::ResponseAction
|
| +WebstorePrivateEnableAppLauncherFunction::Run() {
|
| AppListService* app_list_service = AppListService::Get(
|
| - GetHostDesktopTypeForWebContents(GetAssociatedWebContents()));
|
| - app_list_service->EnableAppList(GetProfile(),
|
| + GetHostDesktopTypeForWebContents(
|
| + chrome_details_.GetAssociatedWebContents()));
|
| + app_list_service->EnableAppList(chrome_details_.GetProfile(),
|
| AppListService::ENABLE_VIA_WEBSTORE_LINK);
|
| - return true;
|
| + return RespondNow(NoArguments());
|
| }
|
|
|
| -bool WebstorePrivateGetBrowserLoginFunction::RunSync() {
|
| +WebstorePrivateGetBrowserLoginFunction::
|
| + WebstorePrivateGetBrowserLoginFunction() : chrome_details_(this) {}
|
| +
|
| +WebstorePrivateGetBrowserLoginFunction::
|
| + ~WebstorePrivateGetBrowserLoginFunction() {}
|
| +
|
| +ExtensionFunction::ResponseAction
|
| +WebstorePrivateGetBrowserLoginFunction::Run() {
|
| GetBrowserLogin::Results::Info info;
|
| - info.login =
|
| - SigninManagerFactory::GetForProfile(GetProfile()->GetOriginalProfile())
|
| - ->GetAuthenticatedUsername();
|
| - results_ = GetBrowserLogin::Results::Create(info);
|
| - return true;
|
| + info.login = SigninManagerFactory::GetForProfile(
|
| + chrome_details_.GetProfile()->GetOriginalProfile())
|
| + ->GetAuthenticatedUsername();
|
| + return RespondNow(ArgumentList(GetBrowserLogin::Results::Create(info)));
|
| }
|
|
|
| -bool WebstorePrivateGetStoreLoginFunction::RunSync() {
|
| - results_ = GetStoreLogin::Results::Create(GetWebstoreLogin(GetProfile()));
|
| - return true;
|
| +WebstorePrivateGetStoreLoginFunction::
|
| + WebstorePrivateGetStoreLoginFunction() : chrome_details_(this) {}
|
| +
|
| +WebstorePrivateGetStoreLoginFunction::
|
| + ~WebstorePrivateGetStoreLoginFunction() {}
|
| +
|
| +ExtensionFunction::ResponseAction WebstorePrivateGetStoreLoginFunction::Run() {
|
| + return RespondNow(ArgumentList(GetStoreLogin::Results::Create(
|
| + GetWebstoreLogin(chrome_details_.GetProfile()))));
|
| }
|
|
|
| -bool WebstorePrivateSetStoreLoginFunction::RunSync() {
|
| +WebstorePrivateSetStoreLoginFunction::
|
| + WebstorePrivateSetStoreLoginFunction() : chrome_details_(this) {}
|
| +
|
| +WebstorePrivateSetStoreLoginFunction::
|
| + ~WebstorePrivateSetStoreLoginFunction() {}
|
| +
|
| +ExtensionFunction::ResponseAction WebstorePrivateSetStoreLoginFunction::Run() {
|
| scoped_ptr<SetStoreLogin::Params> params(
|
| SetStoreLogin::Params::Create(*args_));
|
| EXTENSION_FUNCTION_VALIDATE(params);
|
| - SetWebstoreLogin(GetProfile(), params->login);
|
| - return true;
|
| + SetWebstoreLogin(chrome_details_.GetProfile(), params->login);
|
| + return RespondNow(NoArguments());
|
| }
|
|
|
| -WebstorePrivateGetWebGLStatusFunction::WebstorePrivateGetWebGLStatusFunction() {
|
| - feature_checker_ = new GPUFeatureChecker(
|
| - gpu::GPU_FEATURE_TYPE_WEBGL,
|
| - base::Bind(&WebstorePrivateGetWebGLStatusFunction::OnFeatureCheck,
|
| - base::Unretained(this)));
|
| +WebstorePrivateGetWebGLStatusFunction::WebstorePrivateGetWebGLStatusFunction()
|
| + : feature_checker_(new GPUFeatureChecker(
|
| + gpu::GPU_FEATURE_TYPE_WEBGL,
|
| + base::Bind(&WebstorePrivateGetWebGLStatusFunction::OnFeatureCheck,
|
| + base::Unretained(this)))) {
|
| }
|
|
|
| WebstorePrivateGetWebGLStatusFunction::
|
| ~WebstorePrivateGetWebGLStatusFunction() {}
|
|
|
| -void WebstorePrivateGetWebGLStatusFunction::CreateResult(bool webgl_allowed) {
|
| - results_ = GetWebGLStatus::Results::Create(GetWebGLStatus::Results::
|
| - ParseWebgl_status(webgl_allowed ? "webgl_allowed" : "webgl_blocked"));
|
| -}
|
| -
|
| -bool WebstorePrivateGetWebGLStatusFunction::RunAsync() {
|
| +ExtensionFunction::ResponseAction WebstorePrivateGetWebGLStatusFunction::Run() {
|
| feature_checker_->CheckGPUFeatureAvailability();
|
| - return true;
|
| + return RespondLater();
|
| }
|
|
|
| -void WebstorePrivateGetWebGLStatusFunction::
|
| - OnFeatureCheck(bool feature_allowed) {
|
| - CreateResult(feature_allowed);
|
| - SendResponse(true);
|
| +void WebstorePrivateGetWebGLStatusFunction::OnFeatureCheck(
|
| + bool feature_allowed) {
|
| + Respond(ArgumentList(GetWebGLStatus::Results::Create(
|
| + GetWebGLStatus::Results::ParseWebgl_status(
|
| + feature_allowed ? "webgl_allowed" : "webgl_blocked"))));
|
| }
|
|
|
| -bool WebstorePrivateGetIsLauncherEnabledFunction::RunSync() {
|
| - results_ = GetIsLauncherEnabled::Results::Create(IsAppLauncherEnabled());
|
| - return true;
|
| +WebstorePrivateGetIsLauncherEnabledFunction::
|
| + WebstorePrivateGetIsLauncherEnabledFunction() {}
|
| +
|
| +WebstorePrivateGetIsLauncherEnabledFunction::
|
| + ~WebstorePrivateGetIsLauncherEnabledFunction() {}
|
| +
|
| +ExtensionFunction::ResponseAction
|
| +WebstorePrivateGetIsLauncherEnabledFunction::Run() {
|
| + return RespondNow(ArgumentList(
|
| + GetIsLauncherEnabled::Results::Create(IsAppLauncherEnabled())));
|
| }
|
|
|
| -bool WebstorePrivateIsInIncognitoModeFunction::RunSync() {
|
| - results_ = IsInIncognitoMode::Results::Create(
|
| - GetProfile() != GetProfile()->GetOriginalProfile());
|
| - return true;
|
| +WebstorePrivateIsInIncognitoModeFunction::
|
| + WebstorePrivateIsInIncognitoModeFunction() : chrome_details_(this) {}
|
| +
|
| +WebstorePrivateIsInIncognitoModeFunction::
|
| + ~WebstorePrivateIsInIncognitoModeFunction() {}
|
| +
|
| +ExtensionFunction::ResponseAction
|
| +WebstorePrivateIsInIncognitoModeFunction::Run() {
|
| + Profile* profile = chrome_details_.GetProfile();
|
| + return RespondNow(ArgumentList(IsInIncognitoMode::Results::Create(
|
| + profile != profile->GetOriginalProfile())));
|
| }
|
|
|
| WebstorePrivateLaunchEphemeralAppFunction::
|
| - WebstorePrivateLaunchEphemeralAppFunction() {}
|
| + WebstorePrivateLaunchEphemeralAppFunction() : chrome_details_(this) {}
|
|
|
| WebstorePrivateLaunchEphemeralAppFunction::
|
| ~WebstorePrivateLaunchEphemeralAppFunction() {}
|
|
|
| -bool WebstorePrivateLaunchEphemeralAppFunction::RunAsync() {
|
| +ExtensionFunction::ResponseAction
|
| +WebstorePrivateLaunchEphemeralAppFunction::Run() {
|
| // Check whether the browser window still exists.
|
| - content::WebContents* web_contents = GetAssociatedWebContents();
|
| - if (!web_contents) {
|
| - error_ = "aborted";
|
| - return false;
|
| - }
|
| + content::WebContents* web_contents =
|
| + chrome_details_.GetAssociatedWebContents();
|
| + if (!web_contents)
|
| + return RespondNow(Error("aborted"));
|
|
|
| if (!user_gesture()) {
|
| - SetResult(LaunchEphemeralAppResult::RESULT_USER_GESTURE_REQUIRED,
|
| - "User gesture is required");
|
| - return false;
|
| + return RespondNow(BuildResponse(
|
| + LaunchEphemeralAppResult::RESULT_USER_GESTURE_REQUIRED,
|
| + "User gesture is required"));
|
| }
|
|
|
| scoped_ptr<LaunchEphemeralApp::Params> params(
|
| @@ -616,7 +631,8 @@ bool WebstorePrivateLaunchEphemeralAppFunction::RunAsync() {
|
| &WebstorePrivateLaunchEphemeralAppFunction::OnLaunchComplete,
|
| base::Unretained(this)));
|
| launcher->Start();
|
| - return true;
|
| +
|
| + return RespondLater();
|
| }
|
|
|
| void WebstorePrivateLaunchEphemeralAppFunction::OnLaunchComplete(
|
| @@ -668,31 +684,30 @@ void WebstorePrivateLaunchEphemeralAppFunction::OnLaunchComplete(
|
| case webstore_install::LAUNCH_IN_PROGRESS:
|
| api_result = LaunchEphemeralAppResult::RESULT_LAUNCH_IN_PROGRESS;
|
| break;
|
| - default:
|
| - NOTREACHED();
|
| - break;
|
| }
|
|
|
| - SetResult(api_result, error);
|
| - Release(); // Matches AddRef() in RunAsync()
|
| + Respond(BuildResponse(api_result, error));
|
| + Release(); // Matches AddRef() in Run()
|
| }
|
|
|
| -void WebstorePrivateLaunchEphemeralAppFunction::SetResult(
|
| +ExtensionFunction::ResponseValue
|
| +WebstorePrivateLaunchEphemeralAppFunction::BuildResponse(
|
| LaunchEphemeralAppResult::Result result, const std::string& error) {
|
| if (result != LaunchEphemeralAppResult::RESULT_SUCCESS) {
|
| + std::string error_message;
|
| if (error.empty()) {
|
| - error_ = base::StringPrintf(
|
| + error_message = base::StringPrintf(
|
| "[%s]", LaunchEphemeralAppResult::ToString(result).c_str());
|
| } else {
|
| - error_ = base::StringPrintf(
|
| + error_message = base::StringPrintf(
|
| "[%s]: %s",
|
| LaunchEphemeralAppResult::ToString(result).c_str(),
|
| error.c_str());
|
| }
|
| + return ErrorWithArguments(LaunchEphemeralAppResult::Create(result),
|
| + error_message);
|
| }
|
| -
|
| - results_ = LaunchEphemeralAppResult::Create(result);
|
| - SendResponse(result == LaunchEphemeralAppResult::RESULT_SUCCESS);
|
| + return ArgumentList(LaunchEphemeralAppResult::Create(result));
|
| }
|
|
|
| WebstorePrivateGetEphemeralAppsEnabledFunction::
|
| @@ -701,10 +716,10 @@ WebstorePrivateGetEphemeralAppsEnabledFunction::
|
| WebstorePrivateGetEphemeralAppsEnabledFunction::
|
| ~WebstorePrivateGetEphemeralAppsEnabledFunction() {}
|
|
|
| -bool WebstorePrivateGetEphemeralAppsEnabledFunction::RunSync() {
|
| - results_ = GetEphemeralAppsEnabled::Results::Create(
|
| - EphemeralAppLauncher::IsFeatureEnabledInWebstore());
|
| - return true;
|
| +ExtensionFunction::ResponseAction
|
| +WebstorePrivateGetEphemeralAppsEnabledFunction::Run() {
|
| + return RespondNow(ArgumentList(GetEphemeralAppsEnabled::Results::Create(
|
| + EphemeralAppLauncher::IsFeatureEnabledInWebstore())));
|
| }
|
|
|
| } // namespace extensions
|
|
|