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

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

Issue 206613005: Extract RuntimeEventRouter from extensions Runtime API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove from android whitelist (runtime-api) Created 6 years, 9 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 | « chrome/browser/extensions/api/runtime/runtime_api.h ('k') | chrome/chrome_browser_extensions.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/api/runtime/runtime_api.cc
diff --git a/chrome/browser/extensions/api/runtime/runtime_api.cc b/chrome/browser/extensions/api/runtime/runtime_api.cc
index 3545291a3ab7e1d64d05a1aa102b0a567e2d8acf..0a9c61b6e53c0f444a4ae9147c7ff458c437c5f2 100644
--- a/chrome/browser/extensions/api/runtime/runtime_api.cc
+++ b/chrome/browser/extensions/api/runtime/runtime_api.cc
@@ -10,7 +10,6 @@
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/values.h"
-#include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/updater/extension_updater.h"
@@ -25,7 +24,7 @@
#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/api/runtime/runtime_event_router.h"
#include "extensions/browser/extension_host.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
@@ -56,11 +55,6 @@ namespace {
const char kNoBackgroundPageError[] = "You do not have a background page.";
const char kPageLoadError[] = "Background page failed to load.";
-const char kInstallReason[] = "reason";
-const char kInstallReasonChromeUpdate[] = "chrome_update";
-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";
@@ -75,49 +69,6 @@ const char kUninstallUrl[] = "uninstall_url";
// with the equivalent Pepper API.
const char kPackageDirectoryPath[] = "crxfs";
-void DispatchOnStartupEventImpl(BrowserContext* browser_context,
- const std::string& extension_id,
- bool first_call,
- ExtensionHost* host) {
- // A NULL host from the LazyBackgroundTaskQueue means the page failed to
- // load. Give up.
- if (!host && !first_call)
- return;
-
- // Don't send onStartup events to incognito browser contexts.
- if (browser_context->IsOffTheRecord())
- return;
-
- if (ExtensionsBrowserClient::Get()->IsShuttingDown() ||
- !ExtensionsBrowserClient::Get()->IsValidContext(browser_context))
- return;
- ExtensionSystem* system = ExtensionSystem::Get(browser_context);
- if (!system)
- return;
-
- // If this is a persistent background page, we want to wait for it to load
- // (it might not be ready, since this is startup). But only enqueue once.
- // If it fails to load the first time, don't bother trying again.
- const Extension* extension =
- ExtensionRegistry::Get(browser_context)->enabled_extensions().GetByID(
- extension_id);
- if (extension && BackgroundInfo::HasPersistentBackgroundPage(extension) &&
- first_call &&
- 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));
- return;
- }
-
- scoped_ptr<base::ListValue> event_args(new base::ListValue());
- 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) {
@@ -147,7 +98,7 @@ BrowserContextKeyedAPIFactory<RuntimeAPI>* RuntimeAPI::GetFactoryInstance() {
return g_factory.Pointer();
}
-RuntimeAPI::RuntimeAPI(content::BrowserContext* context)
+RuntimeAPI::RuntimeAPI(BrowserContext* context)
: browser_context_(context),
dispatch_chrome_updated_event_(false),
registered_for_updates_(false) {
@@ -236,9 +187,9 @@ void RuntimeAPI::OnExtensionInstalled(const Extension* extension) {
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);
+ const Extension* old =
+ ExtensionRegistry::Get(browser_context_)
+ ->GetExtensionById(extension->id(), ExtensionRegistry::EVERYTHING);
Version old_version;
if (old)
old_version = *old->version();
@@ -261,110 +212,12 @@ void RuntimeAPI::OnExtensionUninstalled(const Extension* extension) {
return;
Profile* profile = Profile::FromBrowserContext(browser_context_);
- RuntimeEventRouter::OnExtensionUninstalled(profile, extension->id());
-}
-
-void RuntimeAPI::OnAppUpdateAvailable(const Extension* extension) {
- Profile* profile = Profile::FromBrowserContext(browser_context_);
- RuntimeEventRouter::DispatchOnUpdateAvailableEvent(
- profile, extension->id(), extension->manifest()->value());
-}
-
-void RuntimeAPI::OnChromeUpdateAvailable() {
- Profile* profile = Profile::FromBrowserContext(browser_context_);
- RuntimeEventRouter::DispatchOnBrowserUpdateAvailableEvent(profile);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-// static
-void RuntimeEventRouter::DispatchOnStartupEvent(
- content::BrowserContext* context, const std::string& extension_id) {
- DispatchOnStartupEventImpl(context, extension_id, true, NULL);
-}
-
-// static
-void RuntimeEventRouter::DispatchOnInstalledEvent(
- content::BrowserContext* context,
- const std::string& extension_id,
- const Version& old_version,
- bool chrome_updated) {
- if (!ExtensionsBrowserClient::Get()->IsValidContext(context))
- return;
- ExtensionSystem* system = ExtensionSystem::Get(context);
- if (!system)
- return;
-
- scoped_ptr<base::ListValue> event_args(new base::ListValue());
- base::DictionaryValue* info = new base::DictionaryValue();
- event_args->Append(info);
- if (old_version.IsValid()) {
- info->SetString(kInstallReason, kInstallReasonUpdate);
- info->SetString(kInstallPreviousVersion, old_version.GetString());
- } else if (chrome_updated) {
- info->SetString(kInstallReason, kInstallReasonChromeUpdate);
- } else {
- info->SetString(kInstallReason, kInstallReasonInstall);
- }
- DCHECK(system->event_router());
- scoped_ptr<Event> event(new Event(runtime::OnInstalled::kEventName,
- event_args.Pass()));
- system->event_router()->DispatchEventWithLazyListener(extension_id,
- event.Pass());
+ ShowUninstallURL(profile, extension->id());
}
// static
-void RuntimeEventRouter::DispatchOnUpdateAvailableEvent(
- Profile* profile,
- const std::string& extension_id,
- const base::DictionaryValue* manifest) {
- ExtensionSystem* system = ExtensionSystem::Get(profile);
- 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()));
- system->event_router()->DispatchEventToExtension(extension_id, event.Pass());
-}
-
-// static
-void RuntimeEventRouter::DispatchOnBrowserUpdateAvailableEvent(
- Profile* profile) {
- ExtensionSystem* system = ExtensionSystem::Get(profile);
- 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()));
- system->event_router()->BroadcastEvent(event.Pass());
-}
-
-// static
-void RuntimeEventRouter::DispatchOnRestartRequiredEvent(
- Profile* profile,
- const std::string& app_id,
- api::runtime::OnRestartRequired::Reason reason) {
- ExtensionSystem* system = ExtensionSystem::Get(profile);
- if (!system)
- return;
-
- scoped_ptr<Event> event(
- new Event(runtime::OnRestartRequired::kEventName,
- api::runtime::OnRestartRequired::Create(reason)));
-
- DCHECK(system->event_router());
- system->event_router()->DispatchEventToExtension(app_id, event.Pass());
-}
-
-// static
-void RuntimeEventRouter::OnExtensionUninstalled(
- Profile* profile,
- const std::string& extension_id) {
+void RuntimeAPI::ShowUninstallURL(Profile* profile,
+ const std::string& extension_id) {
#if defined(ENABLE_EXTENSIONS)
GURL uninstall_url(GetUninstallURL(ExtensionPrefs::Get(profile),
extension_id));
@@ -386,6 +239,17 @@ void RuntimeEventRouter::OnExtensionUninstalled(
#endif // defined(ENABLE_EXTENSIONS)
}
+void RuntimeAPI::OnAppUpdateAvailable(const Extension* extension) {
+ RuntimeEventRouter::DispatchOnUpdateAvailableEvent(
+ browser_context_, extension->id(), extension->manifest()->value());
+}
+
+void RuntimeAPI::OnChromeUpdateAvailable() {
+ RuntimeEventRouter::DispatchOnBrowserUpdateAvailableEvent(browser_context_);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
bool RuntimeGetBackgroundPageFunction::RunImpl() {
ExtensionSystem* system = ExtensionSystem::Get(GetProfile());
ExtensionHost* host = system->process_manager()->
@@ -415,6 +279,8 @@ void RuntimeGetBackgroundPageFunction::OnPageLoaded(ExtensionHost* host) {
}
}
+//////////////////////////////////////////////////////////////////////////////
+
bool RuntimeSetUninstallURLFunction::RunImpl() {
std::string url_string;
EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &url_string));
@@ -430,6 +296,8 @@ bool RuntimeSetUninstallURLFunction::RunImpl() {
return true;
}
+//////////////////////////////////////////////////////////////////////////////
+
bool RuntimeReloadFunction::RunImpl() {
// We can't call ReloadExtension directly, since when this method finishes
// it tries to decrease the reference count for the extension, which fails
@@ -442,6 +310,8 @@ bool RuntimeReloadFunction::RunImpl() {
return true;
}
+//////////////////////////////////////////////////////////////////////////////
+
RuntimeRequestUpdateCheckFunction::RuntimeRequestUpdateCheckFunction() {
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UPDATE_FOUND,
content::NotificationService::AllSources());
@@ -514,6 +384,8 @@ void RuntimeRequestUpdateCheckFunction::ReplyUpdateFound(
SendResponse(true);
}
+//////////////////////////////////////////////////////////////////////////////
+
bool RuntimeRestartFunction::RunImpl() {
#if defined(OS_CHROMEOS)
if (chromeos::UserManager::Get()->IsLoggedInAsKioskApp()) {
@@ -527,6 +399,8 @@ bool RuntimeRestartFunction::RunImpl() {
return false;
}
+//////////////////////////////////////////////////////////////////////////////
+
bool RuntimeGetPlatformInfoFunction::RunImpl() {
GetPlatformInfo::Results::PlatformInfo info;
@@ -576,6 +450,8 @@ bool RuntimeGetPlatformInfoFunction::RunImpl() {
return true;
}
+//////////////////////////////////////////////////////////////////////////////
+
bool RuntimeGetPackageDirectoryEntryFunction::RunImpl() {
fileapi::IsolatedContext* isolated_context =
fileapi::IsolatedContext::GetInstance();
« no previous file with comments | « chrome/browser/extensions/api/runtime/runtime_api.h ('k') | chrome/chrome_browser_extensions.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698