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

Unified Diff: chrome/browser/chromeos/extensions/file_manager/desktop_notifications.cc

Issue 23945002: file_manager: Move non-binding code to c/b/chromeos/file_manager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 3 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: chrome/browser/chromeos/extensions/file_manager/desktop_notifications.cc
diff --git a/chrome/browser/chromeos/extensions/file_manager/desktop_notifications.cc b/chrome/browser/chromeos/extensions/file_manager/desktop_notifications.cc
deleted file mode 100644
index dc6c58132f349d9a7f2bd8466c75039f335c3be0..0000000000000000000000000000000000000000
--- a/chrome/browser/chromeos/extensions/file_manager/desktop_notifications.cc
+++ /dev/null
@@ -1,388 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/chromeos/extensions/file_manager/desktop_notifications.h"
-
-#include "base/bind.h"
-#include "base/message_loop/message_loop.h"
-#include "base/stl_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/chromeos/extensions/file_manager/url_util.h"
-#include "chrome/browser/notifications/desktop_notification_service.h"
-#include "chrome/browser/notifications/notification_delegate.h"
-#include "grit/generated_resources.h"
-#include "grit/theme_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
-
-namespace file_manager {
-namespace {
-
-struct NotificationTypeInfo {
- DesktopNotifications::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[] = {
- {
- DesktopNotifications::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
- },
- {
- DesktopNotifications::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
- },
- {
- DesktopNotifications::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
- },
- {
- DesktopNotifications::FORMAT_START, // type
- "FormatStart_", // notification_id_prefix
- IDR_FILES_APP_ICON, // icon_id
- IDS_FORMATTING_OF_DEVICE_PENDING_TITLE, // title_id
- IDS_FORMATTING_OF_DEVICE_PENDING_MESSAGE // message_id
- },
- {
- DesktopNotifications::FORMAT_START_FAIL, // type
- "FormatComplete_", // notification_id_prefix
- IDR_FILES_APP_ICON, // icon_id
- IDS_FORMATTING_OF_DEVICE_FAILED_TITLE, // title_id
- IDS_FORMATTING_STARTED_FAILURE_MESSAGE // message_id
- },
- {
- DesktopNotifications::FORMAT_SUCCESS, // type
- "FormatComplete_", // notification_id_prefix
- IDR_FILES_APP_ICON, // icon_id
- IDS_FORMATTING_OF_DEVICE_FINISHED_TITLE, // title_id
- IDS_FORMATTING_FINISHED_SUCCESS_MESSAGE // message_id
- },
- {
- DesktopNotifications::FORMAT_FAIL, // type
- "FormatComplete_", // notifications_id_prefix
- IDR_FILES_APP_ICON, // icon_id
- IDS_FORMATTING_OF_DEVICE_FAILED_TITLE, // title_id
- IDS_FORMATTING_FINISHED_FAILURE_MESSAGE // message_id
- },
-};
-
-int GetIconId(DesktopNotifications::NotificationType type) {
- 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(DesktopNotifications::NotificationType type) {
- 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(DesktopNotifications::NotificationType type) {
- 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(DesktopNotifications::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
-// construction and removes it from the host when closed. Owned by the host.
-class DesktopNotifications::NotificationMessage {
- public:
- class Delegate : public NotificationDelegate {
- public:
- Delegate(const base::WeakPtr<DesktopNotifications>& host,
- const std::string& id)
- : host_(host),
- id_(id) {}
- virtual void Display() OVERRIDE {}
- virtual void Error() OVERRIDE {}
- virtual void Close(bool by_user) OVERRIDE {
- if (host_)
- host_->RemoveNotificationById(id_);
- }
- virtual void Click() OVERRIDE {
- // TODO(tbarzic): Show more info page once we have one.
- }
- virtual std::string id() const OVERRIDE { return id_; }
- virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE {
- return NULL;
- }
-
- private:
- virtual ~Delegate() {}
-
- base::WeakPtr<DesktopNotifications> host_;
- std::string id_;
-
- DISALLOW_COPY_AND_ASSIGN(Delegate);
- };
-
- NotificationMessage(DesktopNotifications* host,
- Profile* profile,
- NotificationType type,
- const std::string& notification_id,
- const string16& message)
- : message_(message) {
- const gfx::Image& icon =
- ResourceBundle::GetSharedInstance().GetNativeImageNamed(
- GetIconId(type));
- // TODO(mukai): refactor here to invoke NotificationUIManager directly.
- const string16 replace_id = UTF8ToUTF16(notification_id);
- DesktopNotificationService::AddIconNotification(
- util::GetFileManagerBaseUrl(), GetTitle(type),
- message, icon, replace_id,
- new Delegate(host->AsWeakPtr(), notification_id), profile);
- }
-
- ~NotificationMessage() {}
-
- // Used in test.
- string16 message() { return message_; }
-
- private:
- string16 message_;
-
- DISALLOW_COPY_AND_ASSIGN(NotificationMessage);
-};
-
-struct DesktopNotifications::MountRequestsInfo {
- bool mount_success_exists;
- bool fail_message_finalized;
- bool fail_notification_shown;
- bool non_parent_device_failed;
- bool device_notification_hidden;
-
- MountRequestsInfo() : mount_success_exists(false),
- fail_message_finalized(false),
- fail_notification_shown(false),
- non_parent_device_failed(false),
- device_notification_hidden(false) {
- }
-};
-
-DesktopNotifications::DesktopNotifications(Profile* profile)
- : profile_(profile) {
-}
-
-DesktopNotifications::~DesktopNotifications() {
- STLDeleteContainerPairSecondPointers(notification_map_.begin(),
- notification_map_.end());
-}
-
-void DesktopNotifications::RegisterDevice(const std::string& path) {
- mount_requests_.insert(MountRequestsMap::value_type(path,
- MountRequestsInfo()));
-}
-
-void DesktopNotifications::UnregisterDevice(const std::string& path) {
- mount_requests_.erase(path);
-}
-
-void DesktopNotifications::ManageNotificationsOnMountCompleted(
- const std::string& system_path, const std::string& label, bool is_parent,
- bool success, bool is_unsupported) {
- MountRequestsMap::iterator it = mount_requests_.find(system_path);
- if (it == mount_requests_.end())
- return;
-
- // We have to hide device scanning notification if we haven't done it already.
- if (!it->second.device_notification_hidden) {
- HideNotification(DEVICE, system_path);
- it->second.device_notification_hidden = true;
- }
-
- // Check if there is fail notification for parent device. If so, disregard it.
- // (parent device contains partition table, which is unmountable).
- if (!is_parent && it->second.fail_notification_shown &&
- !it->second.non_parent_device_failed) {
- HideNotification(DEVICE_FAIL, system_path);
- it->second.fail_notification_shown = false;
- }
-
- // If notification can't change any more, no need to continue.
- if (it->second.fail_message_finalized)
- return;
-
- // Do we have a multi-partition device for which at least one mount failed.
- bool fail_on_multipartition_device =
- success ? it->second.non_parent_device_failed
- : it->second.mount_success_exists ||
- it->second.non_parent_device_failed;
-
- base::string16 message;
- if (fail_on_multipartition_device) {
- it->second.fail_message_finalized = true;
- message = label.empty() ?
- l10n_util::GetStringUTF16(
- IDS_MULTIPART_DEVICE_UNSUPPORTED_DEFAULT_MESSAGE) :
- l10n_util::GetStringFUTF16(
- IDS_MULTIPART_DEVICE_UNSUPPORTED_MESSAGE, UTF8ToUTF16(label));
- } else if (!success) {
- // First device failed.
- if (!is_unsupported) {
- message = label.empty() ?
- l10n_util::GetStringUTF16(IDS_DEVICE_UNKNOWN_DEFAULT_MESSAGE) :
- l10n_util::GetStringFUTF16(IDS_DEVICE_UNKNOWN_MESSAGE,
- UTF8ToUTF16(label));
- } else {
- message = label.empty() ?
- l10n_util::GetStringUTF16(IDS_DEVICE_UNSUPPORTED_DEFAULT_MESSAGE) :
- l10n_util::GetStringFUTF16(IDS_DEVICE_UNSUPPORTED_MESSAGE,
- UTF8ToUTF16(label));
- }
- }
-
- if (success) {
- it->second.mount_success_exists = true;
- } else {
- it->second.non_parent_device_failed |= !is_parent;
- }
-
- if (message.empty())
- return;
-
- if (it->second.fail_notification_shown) {
- HideNotification(DEVICE_FAIL, system_path);
- } else {
- it->second.fail_notification_shown = true;
- }
-
- ShowNotificationWithMessage(DEVICE_FAIL, system_path, message);
-}
-
-void DesktopNotifications::ShowNotification(NotificationType type,
- const std::string& path) {
- ShowNotificationWithMessage(type, path, GetMessage(type));
-}
-
-void DesktopNotifications::ShowNotificationWithMessage(
- NotificationType type,
- const std::string& path,
- const string16& message) {
- std::string notification_id = GetNotificationId(type, path);
- hidden_notifications_.erase(notification_id);
- ShowNotificationById(type, notification_id, message);
-}
-
-void DesktopNotifications::ShowNotificationDelayed(
- NotificationType type,
- const std::string& path,
- base::TimeDelta delay) {
- std::string notification_id = GetNotificationId(type, path);
- hidden_notifications_.erase(notification_id);
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&DesktopNotifications::ShowNotificationById, AsWeakPtr(),
- type, notification_id, GetMessage(type)),
- delay);
-}
-
-void DesktopNotifications::HideNotification(NotificationType type,
- const std::string& path) {
- std::string notification_id = GetNotificationId(type, path);
- HideNotificationById(notification_id);
-}
-
-void DesktopNotifications::HideNotificationDelayed(
- NotificationType type, const std::string& path, base::TimeDelta delay) {
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&DesktopNotifications::HideNotification, AsWeakPtr(),
- type, path),
- delay);
-}
-
-void DesktopNotifications::ShowNotificationById(
- NotificationType type,
- const std::string& notification_id,
- const string16& message) {
- if (hidden_notifications_.find(notification_id) !=
- hidden_notifications_.end()) {
- // Notification was hidden after a delayed show was requested.
- hidden_notifications_.erase(notification_id);
- return;
- }
- if (notification_map_.find(notification_id) != notification_map_.end()) {
- // Remove any existing notification with |notification_id|.
- // Will trigger Delegate::Close which will call RemoveNotificationById.
- DesktopNotificationService::RemoveNotification(notification_id);
- DCHECK(notification_map_.find(notification_id) == notification_map_.end());
- }
- // Create a new notification with |notification_id|.
- NotificationMessage* new_message =
- new NotificationMessage(this, profile_, type, notification_id, message);
- notification_map_[notification_id] = new_message;
-}
-
-void DesktopNotifications::HideNotificationById(
- const std::string& notification_id) {
- NotificationMap::iterator it = notification_map_.find(notification_id);
- if (it != notification_map_.end()) {
- // Will trigger Delegate::Close which will call RemoveNotificationById.
- DesktopNotificationService::RemoveNotification(notification_id);
- } else {
- // Mark as hidden so it does not get shown from a delayed task.
- hidden_notifications_.insert(notification_id);
- }
-}
-
-void DesktopNotifications::RemoveNotificationById(
- const std::string& notification_id) {
- NotificationMap::iterator it = notification_map_.find(notification_id);
- if (it != notification_map_.end()) {
- NotificationMessage* notification = it->second;
- notification_map_.erase(it);
- delete notification;
- }
-}
-
-string16 DesktopNotifications::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();
-}
-
-} // namespace file_manager

Powered by Google App Engine
This is Rietveld 408576698