15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_infobar_delegate.h"
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/content_settings/permission_queue_controller.h"
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h"
903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/generated_resources.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/locale_settings.h"
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/content_settings/core/common/content_settings_types.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/permission_request_id.h"
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/infobars/core/infobar.h"
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/navigation_entry.h"
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/web_contents.h"
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "grit/theme_resources.h"
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/base/net_util.h"
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)infobars::InfoBar* DesktopNotificationInfoBarDelegate::Create(
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    InfoBarService* infobar_service,
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PermissionQueueController* controller,
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const PermissionRequestID& id,
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const GURL& requesting_frame,
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& display_languages) {
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const content::NavigationEntry* committed_entry =
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      infobar_service->web_contents()->GetController().GetLastCommittedEntry();
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return infobar_service->AddInfoBar(ConfirmInfoBarDelegate::CreateInfoBar(
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      scoped_ptr<ConfirmInfoBarDelegate>(new DesktopNotificationInfoBarDelegate(
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          controller, id, requesting_frame,
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          committed_entry ? committed_entry->GetUniqueID() : 0,
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          display_languages))));
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)DesktopNotificationInfoBarDelegate::DesktopNotificationInfoBarDelegate(
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    PermissionQueueController* controller,
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const PermissionRequestID& id,
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const GURL& requesting_frame,
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    int contents_unique_id,
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& display_languages)
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : PermissionInfobarDelegate(controller, id, requesting_frame,
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                CONTENT_SETTINGS_TYPE_NOTIFICATIONS),
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      requesting_frame_(requesting_frame),
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      display_languages_(display_languages) {
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)DesktopNotificationInfoBarDelegate::~DesktopNotificationInfoBarDelegate() {
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int DesktopNotificationInfoBarDelegate::GetIconID() const {
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return IDR_INFOBAR_DESKTOP_NOTIFICATIONS;
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)base::string16 DesktopNotificationInfoBarDelegate::GetMessageText() const {
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return l10n_util::GetStringFUTF16(
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      IDS_NOTIFICATION_PERMISSIONS,
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      net::FormatUrl(requesting_frame_.GetOrigin(), display_languages_,
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                     net::kFormatUrlOmitUsernamePassword |
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                     net::kFormatUrlOmitTrailingSlashOnBareHostname,
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                     net::UnescapeRule::SPACES, NULL, NULL, NULL));
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
63