blob: 196957676b07d816cfe5ebf8e594c38e94be843f [file] [log] [blame]
// 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/renderer/page_load_metrics/renderer_page_track_decider.h"
#include <string>
#include "chrome/renderer/searchbox/search_bouncer.h"
#include "third_party/WebKit/public/platform/WebURLResponse.h"
#include "third_party/WebKit/public/web/WebDocument.h"
#include "third_party/WebKit/public/web/WebDocumentLoader.h"
#include "url/gurl.h"
namespace page_load_metrics {
RendererPageTrackDecider::RendererPageTrackDecider(
const blink::WebDocument* document,
const blink::WebDocumentLoader* document_loader)
: document_(document), document_loader_(document_loader) {}
RendererPageTrackDecider::~RendererPageTrackDecider() {}
bool RendererPageTrackDecider::HasCommitted() {
// RendererPageTrackDecider is only instantiated for committed pages.
return true;
}
bool RendererPageTrackDecider::IsHttpOrHttpsUrl() {
return static_cast<GURL>(document_->Url()).SchemeIsHTTPOrHTTPS();
}
bool RendererPageTrackDecider::IsNewTabPageUrl() {
return SearchBouncer::GetInstance()->IsNewTabPage(document_->Url());
}
bool RendererPageTrackDecider::IsChromeErrorPage() {
return document_loader_->HasUnreachableURL();
}
int RendererPageTrackDecider::GetHttpStatusCode() {
return document_loader_->GetResponse().HttpStatusCode();
}
bool RendererPageTrackDecider::IsHtmlOrXhtmlPage() {
// Ignore non-HTML documents (e.g. SVG). Note that images are treated by
// Blink as HTML documents, so to exclude images, we must perform
// additional mime type checking below. MHTML is tracked as HTML in blink.
if (!document_->IsHTMLDocument() && !document_->IsXHTMLDocument())
return false;
// Ignore non-HTML mime types (e.g. images).
blink::WebString mime_type = document_loader_->GetResponse().MimeType();
return mime_type == "text/html" || mime_type == "application/xhtml+xml" ||
mime_type == "multipart/related";
}
} // namespace page_load_metrics