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

Unified Diff: chrome/browser/extensions/api/webstore_private/webstore_private_api.cc

Issue 885443010: WebstorePrivate extension API cleanup, part 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@testext_permission_prompt
Patch Set: remove dispatcher dependency Created 5 years, 10 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/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

Powered by Google App Engine
This is Rietveld 408576698