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