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

Unified Diff: chrome/browser/chromeos/extensions/file_browser_notifications.cc

Issue 11418123: Some refactoring in file browser notifications: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix compile Created 8 years, 1 month 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: chrome/browser/chromeos/extensions/file_browser_notifications.cc
diff --git a/chrome/browser/chromeos/extensions/file_browser_notifications.cc b/chrome/browser/chromeos/extensions/file_browser_notifications.cc
index ab00ef087e3c80a13e6c74402c5bc7c9fad2bcbf..c05c04b5d24e6d9d5a98892229e8764ed2bc9b34 100644
--- a/chrome/browser/chromeos/extensions/file_browser_notifications.cc
+++ b/chrome/browser/chromeos/extensions/file_browser_notifications.cc
@@ -23,82 +23,117 @@
namespace {
+struct NotificationTypeInfo {
+ FileBrowserNotifications::NotificationType type;
+ const char* notification_id_prefix;
+ int icon_id;
+ int title_id;
+ int message_id;
+};
+
+// Information about notification types.
+// The order of notification types in the array must match the order of types in
+// NotificationType enum (i.e. the following MUST be satisfied:
+// kNotificationTypes[type].type == type).
+const NotificationTypeInfo kNotificationTypes[] = {
+ {
+ FileBrowserNotifications::DEVICE, // type
+ "Device_", // notification_id_prefix
+ IDR_FILES_APP_ICON, // icon_id
+ IDS_REMOVABLE_DEVICE_DETECTION_TITLE, // title_id
+ IDS_REMOVABLE_DEVICE_SCANNING_MESSAGE // message_id
+ },
+ {
+ FileBrowserNotifications::DEVICE_FAIL, // type
+ "DeviceFail_", // notification_id_prefix
+ IDR_FILES_APP_ICON, // icon_id
+ IDS_REMOVABLE_DEVICE_DETECTION_TITLE, // title_id
+ IDS_DEVICE_UNSUPPORTED_DEFAULT_MESSAGE // message_id
+ },
+ {
+ FileBrowserNotifications::DEVICE_HARD_UNPLUG, // type
+ "HardUnplug_", // notification_id_prefix
+ IDR_PAGEINFO_WARNING_MAJOR, // icon_id
+ IDS_REMOVABLE_DEVICE_HARD_UNPLUG_TITLE, // title_id
+ IDS_EXTERNAL_STORAGE_HARD_UNPLUG_MESSAGE // message_id
+ },
+ {
+ FileBrowserNotifications::DEVICE_EXTERNAL_STORAGE_DISABLED, // type
+ "DeviceFail_", // nottification_id_prefix; same as for DEVICE_FAIL.
+ IDR_FILES_APP_ICON, // icon_id
+ IDS_REMOVABLE_DEVICE_DETECTION_TITLE, // title_id
+ IDS_EXTERNAL_STORAGE_DISABLED_MESSAGE // message_id
+ },
+ {
+ FileBrowserNotifications::FORMAT_SUCCESS, // type
+ "FormatComplete_", // notification_id_prefix
+ IDR_FILES_APP_ICON, // icon_id
+ IDS_REMOVABLE_DEVICE_DETECTION_TITLE, // title_id
+ IDS_FORMATTING_FINISHED_SUCCESS_MESSAGE // message_id
+ },
+ {
+ FileBrowserNotifications::FORMAT_FAIL, // type
+ "FormatComplete_", // notifications_id_prefix
+ IDR_FILES_APP_ICON, // icon_id
+ IDS_FORMATTING_OF_DEVICE_FINISHED_TITLE, // title_id
+ IDS_FORMATTING_FINISHED_FAILURE_MESSAGE // message_id
+ },
+ {
+ FileBrowserNotifications::FORMAT_START, // type
+ "FormatStart_", // notification_id_prefix
+ IDR_FILES_APP_ICON, // icon_id
+ IDS_FORMATTING_OF_DEVICE_FINISHED_TITLE, // title_id
+ IDS_FORMATTING_OF_DEVICE_PENDING_MESSAGE // message_id
+ },
+ {
+ FileBrowserNotifications::FORMAT_START_FAIL, // type
+ "FormatComplete_", // notification_id_prefix
+ IDR_FILES_APP_ICON, // icon_id
+ IDS_FORMATTING_OF_DEVICE_FINISHED_TITLE, // title_id
+ IDS_FORMATTING_STARTED_FAILURE_MESSAGE // message_id
+ },
+};
+
int GetIconId(FileBrowserNotifications::NotificationType type) {
- switch (type) {
- case FileBrowserNotifications::DEVICE:
- case FileBrowserNotifications::DEVICE_FAIL:
- case FileBrowserNotifications::FORMAT_SUCCESS:
- case FileBrowserNotifications::FORMAT_FAIL:
- case FileBrowserNotifications::FORMAT_START:
- case FileBrowserNotifications::FORMAT_START_FAIL:
- case FileBrowserNotifications::GDATA_SYNC:
- case FileBrowserNotifications::GDATA_SYNC_SUCCESS:
- case FileBrowserNotifications::GDATA_SYNC_FAIL:
- return IDR_FILES_APP_ICON;
- case FileBrowserNotifications::DEVICE_HARD_UNPLUG:
- return IDR_PAGEINFO_WARNING_MAJOR;
- default:
- NOTREACHED();
- return 0;
- }
+ DCHECK_GE(type, 0);
+ DCHECK_LT(static_cast<size_t>(type), arraysize(kNotificationTypes));
+ DCHECK(kNotificationTypes[type].type == type);
+
+ return kNotificationTypes[type].icon_id;
}
string16 GetTitle(FileBrowserNotifications::NotificationType type) {
- int id;
- switch (type) {
- case FileBrowserNotifications::DEVICE:
- case FileBrowserNotifications::DEVICE_FAIL:
- id = IDS_REMOVABLE_DEVICE_DETECTION_TITLE;
- break;
- case FileBrowserNotifications::DEVICE_HARD_UNPLUG:
- id = IDS_REMOVABLE_DEVICE_HARD_UNPLUG_TITLE;
- break;
- case FileBrowserNotifications::FORMAT_START:
- id = IDS_FORMATTING_OF_DEVICE_PENDING_TITLE;
- break;
- case FileBrowserNotifications::FORMAT_START_FAIL:
- case FileBrowserNotifications::FORMAT_SUCCESS:
- case FileBrowserNotifications::FORMAT_FAIL:
- id = IDS_FORMATTING_OF_DEVICE_FINISHED_TITLE;
- break;
- default:
- NOTREACHED();
- id = 0;
- }
+ DCHECK_GE(type, 0);
+ DCHECK_LT(static_cast<size_t>(type), arraysize(kNotificationTypes));
+ DCHECK(kNotificationTypes[type].type == type);
+
+ int id = kNotificationTypes[type].title_id;
+ if (id < 0)
+ return string16();
return l10n_util::GetStringUTF16(id);
}
string16 GetMessage(FileBrowserNotifications::NotificationType type) {
- int id;
- switch (type) {
- case FileBrowserNotifications::DEVICE:
- id = IDS_REMOVABLE_DEVICE_SCANNING_MESSAGE;
- break;
- case FileBrowserNotifications::DEVICE_FAIL:
- id = IDS_DEVICE_UNSUPPORTED_DEFAULT_MESSAGE;
- break;
- case FileBrowserNotifications::DEVICE_HARD_UNPLUG:
- id = IDS_EXTERNAL_STORAGE_HARD_UNPLUG_MESSAGE;
- break;
- case FileBrowserNotifications::FORMAT_FAIL:
- id = IDS_FORMATTING_FINISHED_FAILURE_MESSAGE;
- break;
- case FileBrowserNotifications::FORMAT_SUCCESS:
- id = IDS_FORMATTING_FINISHED_SUCCESS_MESSAGE;
- break;
- case FileBrowserNotifications::FORMAT_START:
- id = IDS_FORMATTING_OF_DEVICE_PENDING_MESSAGE;
- break;
- case FileBrowserNotifications::FORMAT_START_FAIL:
- id = IDS_FORMATTING_STARTED_FAILURE_MESSAGE;
- break;
- default:
- NOTREACHED();
- id = 0;
- }
+ DCHECK_GE(type, 0);
+ DCHECK_LT(static_cast<size_t>(type), arraysize(kNotificationTypes));
+ DCHECK(kNotificationTypes[type].type == type);
+
+ int id = kNotificationTypes[type].message_id;
+ if (id < 0)
+ return string16();
return l10n_util::GetStringUTF16(id);
}
+std::string GetNotificationId(FileBrowserNotifications::NotificationType type,
+ const std::string& path) {
+ DCHECK_GE(type, 0);
+ DCHECK_LT(static_cast<size_t>(type), arraysize(kNotificationTypes));
+ DCHECK(kNotificationTypes[type].type == type);
+
+ std::string id_prefix(kNotificationTypes[type].notification_id_prefix);
+ return id_prefix.append(path);
+}
+
} // namespace
// Manages file browser notifications. Generates a desktop notification on
@@ -139,26 +174,22 @@ class FileBrowserNotifications::NotificationMessage {
NotificationType type,
const std::string& notification_id,
const string16& message)
- : profile_(profile),
- type_(type),
- notification_id_(notification_id),
- message_(message) {
+ : message_(message) {
const gfx::ImageSkia& icon =
*ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
- GetIconId(type_));
- const string16 replace_id = UTF8ToUTF16(notification_id_);
+ GetIconId(type));
+ const string16 replace_id = UTF8ToUTF16(notification_id);
DesktopNotificationService::AddIconNotification(
- GURL(), GetTitle(type_), message, icon, replace_id,
- new Delegate(host->AsWeakPtr(), notification_id_), profile_);
+ GURL(), GetTitle(type), message, icon, replace_id,
+ new Delegate(host->AsWeakPtr(), notification_id), profile);
}
- ~NotificationMessage() {
- }
+ ~NotificationMessage() {}
+
+ // Used in test.
+ string16 message() { return message_; }
private:
- Profile* profile_;
- NotificationType type_;
- std::string notification_id_;
string16 message_;
DISALLOW_COPY_AND_ASSIGN(NotificationMessage);
@@ -170,14 +201,12 @@ struct FileBrowserNotifications::MountRequestsInfo {
bool fail_notification_shown;
bool non_parent_device_failed;
bool device_notification_hidden;
- int fail_notifications_count;
MountRequestsInfo() : mount_success_exists(false),
fail_message_finalized(false),
fail_notification_shown(false),
non_parent_device_failed(false),
- device_notification_hidden(false),
- fail_notifications_count(0) {
+ device_notification_hidden(false) {
}
};
@@ -220,7 +249,7 @@ void FileBrowserNotifications::ManageNotificationsOnMountCompleted(
it->second.fail_notification_shown = false;
}
- // If notificaiton can't change any more, no need to continue.
+ // If notification can't change any more, no need to continue.
if (it->second.fail_message_finalized)
return;
@@ -265,8 +294,6 @@ void FileBrowserNotifications::ManageNotificationsOnMountCompleted(
it->second.fail_notification_shown = true;
}
- it->second.fail_notifications_count++;
-
if (!label.empty()) {
ShowNotificationWithMessage(DEVICE_FAIL, system_path,
l10n_util::GetStringFUTF16(notification_message_id,
@@ -286,7 +313,7 @@ void FileBrowserNotifications::ShowNotificationWithMessage(
NotificationType type,
const std::string& path,
const string16& message) {
- std::string notification_id = CreateNotificationId(type, path);
+ std::string notification_id = GetNotificationId(type, path);
hidden_notifications_.erase(notification_id);
ShowNotificationById(type, notification_id, message);
}
@@ -295,7 +322,7 @@ void FileBrowserNotifications::ShowNotificationDelayed(
NotificationType type,
const std::string& path,
base::TimeDelta delay) {
- std::string notification_id = CreateNotificationId(type, path);
+ std::string notification_id = GetNotificationId(type, path);
hidden_notifications_.erase(notification_id);
MessageLoop::current()->PostDelayedTask(
FROM_HERE,
@@ -306,7 +333,7 @@ void FileBrowserNotifications::ShowNotificationDelayed(
void FileBrowserNotifications::HideNotification(NotificationType type,
const std::string& path) {
- std::string notification_id = CreateNotificationId(type, path);
+ std::string notification_id = GetNotificationId(type, path);
HideNotificationById(notification_id);
}
@@ -319,34 +346,6 @@ void FileBrowserNotifications::HideNotificationDelayed(
delay);
}
-std::string FileBrowserNotifications::CreateNotificationId(
- NotificationType type,
- const std::string& path) {
- std::string id;
- switch (type) {
- case DEVICE:
- id = "D";
- break;
- case DEVICE_FAIL:
- id = "DF";
- break;
- case FORMAT_START:
- id = "FS";
- break;
- default:
- id = "FF";
- }
-
- if (type == DEVICE_FAIL) {
- MountRequestsMap::const_iterator it = mount_requests_.find(path);
- if (it != mount_requests_.end())
- id.append(base::IntToString(it->second.fail_notifications_count));
- }
-
- id.append(path);
- return id;
-}
-
void FileBrowserNotifications::ShowNotificationById(
NotificationType type,
const std::string& notification_id,
@@ -390,3 +389,12 @@ void FileBrowserNotifications::RemoveNotificationById(
delete notification;
}
}
+
+string16 FileBrowserNotifications::GetNotificationMessageForTest(
+ const std::string& id) const {
+ NotificationMap::const_iterator it = notification_map_.find(id);
+ if (it == notification_map_.end())
+ return string16();
+ return it->second->message();
+}
+

Powered by Google App Engine
This is Rietveld 408576698