blob: c09982a8f2735ef88d69fdff8e168e61aadfe02f [file] [log] [blame]
// Copyright 2016 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 "ui/message_center/views/message_view_factory.h"
#include "ui/message_center/notification_types.h"
#include "ui/message_center/views/custom_notification_view.h"
#include "ui/message_center/views/notification_view.h"
#if defined(OS_WIN)
#include "ui/base/win/shell.h"
#endif
namespace message_center {
// static
MessageView* MessageViewFactory::Create(MessageCenterController* controller,
const Notification& notification,
bool top_level) {
MessageView* notification_view = nullptr;
switch (notification.type()) {
case NOTIFICATION_TYPE_BASE_FORMAT:
case NOTIFICATION_TYPE_IMAGE:
case NOTIFICATION_TYPE_MULTIPLE:
case NOTIFICATION_TYPE_SIMPLE:
case NOTIFICATION_TYPE_PROGRESS:
// All above roads lead to the generic NotificationView.
notification_view = new NotificationView(controller, notification);
break;
case NOTIFICATION_TYPE_CUSTOM:
notification_view = new CustomNotificationView(controller, notification);
break;
default:
// If the caller asks for an unrecognized kind of view (entirely possible
// if an application is running on an older version of this code that
// doesn't have the requested kind of notification template), we'll fall
// back to a notification instance that will provide at least basic
// functionality.
LOG(WARNING) << "Unable to fulfill request for unrecognized "
<< "notification type " << notification.type() << ". "
<< "Falling back to simple notification type.";
notification_view = new NotificationView(controller, notification);
}
#if defined(OS_LINUX)
// Don't create shadows for notification toasts on Linux or CrOS.
if (top_level)
return notification_view;
#endif
#if defined(OS_WIN)
// Don't create shadows for notifications on Windows under classic theme.
if (top_level && !ui::win::IsAeroGlassEnabled()) {
return notification_view;
}
#endif // OS_WIN
notification_view->CreateShadowBorder();
return notification_view;
}
} // namespace message_center