register_protocol_handler_permission_request.cc 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. #include "components/custom_handlers/register_protocol_handler_permission_request.h"
  5. #include "base/bind.h"
  6. #include "base/metrics/user_metrics.h"
  7. #include "base/strings/utf_string_conversions.h"
  8. #include "components/custom_handlers/protocol_handler_registry.h"
  9. #include "components/permissions/request_type.h"
  10. #include "components/strings/grit/components_strings.h"
  11. #include "ui/base/l10n/l10n_util.h"
  12. #include "url/gurl.h"
  13. namespace custom_handlers {
  14. RegisterProtocolHandlerPermissionRequest::
  15. RegisterProtocolHandlerPermissionRequest(
  16. custom_handlers::ProtocolHandlerRegistry* registry,
  17. const ProtocolHandler& handler,
  18. GURL url,
  19. base::ScopedClosureRunner fullscreen_block)
  20. : PermissionRequest(
  21. url.DeprecatedGetOriginAsURL(),
  22. permissions::RequestType::kRegisterProtocolHandler,
  23. /*has_gesture=*/false,
  24. base::BindOnce(
  25. &RegisterProtocolHandlerPermissionRequest::PermissionDecided,
  26. base::Unretained(this)),
  27. base::BindOnce(
  28. &RegisterProtocolHandlerPermissionRequest::DeleteRequest,
  29. base::Unretained(this))),
  30. registry_(registry),
  31. handler_(handler),
  32. fullscreen_block_(std::move(fullscreen_block)) {}
  33. RegisterProtocolHandlerPermissionRequest::
  34. ~RegisterProtocolHandlerPermissionRequest() = default;
  35. bool RegisterProtocolHandlerPermissionRequest::IsDuplicateOf(
  36. permissions::PermissionRequest* other_request) const {
  37. // The downcast here is safe because PermissionRequest::IsDuplicateOf ensures
  38. // that both requests are of type kRegisterProtocolHandler.
  39. return permissions::PermissionRequest::IsDuplicateOf(other_request) &&
  40. handler_.protocol() ==
  41. static_cast<RegisterProtocolHandlerPermissionRequest*>(
  42. other_request)
  43. ->handler_.protocol();
  44. }
  45. std::u16string
  46. RegisterProtocolHandlerPermissionRequest::GetMessageTextFragment() const {
  47. ProtocolHandler old_handler = registry_->GetHandlerFor(handler_.protocol());
  48. return old_handler.IsEmpty()
  49. ? l10n_util::GetStringFUTF16(
  50. IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM_FRAGMENT,
  51. handler_.GetProtocolDisplayName())
  52. : l10n_util::GetStringFUTF16(
  53. IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM_REPLACE_FRAGMENT,
  54. handler_.GetProtocolDisplayName(),
  55. base::UTF8ToUTF16(old_handler.url().host_piece()));
  56. }
  57. void RegisterProtocolHandlerPermissionRequest::PermissionDecided(
  58. ContentSetting result,
  59. bool is_one_time) {
  60. DCHECK(!is_one_time);
  61. if (result == ContentSetting::CONTENT_SETTING_ALLOW) {
  62. base::RecordAction(
  63. base::UserMetricsAction("RegisterProtocolHandler.Infobar_Accept"));
  64. registry_->OnAcceptRegisterProtocolHandler(handler_);
  65. } else {
  66. DCHECK(result == CONTENT_SETTING_BLOCK ||
  67. result == CONTENT_SETTING_DEFAULT);
  68. base::RecordAction(
  69. base::UserMetricsAction("RegisterProtocolHandler.InfoBar_Deny"));
  70. registry_->OnIgnoreRegisterProtocolHandler(handler_);
  71. }
  72. }
  73. void RegisterProtocolHandlerPermissionRequest::DeleteRequest() {
  74. delete this;
  75. }
  76. } // namespace custom_handlers