Chromium Code Reviews| Index: chrome/browser/ui/browser_navigator.cc |
| =================================================================== |
| --- chrome/browser/ui/browser_navigator.cc (revision 98807) |
| +++ chrome/browser/ui/browser_navigator.cc (working copy) |
| @@ -7,10 +7,15 @@ |
| #include <algorithm> |
| #include "base/command_line.h" |
| +#include "base/stringprintf.h" |
| +#include "base/utf_string_conversions.h" |
| #include "chrome/browser/browser_about_handler.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| #include "chrome/browser/extensions/extension_tab_helper.h" |
| +#include "chrome/browser/google/google_url_tracker.h" |
| +#include "chrome/browser/prefs/pref_service.h" |
| #include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/rlz/rlz.h" |
| #include "chrome/browser/tabs/tab_strip_model.h" |
| #include "chrome/browser/tab_contents/tab_util.h" |
| #include "chrome/browser/ui/browser.h" |
| @@ -21,10 +26,12 @@ |
| #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| #include "chrome/browser/web_applications/web_app.h" |
| #include "chrome/common/extensions/extension.h" |
| +#include "chrome/common/pref_names.h" |
| #include "chrome/common/url_constants.h" |
| #include "content/browser/browser_url_handler.h" |
| #include "content/browser/site_instance.h" |
| #include "content/browser/tab_contents/tab_contents.h" |
| +#include "net/http/http_util.h" |
| namespace { |
| @@ -275,6 +282,39 @@ |
| DISALLOW_COPY_AND_ASSIGN(ScopedTargetContentsOwner); |
| }; |
| +void InitializeExtraHeaders(browser::NavigateParams* params, |
| + Profile* profile, |
| + std::string* extra_headers) { |
| +#if defined(GOOGLE_CHROME_BUILD) |
| + if (!profile) |
| + profile = params->profile; |
| + |
| + // If this is a home page navigation, check to see if the home page is |
| + // set to Google and add RLZ HTTP headers to the request. This is only |
| + // done if Google was the original home page, and not changed afterwards by |
| + // the user. |
| + if (profile && (params->transition & PageTransition::HOME_PAGE) != 0) { |
| + PrefService* pref_service = profile->GetPrefs(); |
| + if (pref_service) { |
| + if (!pref_service->GetBoolean(prefs::kHomePageChanged)) { |
| + std::string homepage = pref_service->GetString(prefs::kHomePage); |
| + if (homepage == GoogleURLTracker::kDefaultGoogleHomepage) { |
| + std::wstring rlz_string; |
| + RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, &rlz_string); |
| + if (!rlz_string.empty()) { |
| + // DO NOT COMMIT: waiting for the search folks to tell me the |
| + // actual HTTP header name they want to see. |
| + net::HttpUtil::AppendHeaderIfMissing("X-RLZ-String", |
| + WideToUTF8(rlz_string), |
| + extra_headers); |
| + } |
| + } |
| + } |
| + } |
| + } |
| +#endif |
| +} |
| + |
| } // namespace |
| namespace browser { |
| @@ -372,14 +412,22 @@ |
| bool user_initiated = base_transition == PageTransition::TYPED || |
| base_transition == PageTransition::AUTO_BOOKMARK; |
| + std::string extra_headers; |
|
sky
2011/08/30 15:56:53
nit: move this closer to the two places that use i
Roger Tawa OOO till Jul 10th
2011/08/30 16:19:31
This is the closest given the nesting of the if bl
sky
2011/08/30 16:44:28
I was misreading the code. It's fine, leave it whe
|
| + |
| // Check if this is a singleton tab that already exists |
| int singleton_index = GetIndexOfSingletonTab(params); |
| // If no target TabContents was specified, we need to construct one if we are |
| // supposed to target a new tab; unless it's a singleton that already exists. |
| if (!params->target_contents && singleton_index < 0) { |
| - GURL url = params->url.is_empty() ? params->browser->GetHomePage() |
| - : params->url; |
| + GURL url; |
| + if (params->url.is_empty()) { |
| + url = params->browser->GetHomePage(); |
| + params->transition |= PageTransition::HOME_PAGE; |
| + } else { |
| + url = params->url; |
| + } |
| + |
| if (params->disposition != CURRENT_TAB) { |
| TabContents* source_contents = params->source_contents ? |
| params->source_contents->tab_contents() : NULL; |
| @@ -416,12 +464,15 @@ |
| tab_contents())->OnUserGesture(); |
| } |
| + InitializeExtraHeaders(params, params->target_contents->profile(), |
| + &extra_headers); |
| + |
| // Try to handle non-navigational URLs that popup dialogs and such, these |
| // should not actually navigate. |
| if (!HandleNonNavigationAboutURL(url)) { |
| // Perform the actual navigation. |
| - params->target_contents->controller().LoadURL(url, params->referrer, |
| - params->transition); |
| + params->target_contents->controller().LoadURLWithHeaders( |
| + url, params->referrer, params->transition, extra_headers); |
| } |
| } else { |
| // |target_contents| was specified non-NULL, and so we assume it has already |
| @@ -468,8 +519,9 @@ |
| target->controller().Reload(true); |
| } else if (params->path_behavior == NavigateParams::IGNORE_AND_NAVIGATE && |
| target->GetURL() != params->url) { |
| - target->controller().LoadURL( |
| - params->url, params->referrer, params->transition); |
| + InitializeExtraHeaders(params, NULL, &extra_headers); |
| + target->controller().LoadURLWithHeaders( |
| + params->url, params->referrer, params->transition, extra_headers); |
| } |
| // If the singleton tab isn't already selected, select it. |