blob: 46e706b5c5e1e87c1a855d7c929f81d4a0c3bd5f [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/client_hints/browser/client_hints_web_contents_observer.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/client_hints_controller_delegate.h"
#include "content/public/browser/render_widget_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
#include "ui/gfx/geometry/size_f.h"
namespace client_hints {
ClientHintsWebContentsObserver::ClientHintsWebContentsObserver(
content::WebContents* web_contents)
: content::WebContentsObserver(web_contents),
content::WebContentsUserData<ClientHintsWebContentsObserver>(
*web_contents) {}
ClientHintsWebContentsObserver::~ClientHintsWebContentsObserver() = default;
void ClientHintsWebContentsObserver::OnVisibilityChanged(
content::Visibility visibility) {
if (visibility == content::Visibility::VISIBLE) {
UpdateVisibleMainFrameViewportSize();
}
}
void ClientHintsWebContentsObserver::PrimaryMainFrameWasResized(
bool width_changed) {
content::Visibility visibility = web_contents()->GetVisibility();
if (visibility == content::Visibility::VISIBLE) {
UpdateVisibleMainFrameViewportSize();
}
}
void ClientHintsWebContentsObserver::UpdateVisibleMainFrameViewportSize() {
content::RenderWidgetHostView* view =
web_contents()->GetPrimaryMainFrame()->GetRenderWidgetHost()->GetView();
if (!view) {
return;
}
gfx::Size visible_main_frame_viewport_size = view->GetVisibleViewportSize();
content::ClientHintsControllerDelegate* client_hints_controller_delegate =
web_contents()->GetBrowserContext()->GetClientHintsControllerDelegate();
if (client_hints_controller_delegate) {
client_hints_controller_delegate->SetMostRecentMainFrameViewportSize(
visible_main_frame_viewport_size);
}
}
WEB_CONTENTS_USER_DATA_KEY_IMPL(ClientHintsWebContentsObserver);
} // namespace client_hints