Home | History | Annotate | Download | only in content_settings
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/content_settings/permission_bubble_request_impl.h"
      6 
      7 #include "chrome/browser/content_settings/permission_context_base.h"
      8 #include "chrome/browser/content_settings/permission_context_uma_util.h"
      9 #include "chrome/grit/generated_resources.h"
     10 #include "grit/theme_resources.h"
     11 #include "net/base/net_util.h"
     12 #include "ui/base/l10n/l10n_util.h"
     13 
     14 PermissionBubbleRequestImpl::PermissionBubbleRequestImpl(
     15     const GURL& request_origin,
     16     bool user_gesture,
     17     ContentSettingsType type,
     18     const std::string& display_languages,
     19     const base::Callback<void(bool, bool)> permission_decided_callback,
     20     const base::Closure delete_callback)
     21     : request_origin_(request_origin),
     22       user_gesture_(user_gesture),
     23       type_(type),
     24       display_languages_(display_languages),
     25       permission_decided_callback_(permission_decided_callback),
     26       delete_callback_(delete_callback),
     27       is_finished_(false),
     28       action_taken_(false) {
     29 }
     30 
     31 PermissionBubbleRequestImpl::~PermissionBubbleRequestImpl() {
     32   DCHECK(is_finished_);
     33   if (!action_taken_)
     34     PermissionContextUmaUtil::PermissionIgnored(type_);
     35 }
     36 
     37 int PermissionBubbleRequestImpl::GetIconID() const {
     38   int icon_id;
     39   switch (type_) {
     40 #if defined(ENABLE_NOTIFICATIONS)
     41     case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
     42       icon_id = IDR_INFOBAR_DESKTOP_NOTIFICATIONS;
     43       break;
     44 #endif
     45     case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
     46       icon_id = IDR_ALLOWED_MIDI_SYSEX;
     47       break;
     48     case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING:
     49       icon_id = IDR_INFOBAR_WARNING;
     50       break;
     51     default:
     52       NOTREACHED();
     53       return IDR_INFOBAR_WARNING;
     54   }
     55   return icon_id;
     56 }
     57 
     58 base::string16 PermissionBubbleRequestImpl::GetMessageText() const {
     59   int message_id;
     60   switch (type_) {
     61 #if defined(ENABLE_NOTIFICATIONS)
     62       case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
     63         message_id = IDS_NOTIFICATION_PERMISSIONS;
     64         break;
     65 #endif
     66       case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
     67         message_id = IDS_MIDI_SYSEX_INFOBAR_QUESTION;
     68         break;
     69       case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING:
     70         message_id = IDS_PUSH_MESSAGES_PERMISSION_QUESTION;
     71         break;
     72       default:
     73         NOTREACHED();
     74         return base::string16();
     75     }
     76   return l10n_util::GetStringFUTF16(
     77       message_id,
     78       net::FormatUrl(request_origin_, display_languages_,
     79                      net::kFormatUrlOmitUsernamePassword |
     80                      net::kFormatUrlOmitTrailingSlashOnBareHostname,
     81                      net::UnescapeRule::SPACES, NULL, NULL, NULL));
     82 }
     83 
     84 base::string16 PermissionBubbleRequestImpl::GetMessageTextFragment() const {
     85   int message_id;
     86   switch (type_) {
     87 #if defined(ENABLE_NOTIFICATIONS)
     88     case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
     89       message_id = IDS_NOTIFICATION_PERMISSIONS_FRAGMENT;
     90       break;
     91 #endif
     92     case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
     93       message_id = IDS_MIDI_SYSEX_PERMISSION_FRAGMENT;
     94       break;
     95     case CONTENT_SETTINGS_TYPE_PUSH_MESSAGING:
     96       message_id = IDS_PUSH_MESSAGES_BUBBLE_FRAGMENT;
     97       break;
     98     default:
     99       NOTREACHED();
    100       return base::string16();
    101   }
    102   return l10n_util::GetStringUTF16(message_id);
    103 }
    104 
    105 bool PermissionBubbleRequestImpl::HasUserGesture() const {
    106   return user_gesture_;
    107 }
    108 
    109 GURL PermissionBubbleRequestImpl::GetRequestingHostname() const {
    110   return request_origin_;
    111 }
    112 
    113 void PermissionBubbleRequestImpl::PermissionGranted() {
    114   RegisterActionTaken();
    115   permission_decided_callback_.Run(true, true);
    116 }
    117 
    118 void PermissionBubbleRequestImpl::PermissionDenied() {
    119   RegisterActionTaken();
    120   permission_decided_callback_.Run(true, false);
    121 }
    122 
    123 void PermissionBubbleRequestImpl::Cancelled() {
    124   RegisterActionTaken();
    125   permission_decided_callback_.Run(false, false);
    126 }
    127 
    128 void PermissionBubbleRequestImpl::RequestFinished() {
    129   is_finished_ = true;
    130   delete_callback_.Run();
    131 }
    132