Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/toolbar/chrome_toolbar_model_delegate.h" | 5 #include "chrome/browser/ui/toolbar/chrome_toolbar_model_delegate.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | |
| 7 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 8 #include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h" | 9 #include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h" |
| 9 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
| 11 #include "chrome/browser/search/search.h" | |
| 12 #include "chrome/browser/ssl/chrome_security_state_model_client.h" | |
| 10 #include "chrome/common/pref_names.h" | 13 #include "chrome/common/pref_names.h" |
| 14 #include "chrome/common/url_constants.h" | |
| 15 #include "components/google/core/browser/google_util.h" | |
| 11 #include "components/omnibox/browser/autocomplete_input.h" | 16 #include "components/omnibox/browser/autocomplete_input.h" |
| 17 #include "content/public/browser/cert_store.h" | |
| 12 #include "content/public/browser/navigation_controller.h" | 18 #include "content/public/browser/navigation_controller.h" |
| 13 #include "content/public/browser/navigation_entry.h" | 19 #include "content/public/browser/navigation_entry.h" |
| 14 #include "content/public/browser/web_contents.h" | 20 #include "content/public/browser/web_contents.h" |
| 21 #include "content/public/common/ssl_status.h" | |
| 22 | |
| 23 ChromeToolbarModelDelegate::~ChromeToolbarModelDelegate() {} | |
| 15 | 24 |
| 16 std::string ChromeToolbarModelDelegate::GetAcceptLanguages() const { | 25 std::string ChromeToolbarModelDelegate::GetAcceptLanguages() const { |
| 17 Profile* profile = GetProfile(); | 26 Profile* profile = GetProfile(); |
| 18 return profile ? profile->GetPrefs()->GetString(prefs::kAcceptLanguages) | 27 return profile ? profile->GetPrefs()->GetString(prefs::kAcceptLanguages) |
| 19 : std::string(); | 28 : std::string(); |
| 20 } | 29 } |
| 21 | 30 |
| 22 base::string16 ChromeToolbarModelDelegate::FormattedStringWithEquivalentMeaning( | 31 base::string16 ChromeToolbarModelDelegate::FormattedStringWithEquivalentMeaning( |
| 23 const GURL& url, | 32 const GURL& url, |
| 24 const base::string16& formatted_url) const { | 33 const base::string16& formatted_url) const { |
| 25 return AutocompleteInput::FormattedStringWithEquivalentMeaning( | 34 return AutocompleteInput::FormattedStringWithEquivalentMeaning( |
| 26 url, formatted_url, ChromeAutocompleteSchemeClassifier(GetProfile())); | 35 url, formatted_url, ChromeAutocompleteSchemeClassifier(GetProfile())); |
| 27 } | 36 } |
| 28 | 37 |
| 29 ChromeToolbarModelDelegate::~ChromeToolbarModelDelegate() {} | 38 bool ChromeToolbarModelDelegate::GetURL(GURL* url) const { |
| 39 DCHECK(url); | |
| 40 content::NavigationEntry* entry = GetNavigationEntry(); | |
| 41 if (entry) { | |
|
Peter Kasting
2016/02/02 23:51:30
Nit: Reverse conditional and early-return to avoid
sdefresne
2016/02/03 13:14:17
Done.
| |
| 42 *url = ShouldDisplayURL() ? entry->GetVirtualURL() : GURL(); | |
| 43 return true; | |
| 44 } | |
| 45 return false; | |
| 46 } | |
| 47 | |
| 48 bool ChromeToolbarModelDelegate::ShouldDisplayURL() const { | |
| 49 // Note: The order here is important. | |
| 50 // - The WebUI test must come before the extension scheme test because there | |
| 51 // can be WebUIs that have extension schemes (e.g. the bookmark manager). In | |
| 52 // that case, we should prefer what the WebUI instance says. | |
| 53 // - The view-source test must come before the NTP test because of the case | |
| 54 // of view-source:chrome://newtab, which should display its URL despite what | |
| 55 // chrome://newtab says. | |
| 56 content::NavigationEntry* entry = GetNavigationEntry(); | |
| 57 if (entry) { | |
| 58 if (entry->IsViewSourceMode() || | |
| 59 entry->GetPageType() == content::PAGE_TYPE_INTERSTITIAL) { | |
| 60 return true; | |
| 61 } | |
| 62 | |
| 63 GURL url = entry->GetURL(); | |
| 64 GURL virtual_url = entry->GetVirtualURL(); | |
| 65 if (url.SchemeIs(content::kChromeUIScheme) || | |
| 66 virtual_url.SchemeIs(content::kChromeUIScheme)) { | |
| 67 if (!url.SchemeIs(content::kChromeUIScheme)) | |
| 68 url = virtual_url; | |
| 69 return url.host() != chrome::kChromeUINewTabHost; | |
| 70 } | |
| 71 } | |
| 72 | |
| 73 return !search::IsInstantNTP(GetActiveWebContents()); | |
| 74 } | |
| 75 | |
| 76 security_state::SecurityStateModel::SecurityLevel | |
| 77 ChromeToolbarModelDelegate::GetSecurityLevel() const { | |
| 78 content::WebContents* web_contents = GetActiveWebContents(); | |
| 79 // If there is no active WebContents (which can happen during toolbar | |
| 80 // initialization), assume no security style. | |
| 81 if (!web_contents) | |
| 82 return security_state::SecurityStateModel::NONE; | |
| 83 return ChromeSecurityStateModelClient::FromWebContents(web_contents) | |
|
Peter Kasting
2016/02/02 23:51:30
Nit: Shorter:
auto* client = ChromeSecurityStat
sdefresne
2016/02/03 13:14:17
Done.
| |
| 84 ->GetSecurityInfo() | |
| 85 .security_level; | |
| 86 } | |
| 87 | |
| 88 base::string16 ChromeToolbarModelDelegate::GetSearchTerms( | |
| 89 security_state::SecurityStateModel::SecurityLevel security_level) const { | |
| 90 content::WebContents* web_contents = GetActiveWebContents(); | |
| 91 base::string16 search_terms(search::GetSearchTerms(web_contents)); | |
| 92 if (search_terms.empty()) { | |
| 93 // We mainly do this to enforce the subsequent DCHECK. | |
| 94 return base::string16(); | |
| 95 } | |
| 96 | |
| 97 // If the page is still loading and the security style is unknown, consider | |
| 98 // the page secure. Without this, after the user hit enter on some search | |
| 99 // terms, the omnibox would change to displaying the loading URL before | |
| 100 // changing back to the search terms once they could be extracted, thus | |
| 101 // causing annoying flicker. | |
| 102 DCHECK(web_contents); | |
| 103 content::NavigationController& nav_controller = web_contents->GetController(); | |
| 104 content::NavigationEntry* entry = nav_controller.GetVisibleEntry(); | |
| 105 if ((entry != nav_controller.GetLastCommittedEntry()) && | |
| 106 (entry->GetSSL().security_style == content::SECURITY_STYLE_UNKNOWN)) | |
| 107 return search_terms; | |
| 108 | |
| 109 // If the URL is using a Google base URL specified via the command line, we | |
| 110 // bypass the security check below. | |
| 111 if (entry && | |
| 112 google_util::StartsWithCommandLineGoogleBaseURL(entry->GetVirtualURL())) | |
| 113 return search_terms; | |
| 114 | |
| 115 // Otherwise, extract search terms for HTTPS pages that do not have a security | |
| 116 // error. | |
| 117 return ((security_level == security_state::SecurityStateModel::NONE) || | |
| 118 (security_level == | |
| 119 security_state::SecurityStateModel::SECURITY_ERROR)) | |
| 120 ? base::string16() | |
| 121 : search_terms; | |
|
Peter Kasting
2016/02/02 23:51:30
Nit: Shorter:
bool extract_search_terms =
sdefresne
2016/02/03 13:14:17
Done.
| |
| 122 } | |
| 123 | |
| 124 scoped_refptr<net::X509Certificate> ChromeToolbarModelDelegate::GetCertificate() | |
| 125 const { | |
| 126 scoped_refptr<net::X509Certificate> cert; | |
| 127 content::NavigationEntry* entry = GetNavigationEntry(); | |
| 128 if (entry) { | |
| 129 content::CertStore::GetInstance()->RetrieveCert(entry->GetSSL().cert_id, | |
| 130 &cert); | |
| 131 } | |
| 132 return cert; | |
| 133 } | |
| 30 | 134 |
| 31 content::NavigationController* | 135 content::NavigationController* |
| 32 ChromeToolbarModelDelegate::GetNavigationController() const { | 136 ChromeToolbarModelDelegate::GetNavigationController() const { |
| 33 // This |current_tab| can be null during the initialization of the toolbar | 137 // This |current_tab| can be null during the initialization of the toolbar |
| 34 // during window creation (i.e. before any tabs have been added to the | 138 // during window creation (i.e. before any tabs have been added to the |
| 35 // window). | 139 // window). |
| 36 content::WebContents* current_tab = GetActiveWebContents(); | 140 content::WebContents* current_tab = GetActiveWebContents(); |
| 37 return current_tab ? ¤t_tab->GetController() : nullptr; | 141 return current_tab ? ¤t_tab->GetController() : nullptr; |
| 38 } | 142 } |
| 39 | 143 |
| 144 content::NavigationEntry* ChromeToolbarModelDelegate::GetNavigationEntry() | |
| 145 const { | |
| 146 content::NavigationController* controller = GetNavigationController(); | |
| 147 return controller ? controller->GetVisibleEntry() : nullptr; | |
| 148 } | |
| 149 | |
| 40 Profile* ChromeToolbarModelDelegate::GetProfile() const { | 150 Profile* ChromeToolbarModelDelegate::GetProfile() const { |
| 41 content::NavigationController* navigation_controller = | 151 content::NavigationController* controller = GetNavigationController(); |
| 42 GetNavigationController(); | 152 return controller |
| 43 return navigation_controller ? Profile::FromBrowserContext( | 153 ? Profile::FromBrowserContext(controller->GetBrowserContext()) |
| 44 navigation_controller->GetBrowserContext()) | 154 : nullptr; |
| 45 : nullptr; | |
| 46 } | 155 } |
| OLD | NEW |