blob: b964991664cd108ba48b15bc02af7e3f02f4c1b1 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/search/new_tab_page_navigation_throttle.h"
#include "base/metrics/histogram_macros.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search/search.h"
#include "chrome/common/url_constants.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/web_contents.h"
#include "net/http/http_status_code.h"
#include "url/gurl.h"
NewTabPageNavigationThrottle::NewTabPageNavigationThrottle(
content::NavigationHandle* navigation_handle)
: content::NavigationThrottle(navigation_handle) {}
NewTabPageNavigationThrottle::~NewTabPageNavigationThrottle() = default;
const char* NewTabPageNavigationThrottle::GetNameForLogging() {
return "NewTabPageNavigationThrottle";
}
// static
std::unique_ptr<content::NavigationThrottle>
NewTabPageNavigationThrottle::MaybeCreateThrottleFor(
content::NavigationHandle* handle) {
content::WebContents* web_contents = handle->GetWebContents();
Profile* profile =
Profile::FromBrowserContext(web_contents->GetBrowserContext());
if (web_contents->GetVisibleURL() != chrome::kChromeUINewTabURL ||
!search::IsInstantNTPURL(handle->GetURL(), profile) ||
handle->GetURL() == chrome::kChromeSearchLocalNtpUrl) {
return nullptr;
}
return std::make_unique<NewTabPageNavigationThrottle>(handle);
}
content::NavigationThrottle::ThrottleCheckResult
NewTabPageNavigationThrottle::WillProcessResponse() {
const net::HttpResponseHeaders* headers =
navigation_handle()->GetResponseHeaders();
if (!headers)
return content::NavigationThrottle::PROCEED;
int response_code = headers->response_code();
if (response_code < 400 && response_code != net::HTTP_NO_CONTENT)
return content::NavigationThrottle::PROCEED;
return OpenLocalNewTabPage();
}
content::NavigationThrottle::ThrottleCheckResult
NewTabPageNavigationThrottle::WillFailRequest() {
return OpenLocalNewTabPage();
}
content::NavigationThrottle::ThrottleCheckResult
NewTabPageNavigationThrottle::OpenLocalNewTabPage() {
UMA_HISTOGRAM_ENUMERATION("InstantExtended.CacheableNTPLoad",
search::CACHEABLE_NTP_LOAD_FAILED,
search::CACHEABLE_NTP_LOAD_MAX);
navigation_handle()->GetWebContents()->OpenURL(
content::OpenURLParams(GURL(chrome::kChromeSearchLocalNtpUrl),
navigation_handle()->GetReferrer(),
navigation_handle()->GetFrameTreeNodeId(),
WindowOpenDisposition::CURRENT_TAB,
navigation_handle()->GetPageTransition(),
false /* is_renderer_initiated */));
return content::NavigationThrottle::CANCEL_AND_IGNORE;
}