15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/custom_handlers/register_protocol_handler_permission_request.h"
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/generated_resources.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/user_metrics.h"
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "grit/theme_resources.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace {
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 GetProtocolName(
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const ProtocolHandler& handler) {
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (handler.protocol() == "mailto")
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return l10n_util::GetStringUTF16(IDS_REGISTER_PROTOCOL_HANDLER_MAILTO_NAME);
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (handler.protocol() == "webcal")
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return l10n_util::GetStringUTF16(IDS_REGISTER_PROTOCOL_HANDLER_WEBCAL_NAME);
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return base::UTF8ToUTF16(handler.protocol());
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)RegisterProtocolHandlerPermissionRequest
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)::RegisterProtocolHandlerPermissionRequest(
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ProtocolHandlerRegistry* registry,
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const ProtocolHandler& handler,
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      GURL url,
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      bool user_gesture)
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : registry_(registry),
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      handler_(handler),
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      url_(url),
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      user_gesture_(user_gesture) {}
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)RegisterProtocolHandlerPermissionRequest::
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)~RegisterProtocolHandlerPermissionRequest() {}
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)int RegisterProtocolHandlerPermissionRequest::GetIconID() const {
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return IDR_REGISTER_PROTOCOL_HANDLER;
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)RegisterProtocolHandlerPermissionRequest::GetMessageText() const {
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ProtocolHandler old_handler = registry_->GetHandlerFor(handler_.protocol());
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return old_handler.IsEmpty() ?
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      l10n_util::GetStringFUTF16(
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM,
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          base::UTF8ToUTF16(handler_.url().host()),
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          GetProtocolName(handler_)) :
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      l10n_util::GetStringFUTF16(
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM_REPLACE,
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          base::UTF8ToUTF16(handler_.url().host()),
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          GetProtocolName(handler_),
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          base::UTF8ToUTF16(old_handler.url().host()));
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)RegisterProtocolHandlerPermissionRequest::GetMessageTextFragment() const {
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ProtocolHandler old_handler = registry_->GetHandlerFor(handler_.protocol());
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return old_handler.IsEmpty() ?
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      l10n_util::GetStringFUTF16(
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM_FRAGMENT,
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          GetProtocolName(handler_)) :
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      l10n_util::GetStringFUTF16(
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM_REPLACE_FRAGMENT,
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          GetProtocolName(handler_),
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          base::UTF8ToUTF16(old_handler.url().host()));
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool RegisterProtocolHandlerPermissionRequest::HasUserGesture() const {
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return user_gesture_;
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)GURL RegisterProtocolHandlerPermissionRequest::GetRequestingHostname() const {
78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return url_;
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RegisterProtocolHandlerPermissionRequest::PermissionGranted() {
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  content::RecordAction(
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::UserMetricsAction("RegisterProtocolHandler.Infobar_Accept"));
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  registry_->OnAcceptRegisterProtocolHandler(handler_);
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RegisterProtocolHandlerPermissionRequest::PermissionDenied() {
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  content::RecordAction(
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::UserMetricsAction("RegisterProtocolHandler.InfoBar_Deny"));
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  registry_->OnIgnoreRegisterProtocolHandler(handler_);
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RegisterProtocolHandlerPermissionRequest::Cancelled() {
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  content::RecordAction(
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::UserMetricsAction("RegisterProtocolHandler.InfoBar_Deny"));
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  registry_->OnIgnoreRegisterProtocolHandler(handler_);
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void RegisterProtocolHandlerPermissionRequest::RequestFinished() {
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  delete this;
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
102