| Index: chrome/browser/page_load_metrics/browser_page_tracker_predicate.cc
|
| diff --git a/chrome/browser/page_load_metrics/browser_page_tracker_predicate.cc b/chrome/browser/page_load_metrics/browser_page_tracker_predicate.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5d8a1f56512c80db034fae8c12e9217e18bb2518
|
| --- /dev/null
|
| +++ b/chrome/browser/page_load_metrics/browser_page_tracker_predicate.cc
|
| @@ -0,0 +1,58 @@
|
| +// Copyright 2016 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/page_load_metrics/browser_page_tracker_predicate.h"
|
| +
|
| +#include <string>
|
| +
|
| +#include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
|
| +#include "content/public/browser/navigation_handle.h"
|
| +#include "content/public/browser/web_contents.h"
|
| +#include "net/http/http_response_headers.h"
|
| +
|
| +namespace page_load_metrics {
|
| +
|
| +BrowserPageTrackerPredicate::BrowserPageTrackerPredicate(
|
| + PageLoadMetricsEmbedderInterface* embedder_interface,
|
| + content::WebContents* web_contents,
|
| + content::NavigationHandle* navigation_handle)
|
| + : embedder_interface_(embedder_interface),
|
| + web_contents_(web_contents),
|
| + navigation_handle_(navigation_handle) {}
|
| +
|
| +BrowserPageTrackerPredicate::~BrowserPageTrackerPredicate() {}
|
| +
|
| +bool BrowserPageTrackerPredicate::HasCommitted() {
|
| + return navigation_handle_->HasCommitted();
|
| +}
|
| +
|
| +bool BrowserPageTrackerPredicate::IsHTTPOrHTTPSUrl() {
|
| + return navigation_handle_->GetURL().SchemeIsHTTPOrHTTPS();
|
| +}
|
| +
|
| +bool BrowserPageTrackerPredicate::IsNewTabPageUrl() {
|
| + return embedder_interface_->IsNewTabPageUrl(navigation_handle_->GetURL());
|
| +}
|
| +
|
| +bool BrowserPageTrackerPredicate::IsChromeErrorPage() {
|
| + DCHECK(HasCommitted());
|
| + return navigation_handle_->IsErrorPage();
|
| +}
|
| +
|
| +bool BrowserPageTrackerPredicate::IsNetworkErrorPage() {
|
| + DCHECK(HasCommitted());
|
| + const net::HttpResponseHeaders* response_headers =
|
| + navigation_handle_->GetResponseHeaders();
|
| + if (!response_headers)
|
| + return false;
|
| + int status_code_family = response_headers->response_code() / 100;
|
| + return status_code_family != 2 && status_code_family != 3;
|
| +}
|
| +
|
| +bool BrowserPageTrackerPredicate::IsHTMLOrXHTMLPage() {
|
| + const std::string& mime_type = web_contents_->GetContentsMimeType();
|
| + return mime_type == "text/html" || mime_type == "application/xhtml+xml";
|
| +}
|
| +
|
| +} // namespace page_load_metrics
|
|
|