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

Unified Diff: extensions/browser/api/runtime/runtime_api.cc

Issue 264743014: Move chrome.runtime to //extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: prevent runtime impl from handling invalid update versions Created 6 years, 7 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
« no previous file with comments | « extensions/browser/api/runtime/runtime_api.h ('k') | extensions/browser/api/runtime/runtime_api_delegate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/browser/api/runtime/runtime_api.cc
diff --git a/chrome/browser/extensions/api/runtime/runtime_api.cc b/extensions/browser/api/runtime/runtime_api.cc
similarity index 50%
rename from chrome/browser/extensions/api/runtime/runtime_api.cc
rename to extensions/browser/api/runtime/runtime_api.cc
index fbb35ed0d676627af9358e0aed455a08ffa6bc79..95f19a27e22eaa9eecfd371bb6aa79df850d4b74 100644
--- a/chrome/browser/extensions/api/runtime/runtime_api.cc
+++ b/extensions/browser/api/runtime/runtime_api.cc
@@ -2,7 +2,7 @@
// 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/runtime/runtime_api.h"
+#include "extensions/browser/api/runtime/runtime_api.h"
#include <utility>
@@ -11,48 +11,34 @@
#include "base/memory/scoped_ptr.h"
#include "base/metrics/histogram.h"
#include "base/values.h"
-#include "chrome/browser/browser_process.h"
+#include "base/version.h"
#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_warning_service.h"
-#include "chrome/browser/extensions/updater/extension_updater.h"
-#include "chrome/browser/omaha_query_params/omaha_query_params.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/browser_navigator.h"
-#include "chrome/browser/ui/browser_window.h"
-#include "chrome/common/extensions/api/runtime.h"
+#include "content/public/browser/browser_context.h"
#include "content/public/browser/child_process_security_policy.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
+#include "extensions/browser/api/runtime/runtime_api_delegate.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_host.h"
+#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/extensions_browser_client.h"
#include "extensions/browser/lazy_background_task_queue.h"
#include "extensions/browser/process_manager.h"
+#include "extensions/common/api/runtime.h"
#include "extensions/common/error_utils.h"
#include "extensions/common/extension.h"
#include "extensions/common/manifest_handlers/background_info.h"
#include "url/gurl.h"
#include "webkit/browser/fileapi/isolated_context.h"
-#if defined(OS_CHROMEOS)
-#include "chrome/browser/chromeos/login/user_manager.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/power_manager_client.h"
-#endif
-
using content::BrowserContext;
-namespace GetPlatformInfo = extensions::api::runtime::GetPlatformInfo;
-
namespace extensions {
-namespace runtime = api::runtime;
+namespace runtime = core_api::runtime;
namespace {
@@ -64,10 +50,9 @@ const char kInstallReasonUpdate[] = "update";
const char kInstallReasonInstall[] = "install";
const char kInstallPreviousVersion[] = "previousVersion";
const char kInvalidUrlError[] = "Invalid URL.";
+const char kPlatformInfoUnavailable[] = "Platform information unavailable.";
+
const char kUpdatesDisabledError[] = "Autoupdate is not enabled.";
-const char kUpdateFound[] = "update_available";
-const char kUpdateNotFound[] = "no_update";
-const char kUpdateThrottled[] = "throttled";
// A preference key storing the url loaded when an extension is uninstalled.
const char kUninstallUrl[] = "uninstall_url";
@@ -77,14 +62,6 @@ const char kUninstallUrl[] = "uninstall_url";
// with the equivalent Pepper API.
const char kPackageDirectoryPath[] = "crxfs";
-// If an extension reloads itself within this many miliseconds of reloading
-// itself, the reload is considered suspiciously fast.
-const int kFastReloadTime = 10000;
-
-// After this many suspiciously fast consecutive reloads, an extension will get
-// disabled.
-const int kFastReloadCount = 5;
-
void DispatchOnStartupEventImpl(BrowserContext* browser_context,
const std::string& extension_id,
bool first_call,
@@ -113,27 +90,27 @@ void DispatchOnStartupEventImpl(BrowserContext* browser_context,
extension_id);
if (extension && BackgroundInfo::HasPersistentBackgroundPage(extension) &&
first_call &&
- system->lazy_background_task_queue()->
- ShouldEnqueueTask(browser_context, extension)) {
+ system->lazy_background_task_queue()->ShouldEnqueueTask(browser_context,
+ extension)) {
system->lazy_background_task_queue()->AddPendingTask(
- browser_context, extension_id,
- base::Bind(&DispatchOnStartupEventImpl,
- browser_context, extension_id, false));
+ browser_context,
+ extension_id,
+ base::Bind(
+ &DispatchOnStartupEventImpl, browser_context, extension_id, false));
return;
}
scoped_ptr<base::ListValue> event_args(new base::ListValue());
- scoped_ptr<Event> event(new Event(runtime::OnStartup::kEventName,
- event_args.Pass()));
+ scoped_ptr<Event> event(
+ new Event(runtime::OnStartup::kEventName, event_args.Pass()));
system->event_router()->DispatchEventToExtension(extension_id, event.Pass());
}
void SetUninstallURL(ExtensionPrefs* prefs,
const std::string& extension_id,
const std::string& url_string) {
- prefs->UpdateExtensionPref(extension_id,
- kUninstallUrl,
- new base::StringValue(url_string));
+ prefs->UpdateExtensionPref(
+ extension_id, kUninstallUrl, new base::StringValue(url_string));
}
#if defined(ENABLE_EXTENSIONS)
@@ -158,19 +135,23 @@ BrowserContextKeyedAPIFactory<RuntimeAPI>* RuntimeAPI::GetFactoryInstance() {
}
RuntimeAPI::RuntimeAPI(content::BrowserContext* context)
- : browser_context_(context),
- dispatch_chrome_updated_event_(false),
- registered_for_updates_(false) {
- registrar_.Add(this, chrome::NOTIFICATION_EXTENSIONS_READY,
+ : browser_context_(context), dispatch_chrome_updated_event_(false) {
+ registrar_.Add(this,
+ chrome::NOTIFICATION_EXTENSIONS_READY,
content::Source<BrowserContext>(context));
registrar_.Add(this,
chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
content::Source<BrowserContext>(context));
- registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALLED,
+ registrar_.Add(this,
+ chrome::NOTIFICATION_EXTENSION_INSTALLED,
content::Source<BrowserContext>(context));
- registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
+ registrar_.Add(this,
+ chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
content::Source<BrowserContext>(context));
+ delegate_ = ExtensionsBrowserClient::Get()->CreateRuntimeAPIDelegate(
+ browser_context_);
+
// Check if registered events are up-to-date. We can only do this once
// per browser context, since it updates internal state when called.
dispatch_chrome_updated_event_ =
@@ -178,10 +159,7 @@ RuntimeAPI::RuntimeAPI(content::BrowserContext* context)
}
RuntimeAPI::~RuntimeAPI() {
- if (registered_for_updates_) {
- ExtensionSystem::Get(browser_context_)->
- extension_service()->RemoveUpdateObserver(this);
- }
+ delegate_->RemoveUpdateObserver(this);
}
void RuntimeAPI::Observe(int type,
@@ -220,16 +198,14 @@ void RuntimeAPI::OnExtensionsReady() {
// We're done restarting Chrome after an update.
dispatch_chrome_updated_event_ = false;
- registered_for_updates_ = true;
-
- ExtensionSystem* extension_system = ExtensionSystem::Get(browser_context_);
- extension_system->extension_service()->AddUpdateObserver(this);
+ delegate_->AddUpdateObserver(this);
// RuntimeAPI is redirected in incognito, so |browser_context_| is never
// incognito. We don't observe incognito ProcessManagers but that is OK
// because we don't send onStartup events to incognito browser contexts.
DCHECK(!browser_context_->IsOffTheRecord());
// Some tests use partially constructed Profiles without a process manager.
+ ExtensionSystem* extension_system = ExtensionSystem::Get(browser_context_);
if (extension_system->process_manager())
extension_system->process_manager()->AddObserver(this);
}
@@ -254,13 +230,7 @@ void RuntimeAPI::OnExtensionInstalled(const Extension* extension) {
if (extension->is_ephemeral())
return;
- // Get the previous version to check if this is an upgrade.
- ExtensionService* service = ExtensionSystem::Get(
- browser_context_)->extension_service();
- const Extension* old = service->GetExtensionById(extension->id(), true);
- Version old_version;
- if (old)
- old_version = *old->version();
+ Version old_version = delegate_->GetPreviousExtensionVersion(extension);
// Dispatch the onInstalled event.
base::MessageLoop::current()->PostTask(
@@ -270,7 +240,6 @@ void RuntimeAPI::OnExtensionInstalled(const Extension* extension) {
extension->id(),
old_version,
false));
-
}
void RuntimeAPI::OnExtensionUninstalled(const Extension* extension) {
@@ -279,8 +248,7 @@ void RuntimeAPI::OnExtensionUninstalled(const Extension* extension) {
if (extension->is_ephemeral())
return;
- Profile* profile = Profile::FromBrowserContext(browser_context_);
- RuntimeEventRouter::OnExtensionUninstalled(profile, extension->id());
+ RuntimeEventRouter::OnExtensionUninstalled(browser_context_, extension->id());
}
void RuntimeAPI::Shutdown() {
@@ -294,76 +262,46 @@ void RuntimeAPI::Shutdown() {
}
void RuntimeAPI::OnAppUpdateAvailable(const Extension* extension) {
- Profile* profile = Profile::FromBrowserContext(browser_context_);
RuntimeEventRouter::DispatchOnUpdateAvailableEvent(
- profile, extension->id(), extension->manifest()->value());
+ browser_context_, extension->id(), extension->manifest()->value());
}
void RuntimeAPI::OnChromeUpdateAvailable() {
- Profile* profile = Profile::FromBrowserContext(browser_context_);
- RuntimeEventRouter::DispatchOnBrowserUpdateAvailableEvent(profile);
+ RuntimeEventRouter::DispatchOnBrowserUpdateAvailableEvent(browser_context_);
}
void RuntimeAPI::OnBackgroundHostStartup(const Extension* extension) {
RuntimeEventRouter::DispatchOnStartupEvent(browser_context_, extension->id());
}
-void RuntimeAPI::MaybeReloadExtension(const std::string& extension_id) {
- std::pair<base::TimeTicks, int>& reload_info =
- last_reload_time_[extension_id];
- base::TimeTicks now = base::TimeTicks::Now();
- if (reload_info.first.is_null() ||
- (now - reload_info.first).InMilliseconds() > kFastReloadTime) {
- reload_info.second = 0;
- } else {
- reload_info.second++;
- }
- if (!reload_info.first.is_null()) {
- UMA_HISTOGRAM_LONG_TIMES("Extensions.RuntimeReloadTime",
- now - reload_info.first);
- }
- UMA_HISTOGRAM_COUNTS_100("Extensions.RuntimeReloadFastCount",
- reload_info.second);
- reload_info.first = now;
-
- ExtensionService* service =
- ExtensionSystem::Get(browser_context_)->extension_service();
- if (reload_info.second >= kFastReloadCount) {
- // Unloading an extension clears all warnings, so first terminate the
- // extension, and then add the warning. Since this is called from an
- // extension function unloading the extension has to be done
- // asynchronously. Fortunately PostTask guarentees FIFO order so just
- // post both tasks.
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&ExtensionService::TerminateExtension,
- service->AsWeakPtr(),
- extension_id));
- ExtensionWarningSet warnings;
- warnings.insert(
- ExtensionWarning::CreateReloadTooFrequentWarning(extension_id));
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&ExtensionWarningService::NotifyWarningsOnUI,
- browser_context_,
- warnings));
- } else {
- // We can't call ReloadExtension directly, since when this method finishes
- // it tries to decrease the reference count for the extension, which fails
- // if the extension has already been reloaded; so instead we post a task.
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&ExtensionService::ReloadExtension,
- service->AsWeakPtr(),
- extension_id));
- }
+void RuntimeAPI::ReloadExtension(const std::string& extension_id) {
+ delegate_->ReloadExtension(extension_id);
+}
+
+bool RuntimeAPI::CheckForUpdates(
+ const std::string& extension_id,
+ const RuntimeAPIDelegate::UpdateCheckCallback& callback) {
+ return delegate_->CheckForUpdates(extension_id, callback);
+}
+
+void RuntimeAPI::OpenURL(const GURL& update_url) {
+ delegate_->OpenURL(update_url);
+}
+
+bool RuntimeAPI::GetPlatformInfo(runtime::PlatformInfo* info) {
+ return delegate_->GetPlatformInfo(info);
+}
+
+bool RuntimeAPI::RestartDevice(std::string* error_message) {
+ return delegate_->RestartDevice(error_message);
}
///////////////////////////////////////////////////////////////////////////////
// static
void RuntimeEventRouter::DispatchOnStartupEvent(
- content::BrowserContext* context, const std::string& extension_id) {
+ content::BrowserContext* context,
+ const std::string& extension_id) {
DispatchOnStartupEventImpl(context, extension_id, true, NULL);
}
@@ -391,55 +329,55 @@ void RuntimeEventRouter::DispatchOnInstalledEvent(
info->SetString(kInstallReason, kInstallReasonInstall);
}
DCHECK(system->event_router());
- scoped_ptr<Event> event(new Event(runtime::OnInstalled::kEventName,
- event_args.Pass()));
+ scoped_ptr<Event> event(
+ new Event(runtime::OnInstalled::kEventName, event_args.Pass()));
system->event_router()->DispatchEventWithLazyListener(extension_id,
event.Pass());
}
// static
void RuntimeEventRouter::DispatchOnUpdateAvailableEvent(
- Profile* profile,
+ content::BrowserContext* context,
const std::string& extension_id,
const base::DictionaryValue* manifest) {
- ExtensionSystem* system = ExtensionSystem::Get(profile);
+ ExtensionSystem* system = ExtensionSystem::Get(context);
if (!system)
return;
scoped_ptr<base::ListValue> args(new base::ListValue);
args->Append(manifest->DeepCopy());
DCHECK(system->event_router());
- scoped_ptr<Event> event(new Event(runtime::OnUpdateAvailable::kEventName,
- args.Pass()));
+ scoped_ptr<Event> event(
+ new Event(runtime::OnUpdateAvailable::kEventName, args.Pass()));
system->event_router()->DispatchEventToExtension(extension_id, event.Pass());
}
// static
void RuntimeEventRouter::DispatchOnBrowserUpdateAvailableEvent(
- Profile* profile) {
- ExtensionSystem* system = ExtensionSystem::Get(profile);
+ content::BrowserContext* context) {
+ ExtensionSystem* system = ExtensionSystem::Get(context);
if (!system)
return;
scoped_ptr<base::ListValue> args(new base::ListValue);
DCHECK(system->event_router());
- scoped_ptr<Event> event(new Event(
- runtime::OnBrowserUpdateAvailable::kEventName, args.Pass()));
+ scoped_ptr<Event> event(
+ new Event(runtime::OnBrowserUpdateAvailable::kEventName, args.Pass()));
system->event_router()->BroadcastEvent(event.Pass());
}
// static
void RuntimeEventRouter::DispatchOnRestartRequiredEvent(
- Profile* profile,
+ content::BrowserContext* context,
const std::string& app_id,
- api::runtime::OnRestartRequired::Reason reason) {
- ExtensionSystem* system = ExtensionSystem::Get(profile);
+ core_api::runtime::OnRestartRequired::Reason reason) {
+ ExtensionSystem* system = ExtensionSystem::Get(context);
if (!system)
return;
scoped_ptr<Event> event(
new Event(runtime::OnRestartRequired::kEventName,
- api::runtime::OnRestartRequired::Create(reason)));
+ core_api::runtime::OnRestartRequired::Create(reason)));
DCHECK(system->event_router());
system->event_router()->DispatchEventToExtension(app_id, event.Pass());
@@ -447,214 +385,116 @@ void RuntimeEventRouter::DispatchOnRestartRequiredEvent(
// static
void RuntimeEventRouter::OnExtensionUninstalled(
- Profile* profile,
+ content::BrowserContext* context,
const std::string& extension_id) {
#if defined(ENABLE_EXTENSIONS)
- GURL uninstall_url(GetUninstallURL(ExtensionPrefs::Get(profile),
- extension_id));
+ GURL uninstall_url(
+ GetUninstallURL(ExtensionPrefs::Get(context), extension_id));
if (uninstall_url.is_empty())
return;
- Browser* browser = chrome::FindLastActiveWithProfile(profile,
- chrome::GetActiveDesktop());
- if (!browser)
- browser = new Browser(Browser::CreateParams(profile,
- chrome::GetActiveDesktop()));
-
- chrome::NavigateParams params(browser, uninstall_url,
- content::PAGE_TRANSITION_CLIENT_REDIRECT);
- params.disposition = NEW_FOREGROUND_TAB;
- params.user_gesture = false;
- chrome::Navigate(&params);
+ RuntimeAPI::GetFactoryInstance()->Get(context)->OpenURL(uninstall_url);
#endif // defined(ENABLE_EXTENSIONS)
}
-bool RuntimeGetBackgroundPageFunction::RunAsync() {
- ExtensionSystem* system = ExtensionSystem::Get(GetProfile());
- ExtensionHost* host = system->process_manager()->
- GetBackgroundHostForExtension(extension_id());
- if (system->lazy_background_task_queue()->ShouldEnqueueTask(GetProfile(),
+ExtensionFunction::ResponseAction RuntimeGetBackgroundPageFunction::Run() {
+ ExtensionSystem* system = ExtensionSystem::Get(browser_context());
+ ExtensionHost* host =
+ system->process_manager()->GetBackgroundHostForExtension(extension_id());
+ if (system->lazy_background_task_queue()->ShouldEnqueueTask(browser_context(),
GetExtension())) {
system->lazy_background_task_queue()->AddPendingTask(
- GetProfile(),
+ browser_context(),
extension_id(),
base::Bind(&RuntimeGetBackgroundPageFunction::OnPageLoaded, this));
} else if (host) {
OnPageLoaded(host);
} else {
- error_ = kNoBackgroundPageError;
- return false;
+ return RespondNow(Error(kNoBackgroundPageError));
}
- return true;
+ return RespondLater();
}
void RuntimeGetBackgroundPageFunction::OnPageLoaded(ExtensionHost* host) {
if (host) {
- SendResponse(true);
+ Respond(NoArguments());
} else {
- error_ = kPageLoadError;
- SendResponse(false);
+ Respond(Error(kPageLoadError));
}
}
-bool RuntimeSetUninstallURLFunction::RunSync() {
+ExtensionFunction::ResponseAction RuntimeSetUninstallURLFunction::Run() {
std::string url_string;
- EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &url_string));
+ EXTENSION_FUNCTION_VALIDATE_TYPESAFE(args_->GetString(0, &url_string));
GURL url(url_string);
if (!url.is_valid()) {
- error_ = ErrorUtils::FormatErrorMessage(kInvalidUrlError, url_string);
- return false;
+ return RespondNow(
+ Error(ErrorUtils::FormatErrorMessage(kInvalidUrlError, url_string)));
}
-
SetUninstallURL(
- ExtensionPrefs::Get(GetProfile()), extension_id(), url_string);
- return true;
+ ExtensionPrefs::Get(browser_context()), extension_id(), url_string);
+ return RespondNow(NoArguments());
}
-bool RuntimeReloadFunction::RunSync() {
- RuntimeAPI::GetFactoryInstance()->Get(GetProfile())->MaybeReloadExtension(
+ExtensionFunction::ResponseAction RuntimeReloadFunction::Run() {
+ RuntimeAPI::GetFactoryInstance()->Get(browser_context())->ReloadExtension(
extension_id());
- return true;
+ return RespondNow(NoArguments());
}
-RuntimeRequestUpdateCheckFunction::RuntimeRequestUpdateCheckFunction() {
- registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UPDATE_FOUND,
- content::NotificationService::AllSources());
-}
-
-bool RuntimeRequestUpdateCheckFunction::RunAsync() {
- ExtensionSystem* system = ExtensionSystem::Get(GetProfile());
- ExtensionService* service = system->extension_service();
- ExtensionUpdater* updater = service->updater();
- if (!updater) {
- error_ = kUpdatesDisabledError;
- return false;
- }
-
- did_reply_ = false;
- if (!updater->CheckExtensionSoon(extension_id(), base::Bind(
- &RuntimeRequestUpdateCheckFunction::CheckComplete, this))) {
- did_reply_ = true;
- SetResult(new base::StringValue(kUpdateThrottled));
- SendResponse(true);
+ExtensionFunction::ResponseAction RuntimeRequestUpdateCheckFunction::Run() {
+ if (!RuntimeAPI::GetFactoryInstance()
+ ->Get(browser_context())
+ ->CheckForUpdates(
+ extension_id(),
+ base::Bind(&RuntimeRequestUpdateCheckFunction::CheckComplete,
+ this))) {
+ return RespondNow(Error(kUpdatesDisabledError));
}
- return true;
-}
-
-void RuntimeRequestUpdateCheckFunction::CheckComplete() {
- if (did_reply_)
- return;
-
- did_reply_ = true;
-
- // Since no UPDATE_FOUND notification was seen, this generally would mean
- // that no update is found, but a previous update check might have already
- // queued up an update, so check for that here to make sure we return the
- // right value.
- ExtensionSystem* system = ExtensionSystem::Get(GetProfile());
- ExtensionService* service = system->extension_service();
- const Extension* update = service->GetPendingExtensionUpdate(extension_id());
- if (update) {
- ReplyUpdateFound(update->VersionString());
+ return RespondLater();
+}
+
+void RuntimeRequestUpdateCheckFunction::CheckComplete(
+ const RuntimeAPIDelegate::UpdateCheckResult& result) {
+ if (result.success) {
+ base::ListValue* results = new base::ListValue;
+ results->AppendString(result.response);
+ base::DictionaryValue* details = new base::DictionaryValue;
+ results->Append(details);
+ details->SetString("version", result.version);
+ Respond(MultipleArguments(results));
} else {
- SetResult(new base::StringValue(kUpdateNotFound));
+ Respond(SingleArgument(new base::StringValue(result.response)));
}
- SendResponse(true);
}
-void RuntimeRequestUpdateCheckFunction::Observe(
- int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- if (did_reply_)
- return;
-
- DCHECK(type == chrome::NOTIFICATION_EXTENSION_UPDATE_FOUND);
- typedef const std::pair<std::string, Version> UpdateDetails;
- const std::string& id = content::Details<UpdateDetails>(details)->first;
- const Version& version = content::Details<UpdateDetails>(details)->second;
- if (id == extension_id()) {
- ReplyUpdateFound(version.GetString());
+ExtensionFunction::ResponseAction RuntimeRestartFunction::Run() {
+ std::string message;
+ bool result =
+ RuntimeAPI::GetFactoryInstance()->Get(browser_context())->RestartDevice(
+ &message);
+ if (!result) {
+ return RespondNow(Error(message));
}
+ return RespondNow(NoArguments());
}
-void RuntimeRequestUpdateCheckFunction::ReplyUpdateFound(
- const std::string& version) {
- did_reply_ = true;
- results_.reset(new base::ListValue);
- results_->AppendString(kUpdateFound);
- base::DictionaryValue* details = new base::DictionaryValue;
- results_->Append(details);
- details->SetString("version", version);
- SendResponse(true);
-}
-
-bool RuntimeRestartFunction::RunSync() {
-#if defined(OS_CHROMEOS)
- if (chromeos::UserManager::Get()->IsLoggedInAsKioskApp()) {
- chromeos::DBusThreadManager::Get()
- ->GetPowerManagerClient()
- ->RequestRestart();
- return true;
- }
-#endif
- SetError("Function available only for ChromeOS kiosk mode.");
- return false;
-}
-
-bool RuntimeGetPlatformInfoFunction::RunSync() {
- GetPlatformInfo::Results::PlatformInfo info;
-
- const char* os = chrome::OmahaQueryParams::GetOS();
- if (strcmp(os, "mac") == 0) {
- info.os = GetPlatformInfo::Results::PlatformInfo::OS_MAC_;
- } else if (strcmp(os, "win") == 0) {
- info.os = GetPlatformInfo::Results::PlatformInfo::OS_WIN_;
- } else if (strcmp(os, "android") == 0) {
- info.os = GetPlatformInfo::Results::PlatformInfo::OS_ANDROID_;
- } else if (strcmp(os, "cros") == 0) {
- info.os = GetPlatformInfo::Results::PlatformInfo::OS_CROS_;
- } else if (strcmp(os, "linux") == 0) {
- info.os = GetPlatformInfo::Results::PlatformInfo::OS_LINUX_;
- } else if (strcmp(os, "openbsd") == 0) {
- info.os = GetPlatformInfo::Results::PlatformInfo::OS_OPENBSD_;
- } else {
- NOTREACHED();
- return false;
+ExtensionFunction::ResponseAction RuntimeGetPlatformInfoFunction::Run() {
+ runtime::PlatformInfo info;
+ if (!RuntimeAPI::GetFactoryInstance()
+ ->Get(browser_context())
+ ->GetPlatformInfo(&info)) {
+ return RespondNow(Error(kPlatformInfoUnavailable));
}
-
- const char* arch = chrome::OmahaQueryParams::GetArch();
- if (strcmp(arch, "arm") == 0) {
- info.arch = GetPlatformInfo::Results::PlatformInfo::ARCH_ARM;
- } else if (strcmp(arch, "x86") == 0) {
- info.arch = GetPlatformInfo::Results::PlatformInfo::ARCH_X86_32;
- } else if (strcmp(arch, "x64") == 0) {
- info.arch = GetPlatformInfo::Results::PlatformInfo::ARCH_X86_64;
- } else {
- NOTREACHED();
- return false;
- }
-
- const char* nacl_arch = chrome::OmahaQueryParams::GetNaclArch();
- if (strcmp(nacl_arch, "arm") == 0) {
- info.nacl_arch = GetPlatformInfo::Results::PlatformInfo::NACL_ARCH_ARM;
- } else if (strcmp(nacl_arch, "x86-32") == 0) {
- info.nacl_arch = GetPlatformInfo::Results::PlatformInfo::NACL_ARCH_X86_32;
- } else if (strcmp(nacl_arch, "x86-64") == 0) {
- info.nacl_arch = GetPlatformInfo::Results::PlatformInfo::NACL_ARCH_X86_64;
- } else {
- NOTREACHED();
- return false;
- }
-
- results_ = GetPlatformInfo::Results::Create(info);
- return true;
+ return RespondNow(MultipleArguments(
+ runtime::GetPlatformInfo::Results::Create(info).release()));
}
-bool RuntimeGetPackageDirectoryEntryFunction::RunSync() {
+ExtensionFunction::ResponseAction
+RuntimeGetPackageDirectoryEntryFunction::Run() {
fileapi::IsolatedContext* isolated_context =
fileapi::IsolatedContext::GetInstance();
DCHECK(isolated_context);
@@ -669,10 +509,9 @@ bool RuntimeGetPackageDirectoryEntryFunction::RunSync() {
content::ChildProcessSecurityPolicy::GetInstance();
policy->GrantReadFileSystem(renderer_id, filesystem_id);
base::DictionaryValue* dict = new base::DictionaryValue();
- SetResult(dict);
dict->SetString("fileSystemId", filesystem_id);
dict->SetString("baseName", relative_path);
- return true;
+ return RespondNow(SingleArgument(dict));
}
-} // namespace extensions
+} // namespace extensions
« no previous file with comments | « extensions/browser/api/runtime/runtime_api.h ('k') | extensions/browser/api/runtime/runtime_api_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698