| // Copyright 2016 The Chromium Authors | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "chrome/browser/notifications/notification_common.h" | 
 |  | 
 | #include "build/build_config.h" | 
 | #include "build/chromeos_buildflags.h" | 
 | #include "chrome/browser/profiles/profile.h" | 
 | #include "chrome/browser/ui/chrome_pages.h" | 
 | #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" | 
 | #include "content/public/browser/browser_context.h" | 
 | #include "ui/message_center/public/cpp/notifier_id.h" | 
 |  | 
 | NotificationCommon::Metadata::~Metadata() = default; | 
 |  | 
 | PersistentNotificationMetadata::PersistentNotificationMetadata() { | 
 |   type = NotificationHandler::Type::WEB_PERSISTENT; | 
 | } | 
 |  | 
 | PersistentNotificationMetadata::~PersistentNotificationMetadata() = default; | 
 |  | 
 | // static | 
 | const PersistentNotificationMetadata* PersistentNotificationMetadata::From( | 
 |     const Metadata* metadata) { | 
 |   if (!metadata || metadata->type != NotificationHandler::Type::WEB_PERSISTENT) | 
 |     return nullptr; | 
 |  | 
 |   return static_cast<const PersistentNotificationMetadata*>(metadata); | 
 | } | 
 |  | 
 | NonPersistentNotificationMetadata::NonPersistentNotificationMetadata() { | 
 |   type = NotificationHandler::Type::WEB_NON_PERSISTENT; | 
 | } | 
 |  | 
 | NonPersistentNotificationMetadata::~NonPersistentNotificationMetadata() = | 
 |     default; | 
 |  | 
 | // static | 
 | const NonPersistentNotificationMetadata* | 
 | NonPersistentNotificationMetadata::From(const Metadata* metadata) { | 
 |   if (!metadata || | 
 |       metadata->type != NotificationHandler::Type::WEB_NON_PERSISTENT) | 
 |     return nullptr; | 
 |  | 
 |   return static_cast<const NonPersistentNotificationMetadata*>(metadata); | 
 | } | 
 |  | 
 | // static | 
 | void NotificationCommon::OpenNotificationSettings(Profile* profile, | 
 |                                                   const GURL& origin) { | 
 | // TODO(peter): Use the |origin| to direct the user to a more appropriate | 
 | // settings page to toggle permission. | 
 |  | 
 | #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS_ASH) | 
 | // Android settings are handled through Java. Chrome OS settings are handled | 
 | // through the tray's setting panel. | 
 | NOTREACHED(); | 
 | #else | 
 |   chrome::ScopedTabbedBrowserDisplayer browser_displayer(profile); | 
 |   chrome::ShowContentSettingsExceptions(browser_displayer.browser(), | 
 |                                         ContentSettingsType::NOTIFICATIONS); | 
 | #endif | 
 | } |