Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6999)

Unified Diff: chrome/browser/google/google_url_tracker.cc

Issue 10391152: Merge 136205 - Support scheme-setting for GoogleURLTracker. (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1132/src/
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/google/google_url_tracker.h ('k') | chrome/browser/google/google_url_tracker_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/google/google_url_tracker.cc
===================================================================
--- chrome/browser/google/google_url_tracker.cc (revision 137284)
+++ chrome/browser/google/google_url_tracker.cc (working copy)
@@ -45,6 +45,11 @@
google_url_tracker, new_google_url);
}
+string16 GetHost(const GURL& url) {
+ DCHECK(url.is_valid());
+ return net::StripWWW(UTF8ToUTF16(url.host()));
+}
+
} // namespace
// GoogleURLTrackerInfoBarDelegate --------------------------------------------
@@ -63,7 +68,7 @@
}
bool GoogleURLTrackerInfoBarDelegate::Accept() {
- google_url_tracker_->AcceptGoogleURL(new_google_url_);
+ google_url_tracker_->AcceptGoogleURL(new_google_url_, true);
return false;
}
@@ -87,6 +92,11 @@
return false;
}
+void GoogleURLTrackerInfoBarDelegate::SetGoogleURL(const GURL& new_google_url) {
+ DCHECK_EQ(GetHost(new_google_url_), GetHost(new_google_url));
+ new_google_url_ = new_google_url;
+}
+
void GoogleURLTrackerInfoBarDelegate::Show() {
showing_ = true;
owner()->AddInfoBar(this); // May delete |this| on failure!
@@ -137,7 +147,7 @@
string16 GoogleURLTrackerInfoBarDelegate::GetMessageText() const {
return l10n_util::GetStringFUTF16(IDS_GOOGLE_URL_TRACKER_INFOBAR_MESSAGE,
- GetHost(true), GetHost(false));
+ GetHost(new_google_url_), GetHost(google_url_tracker_->google_url_));
}
string16 GoogleURLTrackerInfoBarDelegate::GetButtonLabel(
@@ -145,21 +155,17 @@
bool new_host = (button == BUTTON_OK);
return l10n_util::GetStringFUTF16(new_host ?
IDS_GOOGLE_URL_TRACKER_INFOBAR_SWITCH :
- IDS_GOOGLE_URL_TRACKER_INFOBAR_DONT_SWITCH, GetHost(new_host));
+ IDS_GOOGLE_URL_TRACKER_INFOBAR_DONT_SWITCH,
+ GetHost(new_host ? new_google_url_ : google_url_tracker_->google_url_));
}
-string16 GoogleURLTrackerInfoBarDelegate::GetHost(bool new_host) const {
- return net::StripWWW(UTF8ToUTF16(
- (new_host ? new_google_url_ : google_url_tracker_->google_url_).host()));
-}
-
// GoogleURLTracker -----------------------------------------------------------
const char GoogleURLTracker::kDefaultGoogleHomepage[] =
"http://www.google.com/";
const char GoogleURLTracker::kSearchDomainCheckURL[] =
- "https://www.google.com/searchdomaincheck?format=domain&type=chrome";
+ "https://www.google.com/searchdomaincheck?format=url&type=chrome";
GoogleURLTracker::GoogleURLTracker(Profile* profile, Mode mode)
: profile_(profile),
@@ -219,7 +225,8 @@
tracker->SearchCommitted();
}
-void GoogleURLTracker::AcceptGoogleURL(const GURL& new_google_url) {
+void GoogleURLTracker::AcceptGoogleURL(const GURL& new_google_url,
+ bool redo_searches) {
google_url_ = new_google_url;
PrefService* prefs = profile_->GetPrefs();
prefs->SetString(prefs::kLastKnownGoogleURL, google_url_.spec());
@@ -229,7 +236,7 @@
content::Source<Profile>(profile_),
content::Details<const GURL>(&new_google_url));
need_to_prompt_ = false;
- CloseAllInfoBars(true);
+ CloseAllInfoBars(redo_searches);
}
void GoogleURLTracker::CancelGoogleURL(const GURL& new_google_url) {
@@ -301,43 +308,73 @@
return;
}
- // See if the response data was one we want to use, and if so, convert to the
- // appropriate Google base URL.
+ // See if the response data was valid. It should be
+ // "<scheme>://[www.]google.<TLD>/".
std::string url_str;
source->GetResponseAsString(&url_str);
TrimWhitespace(url_str, TRIM_ALL, &url_str);
-
- if (!StartsWithASCII(url_str, ".google.", false))
+ GURL url(url_str);
+ if (!url.is_valid() || (url.path().length() > 1) || url.has_query() ||
+ url.has_ref() ||
+ !google_util::IsGoogleDomainUrl(url.spec(),
+ google_util::DISALLOW_SUBDOMAIN))
return;
- fetched_google_url_ = GURL("http://www" + url_str);
+ std::swap(url, fetched_google_url_);
GURL last_prompted_url(
profile_->GetPrefs()->GetString(prefs::kLastPromptedGoogleURL));
if (last_prompted_url.is_empty()) {
// On the very first run of Chrome, when we've never looked up the URL at
// all, we should just silently switch over to whatever we get immediately.
- AcceptGoogleURL(fetched_google_url_);
+ AcceptGoogleURL(fetched_google_url_, true); // Second arg is irrelevant.
return;
}
- // If the URL hasn't changed, then whether |need_to_prompt_| is true or false,
- // nothing has changed, so just bail.
- if (fetched_google_url_ == last_prompted_url)
- return;
-
+ string16 fetched_host(GetHost(fetched_google_url_));
if (fetched_google_url_ == google_url_) {
- // The user came back to their original location after having temporarily
- // moved. Reset the prompted URL so we'll prompt again if they move again.
+ // Either the user has continually been on this URL, or we prompted for a
+ // different URL but have now changed back before they responded to any of
+ // the prompts. In this latter case we want to close any open infobars and
+ // stop prompting.
CancelGoogleURL(fetched_google_url_);
- return;
+ } else if (fetched_host == GetHost(google_url_)) {
+ // Similar to the above case, but this time the new URL differs from the
+ // existing one, probably due to switching between HTTP and HTTPS searching.
+ // Like before we want to close any open infobars and stop prompting; we
+ // also want to silently accept the change in scheme. We don't redo open
+ // searches so as to avoid suddenly changing a page the user might be
+ // interacting with; it's enough to simply get future searches right.
+ AcceptGoogleURL(fetched_google_url_, false);
+ } else if (fetched_host == GetHost(last_prompted_url)) {
+ // We've re-fetched a TLD the user previously turned down. Although the new
+ // URL might have a different scheme than the old, we want to preserve the
+ // user's decision. Note that it's possible that, like in the above two
+ // cases, we fetched yet another different URL in the meantime, which we
+ // have open infobars prompting about; in this case, as in those above, we
+ // want to go ahead and close the infobars and stop prompting, since we've
+ // switched back away from that URL.
+ CancelGoogleURL(fetched_google_url_);
+ } else {
+ // We've fetched a URL with a different TLD than the user is currently using
+ // or was previously prompted about. This means we need to prompt again.
+ need_to_prompt_ = true;
+
+ // As in all the above cases, there could be open infobars prompting about
+ // some URL. If these URLs have the same TLD, we can simply leave the
+ // existing infobars open and quietly point their "new Google URL"s at the
+ // new URL (for e.g. scheme changes). Otherwise we go ahead and close the
+ // existing infobars since their message is out-of-date.
+ if (!url.is_valid()) // Note: |url| is the previous |fetched_google_url_|.
+ return;
+ if (fetched_host != GetHost(url)) {
+ CloseAllInfoBars(false);
+ } else if (fetched_google_url_ != url) {
+ for (InfoBarMap::iterator i(infobar_map_.begin());
+ i != infobar_map_.end(); ++i)
+ i->second->SetGoogleURL(fetched_google_url_);
+ }
}
-
- need_to_prompt_ = true;
-
- // Any open infobars are pointing at the wrong Google URL. (This can happen
- // if an infobar has been sitting open and then our IP address changes.)
- CloseAllInfoBars(false);
}
void GoogleURLTracker::Observe(int type,
« no previous file with comments | « chrome/browser/google/google_url_tracker.h ('k') | chrome/browser/google/google_url_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698