From 883be7eb6ca869a87fa23e264a1a9905105c750e Mon Sep 17 00:00:00 2001 From: "tommi@chromium.org" Date: Fri, 23 Apr 2010 00:53:07 +0000 Subject: Check if the url is a top level url before clearing the referrer header. TEST=n/a BUG=none Review URL: http://codereview.chromium.org/1745007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45391 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome_frame/bho.cc | 2 ++ chrome_frame/http_negotiate.cc | 30 ++++++++++++++---------------- 2 files changed, 16 insertions(+), 16 deletions(-) (limited to 'chrome_frame') diff --git a/chrome_frame/bho.cc b/chrome_frame/bho.cc index 7a126f3..48838a9 100644 --- a/chrome_frame/bho.cc +++ b/chrome_frame/bho.cc @@ -110,9 +110,11 @@ STDMETHODIMP Bho::BeforeNavigate2(IDispatch* dispatch, VARIANT* url, } DLOG(INFO) << "BeforeNavigate2: " << url->bstrVal; + ScopedComPtr browser_service; DoQueryService(SID_SShellBrowser, web_browser2, browser_service.Receive()); if (!browser_service || !CheckForCFNavigation(browser_service, false)) { + // TODO(tommi): Remove? Isn't this done below by calling set_referrer("")? referrer_.clear(); } diff --git a/chrome_frame/http_negotiate.cc b/chrome_frame/http_negotiate.cc index 4cc1a7d..37fcf2f 100644 --- a/chrome_frame/http_negotiate.cc +++ b/chrome_frame/http_negotiate.cc @@ -203,19 +203,17 @@ HRESULT HttpNegotiatePatch::BeginningTransaction( return hr; } - ScopedComPtr browser2; - DoQueryService(IID_ITargetFrame2, me, browser2.Receive()); - if (browser2) { - VARIANT_BOOL is_top_level = VARIANT_FALSE; - browser2->get_TopLevelContainer(&is_top_level); - - DLOG(INFO) << "called OnBeginningTransaction " << is_top_level; - - if (is_top_level != VARIANT_FALSE) { - std::string referrer = FindReferrerFromHeaders(headers, - *additional_headers); - NavigationManager* mgr = NavigationManager::GetThreadInstance(); - if (mgr) { + NavigationManager* mgr = NavigationManager::GetThreadInstance(); + if (mgr && mgr->IsTopLevelUrl(url)) { + ScopedComPtr browser2; + DoQueryService(IID_ITargetFrame2, me, browser2.Receive()); + if (browser2) { + VARIANT_BOOL is_top_level = VARIANT_FALSE; + browser2->get_TopLevelContainer(&is_top_level); + + if (is_top_level != VARIANT_FALSE) { + std::string referrer = FindReferrerFromHeaders(headers, + *additional_headers); // When we switch from IE to CF the BeginningTransaction function is // called twice. The first call contains the referrer while the // second call does not. We set the referrer only if the URL in the @@ -225,12 +223,12 @@ HRESULT HttpNegotiatePatch::BeginningTransaction( DCHECK(mgr->referrer().empty()); mgr->set_referrer(referrer); } - } else { - DLOG(INFO) << "No NavigationManager"; } + } else { + DLOG(INFO) << "No IWebBrowser2"; } } else { - DLOG(INFO) << "No IWebBrowser2"; + DLOG(INFO) << "No NavigationManager"; } static const char kLowerCaseUserAgent[] = "user-agent"; -- cgit v1.1