url_bar_controller_impl.cc 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. // Copyright 2020 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 "weblayer/browser/url_bar/url_bar_controller_impl.h"
  5. #include "base/strings/string_util.h"
  6. #include "base/strings/utf_string_conversions.h"
  7. #include "build/build_config.h"
  8. #include "components/omnibox/browser/autocomplete_input.h"
  9. #include "components/omnibox/browser/location_bar_model_impl.h"
  10. #include "components/security_state/content/content_utils.h"
  11. #include "components/security_state/core/security_state.h"
  12. #include "content/public/browser/web_contents.h"
  13. #include "content/public/common/content_constants.h"
  14. #include "weblayer/browser/browser_impl.h"
  15. #include "weblayer/browser/tab_impl.h"
  16. #include "weblayer/browser/url_bar/autocomplete_scheme_classifier_impl.h"
  17. #include "weblayer/public/browser.h"
  18. #include "weblayer/public/navigation_controller.h"
  19. #if BUILDFLAG(IS_ANDROID)
  20. #include "base/android/jni_string.h"
  21. #include "weblayer/browser/java/jni/UrlBarControllerImpl_jni.h"
  22. #include "weblayer/browser/url_bar/trusted_cdn_observer.h"
  23. #endif
  24. namespace weblayer {
  25. std::unique_ptr<UrlBarController> UrlBarController::Create(Browser* browser) {
  26. return std::make_unique<UrlBarControllerImpl>(
  27. static_cast<BrowserImpl*>(browser));
  28. }
  29. #if BUILDFLAG(IS_ANDROID)
  30. static jlong JNI_UrlBarControllerImpl_CreateUrlBarController(
  31. JNIEnv* env,
  32. jlong native_browser) {
  33. return reinterpret_cast<intptr_t>(
  34. new UrlBarControllerImpl(reinterpret_cast<BrowserImpl*>(native_browser)));
  35. }
  36. static void JNI_UrlBarControllerImpl_DeleteUrlBarController(
  37. JNIEnv* env,
  38. jlong native_urlbarcontroller) {
  39. delete reinterpret_cast<UrlBarControllerImpl*>(native_urlbarcontroller);
  40. }
  41. #endif
  42. UrlBarControllerImpl::UrlBarControllerImpl(BrowserImpl* browser)
  43. : browser_(browser),
  44. location_bar_model_(std::make_unique<LocationBarModelImpl>(
  45. this,
  46. content::kMaxURLDisplayChars)) {
  47. DCHECK(browser_);
  48. }
  49. UrlBarControllerImpl::~UrlBarControllerImpl() = default;
  50. #if BUILDFLAG(IS_ANDROID)
  51. base::android::ScopedJavaLocalRef<jstring>
  52. UrlBarControllerImpl::GetUrlForDisplay(JNIEnv* env) {
  53. return base::android::ScopedJavaLocalRef<jstring>(
  54. base::android::ConvertUTF16ToJavaString(env, GetUrlForDisplay()));
  55. }
  56. base::android::ScopedJavaLocalRef<jstring>
  57. UrlBarControllerImpl::GetPublisherUrl(JNIEnv* env) {
  58. GURL url;
  59. auto* active_web_contents = GetActiveWebContents();
  60. if (active_web_contents) {
  61. auto* trusted_cdn_observer =
  62. TrustedCDNObserver::FromWebContents(active_web_contents);
  63. if (trusted_cdn_observer)
  64. url = trusted_cdn_observer->publisher_url();
  65. }
  66. return base::android::ScopedJavaLocalRef<jstring>(
  67. base::android::ConvertUTF8ToJavaString(env, url.spec()));
  68. }
  69. jint UrlBarControllerImpl::GetConnectionSecurityLevel(JNIEnv* env) {
  70. return GetConnectionSecurityLevel();
  71. }
  72. #endif
  73. std::u16string UrlBarControllerImpl::GetUrlForDisplay() {
  74. return location_bar_model_->GetURLForDisplay();
  75. }
  76. security_state::SecurityLevel
  77. UrlBarControllerImpl::GetConnectionSecurityLevel() {
  78. auto* active_web_contents = GetActiveWebContents();
  79. if (!active_web_contents)
  80. return security_state::SecurityLevel::NONE;
  81. auto state = security_state::GetVisibleSecurityState(active_web_contents);
  82. DCHECK(state);
  83. return security_state::GetSecurityLevel(
  84. *state, /* used_policy_installed_certificate= */ false);
  85. }
  86. bool UrlBarControllerImpl::GetURL(GURL* url) const {
  87. auto* active_web_contents = GetActiveWebContents();
  88. if (!active_web_contents)
  89. return false;
  90. DCHECK(url);
  91. *url = active_web_contents->GetVisibleURL();
  92. return true;
  93. }
  94. bool UrlBarControllerImpl::ShouldTrimDisplayUrlAfterHostName() const {
  95. return true;
  96. }
  97. std::u16string UrlBarControllerImpl::FormattedStringWithEquivalentMeaning(
  98. const GURL& url,
  99. const std::u16string& formatted_url) const {
  100. return AutocompleteInput::FormattedStringWithEquivalentMeaning(
  101. url, formatted_url, AutocompleteSchemeClassifierImpl(), nullptr);
  102. }
  103. content::WebContents* UrlBarControllerImpl::GetActiveWebContents() const {
  104. auto* active_tab = static_cast<TabImpl*>(browser_->GetActiveTab());
  105. if (!active_tab)
  106. return nullptr;
  107. return active_tab->web_contents();
  108. }
  109. } // namespace weblayer