blob: 3af5260bb7fe6065c2cefdbc1d48b6347b59a28a [file] [log] [blame]
// Copyright 2019 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/thumbnails/thumbnail_page_event_adapter.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/web_contents.h"
namespace thumbnails {
namespace {
bool IsMainFrame(content::RenderFrameHost* render_frame_host) {
return !render_frame_host->GetParent();
}
} // namespace
ThumbnailPageEventAdapter::ThumbnailPageEventAdapter(
content::WebContents* contents)
: content::WebContentsObserver(contents) {}
ThumbnailPageEventAdapter::~ThumbnailPageEventAdapter() = default;
void ThumbnailPageEventAdapter::AddObserver(ThumbnailPageObserver* observer) {
observers_.AddObserver(observer);
}
void ThumbnailPageEventAdapter::RemoveObserver(
ThumbnailPageObserver* observer) {
if (observers_.HasObserver(observer))
observers_.RemoveObserver(observer);
}
void ThumbnailPageEventAdapter::OnVisibilityChanged(
content::Visibility visibility) {
const bool visible = visibility == content::Visibility::VISIBLE;
for (auto& observer : observers_)
observer.VisibilityChanged(visible);
}
void ThumbnailPageEventAdapter::DidStartNavigation(
content::NavigationHandle* navigation_handle) {
if (navigation_handle->IsInMainFrame() &&
!navigation_handle->IsSameDocument()) {
const GURL& url = navigation_handle->GetWebContents()->GetVisibleURL();
for (auto& observer : observers_)
observer.TopLevelNavigationStarted(url);
}
}
void ThumbnailPageEventAdapter::DidRedirectNavigation(
content::NavigationHandle* navigation_handle) {
if (navigation_handle->IsInMainFrame() &&
!navigation_handle->IsSameDocument()) {
const GURL& url = navigation_handle->GetWebContents()->GetVisibleURL();
for (auto& observer : observers_)
observer.TopLevelNavigationStarted(url);
}
}
void ThumbnailPageEventAdapter::DidFinishNavigation(
content::NavigationHandle* navigation_handle) {
if (navigation_handle->IsInMainFrame()) {
const GURL& url = navigation_handle->GetWebContents()->GetVisibleURL();
for (auto& observer : observers_)
observer.TopLevelNavigationEnded(url);
}
}
void ThumbnailPageEventAdapter::DocumentAvailableInMainFrame() {
for (auto& observer : observers_)
observer.PageLoadStarted();
}
void ThumbnailPageEventAdapter::DidFirstVisuallyNonEmptyPaint() {
for (auto& observer : observers_)
observer.PagePainted();
}
void ThumbnailPageEventAdapter::DidFinishLoad(
content::RenderFrameHost* render_frame_host,
const GURL& validated_url) {
if (IsMainFrame(render_frame_host)) {
for (auto& observer : observers_)
observer.PageLoadFinished();
}
}
void ThumbnailPageEventAdapter::DidFailLoad(
content::RenderFrameHost* render_frame_host,
const GURL& validated_url,
int error_code,
const base::string16& error_description) {
if (IsMainFrame(render_frame_host)) {
for (auto& observer : observers_)
observer.PageLoadFinished();
}
}
void ThumbnailPageEventAdapter::NavigationStopped() {
const GURL& url = web_contents()->GetVisibleURL();
for (auto& observer : observers_) {
observer.TopLevelNavigationEnded(url);
observer.PageLoadFinished();
}
}
void ThumbnailPageEventAdapter::BeforeUnloadFired(
bool proceed,
const base::TimeTicks& proceed_time) {
is_unloading_ = true;
}
void ThumbnailPageEventAdapter::BeforeUnloadDialogCancelled() {
is_unloading_ = false;
}
} // namespace thumbnails