Chromium Code Reviews| Index: chrome/browser/extensions/api/notifications/notifications_api.cc |
| diff --git a/chrome/browser/extensions/api/notification/notification_api.cc b/chrome/browser/extensions/api/notifications/notifications_api.cc |
| similarity index 77% |
| rename from chrome/browser/extensions/api/notification/notification_api.cc |
| rename to chrome/browser/extensions/api/notifications/notifications_api.cc |
| index b16ac91e90f54f8f358aabb787220ca048ec0338..60ef3a285bb19db5e37579357bb7758aacf433c5 100644 |
| --- a/chrome/browser/extensions/api/notification/notification_api.cc |
| +++ b/chrome/browser/extensions/api/notifications/notifications_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/notification/notification_api.h" |
| +#include "chrome/browser/extensions/api/notifications/notifications_api.h" |
| #include "base/callback.h" |
| #include "base/strings/string_number_conversions.h" |
| @@ -15,7 +15,9 @@ |
| #include "chrome/browser/notifications/desktop_notification_service_factory.h" |
| #include "chrome/browser/notifications/notification.h" |
| #include "chrome/browser/notifications/notification_ui_manager.h" |
| +#include "chrome/common/chrome_version_info.h" |
| #include "chrome/common/extensions/extension.h" |
| +#include "chrome/common/extensions/features/feature.h" |
| #include "googleurl/src/gurl.h" |
| namespace extensions { |
| @@ -24,9 +26,9 @@ namespace { |
| const char kResultKey[] = "result"; |
| -class NotificationApiDelegate : public NotificationDelegate { |
| +class NotificationsApiDelegate : public NotificationDelegate { |
| public: |
| - NotificationApiDelegate(ApiFunction* api_function, |
| + NotificationsApiDelegate(ApiFunction* api_function, |
| Profile* profile, |
| const std::string& extension_id, |
| const std::string& id) |
| @@ -85,7 +87,7 @@ class NotificationApiDelegate : public NotificationDelegate { |
| } |
| private: |
| - virtual ~NotificationApiDelegate() {} |
| + virtual ~NotificationsApiDelegate() {} |
| void SendEvent(const std::string& name, scoped_ptr<ListValue> args) { |
| scoped_ptr<Event> event(new Event(name, args.Pass())); |
| @@ -105,29 +107,29 @@ class NotificationApiDelegate : public NotificationDelegate { |
| const std::string id_; |
| const std::string scoped_id_; |
| - DISALLOW_COPY_AND_ASSIGN(NotificationApiDelegate); |
| + DISALLOW_COPY_AND_ASSIGN(NotificationsApiDelegate); |
| }; |
| } // namespace |
| -NotificationApiFunction::NotificationApiFunction() { |
| +NotificationsApiFunction::NotificationsApiFunction() { |
| } |
| -NotificationApiFunction::~NotificationApiFunction() { |
| +NotificationsApiFunction::~NotificationsApiFunction() { |
| } |
| message_center::NotificationType |
| -NotificationApiFunction::MapApiTemplateTypeToType( |
| - api::experimental_notification::TemplateType type) { |
| +NotificationsApiFunction::MapApiTemplateTypeToType( |
|
dharcourt
2013/03/04 23:46:27
Nit: To match declaration order, the definition of
|
| + api::notifications::TemplateType type) { |
| switch (type) { |
| - case api::experimental_notification::TEMPLATE_TYPE_NONE: |
| - case api::experimental_notification::TEMPLATE_TYPE_SIMPLE: |
| + case api::notifications::TEMPLATE_TYPE_NONE: |
| + case api::notifications::TEMPLATE_TYPE_SIMPLE: |
| return message_center::NOTIFICATION_TYPE_SIMPLE; |
| - case api::experimental_notification::TEMPLATE_TYPE_BASIC: |
| + case api::notifications::TEMPLATE_TYPE_BASIC: |
| return message_center::NOTIFICATION_TYPE_BASE_FORMAT; |
| - case api::experimental_notification::TEMPLATE_TYPE_IMAGE: |
| + case api::notifications::TEMPLATE_TYPE_IMAGE: |
| return message_center::NOTIFICATION_TYPE_IMAGE; |
| - case api::experimental_notification::TEMPLATE_TYPE_LIST: |
| + case api::notifications::TEMPLATE_TYPE_LIST: |
| return message_center::NOTIFICATION_TYPE_MULTIPLE; |
| default: |
| // Gracefully handle newer application code that is running on an older |
| @@ -139,9 +141,9 @@ NotificationApiFunction::MapApiTemplateTypeToType( |
| // If older notification runtime is used, MessageCenter is not built. |
| // Use simpler bridge then, ignoring all options. |
| #if !defined (ENABLE_MESSAGE_CENTER) |
| -void NotificationApiFunction::CreateNotification( |
| +void NotificationsApiFunction::CreateNotification( |
| const std::string& id, |
| - api::experimental_notification::NotificationOptions* options) { |
| + api::notifications::NotificationOptions* options) { |
| message_center::NotificationType type = |
| MapApiTemplateTypeToType(options->template_type); |
| GURL icon_url(UTF8ToUTF16(options->icon_url)); |
| @@ -151,7 +153,7 @@ void NotificationApiFunction::CreateNotification( |
| // Ignore options if running on the old notification runtime. |
| scoped_ptr<DictionaryValue> optional_fields(new DictionaryValue()); |
| - NotificationApiDelegate* api_delegate(new NotificationApiDelegate( |
| + NotificationsApiDelegate* api_delegate(new NotificationsApiDelegate( |
| this, |
| profile(), |
| extension_->id(), |
| @@ -164,9 +166,9 @@ void NotificationApiFunction::CreateNotification( |
| g_browser_process->notification_ui_manager()->Add(notification, profile()); |
| } |
| #else // defined(ENABLE_MESSAGE_CENTER) |
| -void NotificationApiFunction::CreateNotification( |
| +void NotificationsApiFunction::CreateNotification( |
| const std::string& id, |
| - api::experimental_notification::NotificationOptions* options) { |
| + api::notifications::NotificationOptions* options) { |
| message_center::NotificationType type = |
| MapApiTemplateTypeToType(options->template_type); |
| GURL icon_url(UTF8ToUTF16(options->icon_url)); |
| @@ -184,7 +186,7 @@ void NotificationApiFunction::CreateNotification( |
| *options->event_time); |
| if (options->buttons.get()) { |
| if (options->buttons->size() > 0) { |
| - linked_ptr<api::experimental_notification::NotificationButton> button = |
| + linked_ptr<api::notifications::NotificationButton> button = |
| (*options->buttons)[0]; |
| optional_fields->SetString(message_center::kButtonOneTitleKey, |
| UTF8ToUTF16(button->title)); |
| @@ -193,7 +195,7 @@ void NotificationApiFunction::CreateNotification( |
| UTF8ToUTF16(*button->icon_url)); |
| } |
| if (options->buttons->size() > 1) { |
| - linked_ptr<api::experimental_notification::NotificationButton> button = |
| + linked_ptr<api::notifications::NotificationButton> button = |
| (*options->buttons)[1]; |
| optional_fields->SetString(message_center::kButtonTwoTitleKey, |
| UTF8ToUTF16(button->title)); |
| @@ -220,7 +222,7 @@ void NotificationApiFunction::CreateNotification( |
| base::ListValue* items = new base::ListValue(); |
| std::vector< |
| linked_ptr< |
| - api::experimental_notification::NotificationItem> >::iterator i; |
| + api::notifications::NotificationItem> >::iterator i; |
| for (i = options->items->begin(); i != options->items->end(); ++i) { |
| base::DictionaryValue* item = new base::DictionaryValue(); |
| item->SetString(message_center::kItemTitleKey, |
| @@ -232,7 +234,7 @@ void NotificationApiFunction::CreateNotification( |
| optional_fields->Set(message_center::kItemsKey, items); |
| } |
| - NotificationApiDelegate* api_delegate(new NotificationApiDelegate( |
| + NotificationsApiDelegate* api_delegate(new NotificationsApiDelegate( |
| this, |
| profile(), |
| extension_->id(), |
| @@ -246,33 +248,47 @@ void NotificationApiFunction::CreateNotification( |
| } |
| #endif // !defined(ENABLE_MESSAGE_CENTER) |
| -bool NotificationApiFunction::IsNotificationApiEnabled() { |
| +bool NotificationsApiFunction::IsNotificationsApiEnabled() { |
| DesktopNotificationService* service = |
| DesktopNotificationServiceFactory::GetForProfile(profile()); |
| return service->IsExtensionEnabled(extension_->id()); |
| } |
| -bool NotificationApiFunction::RunImpl() { |
| - if (!IsNotificationApiEnabled()) { |
| +bool NotificationsApiFunction::IsNotificationsApiAvailable() { |
| + // TODO(miket): remove/change this check when we leave dev. |
| + if (chrome::VersionInfo::CHANNEL_DEV < Feature::GetCurrentChannel()) |
| + return false; |
| + |
| + // We need to check this explicitly rather than letting |
| + // _permission_features.json enforce it, because we're sharing the |
| + // chrome.notifications permissions namespace with WebKit notifications. |
| + if (!(GetExtension()->is_platform_app() || GetExtension()->is_extension())) |
| + return false; |
| + |
| + return true; |
| +} |
| + |
| +bool NotificationsApiFunction::RunImpl() { |
| + if (IsNotificationsApiAvailable() && IsNotificationsApiEnabled()) { |
| + return RunNotificationsApi(); |
| + } else { |
| SendResponse(false); |
| return true; |
| } |
| - |
| - return RunNotificationApi(); |
| } |
| -const char kNotificationPrefix[] = "extension.api."; |
| +const char kNotificationPrefix[] = "extensions.api."; |
| static uint64 next_id_ = 0; |
| -NotificationCreateFunction::NotificationCreateFunction() { |
| +NotificationsCreateFunction::NotificationsCreateFunction() { |
| } |
| -NotificationCreateFunction::~NotificationCreateFunction() { |
| +NotificationsCreateFunction::~NotificationsCreateFunction() { |
| } |
| -bool NotificationCreateFunction::RunNotificationApi() { |
| - params_ = api::experimental_notification::Create::Params::Create(*args_); |
| +bool NotificationsCreateFunction::RunNotificationsApi() { |
| + params_ = api::notifications::Create::Params::Create(*args_); |
| EXTENSION_FUNCTION_VALIDATE(params_.get()); |
| // If the caller provided a notificationId, use that. Otherwise, generate |
| @@ -296,18 +312,18 @@ bool NotificationCreateFunction::RunNotificationApi() { |
| return true; |
| } |
| -NotificationUpdateFunction::NotificationUpdateFunction() { |
| +NotificationsUpdateFunction::NotificationsUpdateFunction() { |
| } |
| -NotificationUpdateFunction::~NotificationUpdateFunction() { |
| +NotificationsUpdateFunction::~NotificationsUpdateFunction() { |
| } |
| -bool NotificationUpdateFunction::RunNotificationApi() { |
| - params_ = api::experimental_notification::Update::Params::Create(*args_); |
| +bool NotificationsUpdateFunction::RunNotificationsApi() { |
| + params_ = api::notifications::Update::Params::Create(*args_); |
| EXTENSION_FUNCTION_VALIDATE(params_.get()); |
| if (g_browser_process->notification_ui_manager()-> |
| - DoesIdExist(NotificationApiDelegate::CreateScopedIdentifier( |
| + DoesIdExist(NotificationsApiDelegate::CreateScopedIdentifier( |
| extension_->id(), params_->notification_id))) { |
| CreateNotification(params_->notification_id, ¶ms_->options); |
| SetResult(Value::CreateBooleanValue(true)); |
| @@ -320,18 +336,18 @@ bool NotificationUpdateFunction::RunNotificationApi() { |
| return true; |
| } |
| -NotificationClearFunction::NotificationClearFunction() { |
| +NotificationsClearFunction::NotificationsClearFunction() { |
| } |
| -NotificationClearFunction::~NotificationClearFunction() { |
| +NotificationsClearFunction::~NotificationsClearFunction() { |
| } |
| -bool NotificationClearFunction::RunNotificationApi() { |
| - params_ = api::experimental_notification::Clear::Params::Create(*args_); |
| +bool NotificationsClearFunction::RunNotificationsApi() { |
| + params_ = api::notifications::Clear::Params::Create(*args_); |
| EXTENSION_FUNCTION_VALIDATE(params_.get()); |
| bool cancel_result = g_browser_process->notification_ui_manager()-> |
| - CancelById(NotificationApiDelegate::CreateScopedIdentifier( |
| + CancelById(NotificationsApiDelegate::CreateScopedIdentifier( |
| extension_->id(), params_->notification_id)); |
| SetResult(Value::CreateBooleanValue(cancel_result)); |