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

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: Rebase Created 6 years, 8 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: 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 53%
rename from chrome/browser/extensions/api/runtime/runtime_api.cc
rename to extensions/browser/api/runtime/runtime_api.cc
index fbb35ed0d676627af9358e0aed455a08ffa6bc79..906fef31287bcfbfe293890d7216a61ce745316c 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,36 @@
#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/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/browser/runtime_api_delegate.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 GetPlatformInfo = extensions::core_api::runtime::GetPlatformInfo;
namespace extensions {
-namespace runtime = api::runtime;
+namespace runtime = core_api::runtime;
namespace {
@@ -64,10 +52,6 @@ const char kInstallReasonUpdate[] = "update";
const char kInstallReasonInstall[] = "install";
const char kInstallPreviousVersion[] = "previousVersion";
const char kInvalidUrlError[] = "Invalid URL.";
-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 +61,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 +89,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)
@@ -157,20 +133,30 @@ BrowserContextKeyedAPIFactory<RuntimeAPI>* RuntimeAPI::GetFactoryInstance() {
return g_factory.Pointer();
}
+RuntimeAPI::UpdateCheckResult::UpdateCheckResult(bool success,
+ const std::string& response,
+ const std::string& version)
+ : success(success), response(response), version(version) {
+}
+
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 +164,7 @@ RuntimeAPI::RuntimeAPI(content::BrowserContext* context)
}
RuntimeAPI::~RuntimeAPI() {
- if (registered_for_updates_) {
- ExtensionSystem::Get(browser_context_)->
- extension_service()->RemoveUpdateObserver(this);
- }
+ delegate_->UnregisterUpdateObserver(this);
}
void RuntimeAPI::Observe(int type,
@@ -220,16 +203,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_->RegisterUpdateObserver(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 +235,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_->GetOldExtensionVersion(extension);
// Dispatch the onInstalled event.
base::MessageLoop::current()->PostTask(
@@ -270,7 +245,6 @@ void RuntimeAPI::OnExtensionInstalled(const Extension* extension) {
extension->id(),
old_version,
false));
-
}
void RuntimeAPI::OnExtensionUninstalled(const Extension* extension) {
@@ -279,8 +253,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,14 +267,12 @@ 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) {
@@ -309,61 +280,33 @@ void RuntimeAPI::OnBackgroundHostStartup(const Extension* extension) {
}
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));
- }
+ delegate_->MaybeReloadExtension(extension_id);
+}
+
+void RuntimeAPI::RequestUpdateCheck(const std::string& extension_id,
+ const UpdateCheckCallback& callback) {
+ delegate_->RequestUpdateCheck(extension_id, callback);
+}
+
+void RuntimeAPI::HandleUninstall(const std::string& extension_id,
+ const GURL& update_url) {
+ delegate_->HandleUninstall(extension_id, update_url);
+}
+
+bool RuntimeAPI::GetPlatformInfo(GetPlatformInfo::Results::PlatformInfo* info) {
+ return delegate_->GetPlatformInfo(info);
+}
+
+bool RuntimeAPI::RequestRestart(std::string* error_message) {
+ return delegate_->RequestRestart(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 +334,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,37 +390,28 @@ 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)->HandleUninstall(
+ extension_id, 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(),
+ 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) {
@@ -510,146 +444,56 @@ bool RuntimeSetUninstallURLFunction::RunSync() {
}
SetUninstallURL(
- ExtensionPrefs::Get(GetProfile()), extension_id(), url_string);
+ ExtensionPrefs::Get(browser_context()), extension_id(), url_string);
return true;
}
bool RuntimeReloadFunction::RunSync() {
- RuntimeAPI::GetFactoryInstance()->Get(GetProfile())->MaybeReloadExtension(
- extension_id());
+ RuntimeAPI::GetFactoryInstance()
+ ->Get(browser_context())
+ ->MaybeReloadExtension(extension_id());
return true;
}
-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);
- }
+ RuntimeAPI::GetFactoryInstance()->Get(browser_context())->RequestUpdateCheck(
+ extension_id(),
+ base::Bind(&RuntimeRequestUpdateCheckFunction::CheckComplete, this));
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());
+void RuntimeRequestUpdateCheckFunction::CheckComplete(
+ const RuntimeAPI::UpdateCheckResult& result) {
+ if (result.success) {
+ results_.reset(new base::ListValue);
+ results_->AppendString(result.response);
+ base::DictionaryValue* details = new base::DictionaryValue;
+ results_->Append(details);
+ details->SetString("version", result.version);
} else {
- SetResult(new base::StringValue(kUpdateNotFound));
+ SetResult(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());
- }
-}
-
-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;
+ std::string message;
+ bool result =
+ RuntimeAPI::GetFactoryInstance()->Get(browser_context())->RequestRestart(
+ &message);
+ if (!result) {
+ SetError(message);
}
-#endif
- SetError("Function available only for ChromeOS kiosk mode.");
- return false;
+ return result;
}
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;
- }
-
- 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();
+ if (!RuntimeAPI::GetFactoryInstance()
+ ->Get(browser_context())
+ ->GetPlatformInfo(&info)) {
return false;
}
-
results_ = GetPlatformInfo::Results::Create(info);
return true;
}
@@ -675,4 +519,4 @@ bool RuntimeGetPackageDirectoryEntryFunction::RunSync() {
return true;
}
-} // namespace extensions
+} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698