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

Unified Diff: chrome/browser/ui/webui/ntp/app_launcher_handler.cc

Issue 7187023: Adding an experimental app notification API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixing clang errors Created 9 years, 6 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/ui/webui/ntp/app_launcher_handler.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/ntp/app_launcher_handler.cc
diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
index 5ca61e37459c936c1ca81edb469c2ad7397015f4..d910ab06b81acd94915954bc8d58689972ec04f3 100644
--- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
+++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
@@ -73,8 +73,23 @@ AppLauncherHandler::AppLauncherHandler(ExtensionService* extension_service)
AppLauncherHandler::~AppLauncherHandler() {}
+// Serializes |notification| into a new DictionaryValue which the caller then
+// owns.
+static DictionaryValue* SerializeNotification(
+ const AppNotification& notification) {
+ DictionaryValue* dictionary = new DictionaryValue();
+ dictionary->SetString("title", notification.title);
+ dictionary->SetString("body", notification.body);
+ if (!notification.linkUrl.is_empty()) {
+ dictionary->SetString("linkUrl", notification.linkUrl.spec());
+ dictionary->SetString("linkText", notification.linkText);
+ }
+ return dictionary;
+}
+
// static
void AppLauncherHandler::CreateAppInfo(const Extension* extension,
+ const AppNotification* notification,
ExtensionPrefs* prefs,
DictionaryValue* value) {
bool enabled =
@@ -109,6 +124,9 @@ void AppLauncherHandler::CreateAppInfo(const Extension* extension,
value->SetBoolean("is_component",
extension->location() == Extension::COMPONENT);
+ if (notification)
+ value->Set("notification", SerializeNotification(*notification));
+
int app_launch_index = prefs->GetAppLaunchIndex(extension->id());
if (app_launch_index == -1) {
// Make sure every app has a launch index (some predate the launch index).
@@ -198,6 +216,17 @@ void AppLauncherHandler::Observe(NotificationType type,
return;
switch (type.value) {
+ case NotificationType::APP_NOTIFICATION_STATE_CHANGED: {
+ const std::string& id = *Details<const std::string>(details).ptr();
+ const AppNotification* notification =
+ extensions_service_->app_notification_manager()->GetLast(id);
+ ListValue args;
+ args.Append(new StringValue(id));
+ if (notification)
+ args.Append(SerializeNotification(*notification));
+ web_ui_->CallJavascriptFunction("appNotificationChanged", args);
+ break;
+ }
case NotificationType::EXTENSION_LOADED:
case NotificationType::EXTENSION_UNLOADED:
case NotificationType::EXTENSION_LAUNCHER_REORDERED:
@@ -228,10 +257,16 @@ void AppLauncherHandler::FillAppDictionary(DictionaryValue* dictionary) {
for (it = extensions->begin(); it != extensions->end(); ++it) {
// Don't include the WebStore.
// The WebStore launcher gets special treatment in ntp/apps.js.
- if ((*it)->is_app() &&
- (*it)->id() != extension_misc::kWebStoreAppId) {
+ const Extension* extension = *it;
+ if (extension->is_app() &&
+ extension->id() != extension_misc::kWebStoreAppId) {
DictionaryValue* app_info = new DictionaryValue();
- CreateAppInfo(*it, extensions_service_->extension_prefs(), app_info);
+ AppNotificationManager* notification_manager =
+ extensions_service_->app_notification_manager();
+ CreateAppInfo(extension,
+ notification_manager->GetLast(extension->id()),
+ extensions_service_->extension_prefs(),
+ app_info);
list->Append(app_info);
}
}
@@ -241,7 +276,10 @@ void AppLauncherHandler::FillAppDictionary(DictionaryValue* dictionary) {
if ((*it)->is_app() &&
(*it)->id() != extension_misc::kWebStoreAppId) {
DictionaryValue* app_info = new DictionaryValue();
- CreateAppInfo(*it, extensions_service_->extension_prefs(), app_info);
+ CreateAppInfo(*it,
+ NULL,
+ extensions_service_->extension_prefs(),
+ app_info);
list->Append(app_info);
}
}
@@ -316,6 +354,8 @@ void AppLauncherHandler::HandleGetApps(const ListValue* args) {
// First time we get here we set up the observer so that we can tell update
// the apps as they change.
if (registrar_.IsEmpty()) {
+ registrar_.Add(this, NotificationType::APP_NOTIFICATION_STATE_CHANGED,
+ NotificationService::AllSources());
registrar_.Add(this, NotificationType::EXTENSION_LOADED,
NotificationService::AllSources());
registrar_.Add(this, NotificationType::EXTENSION_UNLOADED,
« no previous file with comments | « chrome/browser/ui/webui/ntp/app_launcher_handler.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698