blob: 6d555e83204d02750e43e110aed175d650d5cf4a [file] [log] [blame]
// Copyright 2021 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.
#ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_VIEW_OBSERVER_H_
#define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_VIEW_OBSERVER_H_
#include "base/observer_list_types.h"
#include "third_party/blink/public/mojom/page/page_visibility_state.mojom-shared.h"
#include "third_party/blink/public/platform/web_common.h"
namespace blink {
class WebView;
class WebViewImpl;
// Base class for objects that want to get notified of changes to the view.
class BLINK_EXPORT WebViewObserver : public base::CheckedObserver {
public:
// A subclass can use this to delete itself.
virtual void OnDestruct() = 0;
// Notification that the output of a BeginMainFrame was committed to the
// compositor (thread), though would not be submitted to the display
// compositor yet. This will only be called for local main frames.
virtual void DidCommitCompositorFrame() {}
// Indicates two things:
// 1) This view may have a new layout now.
// 2) Layout is up-to-date.
// After calling WebWidget::updateAllLifecyclePhases(), expect to get this
// notification unless the view did not need a layout.
virtual void DidUpdateMainFrameLayout() {}
// Called when the View's zoom has changed.
virtual void OnZoomLevelChanged() {}
// Called when the View's visibility changes.
virtual void OnPageVisibilityChanged(
blink::mojom::PageVisibilityState visibility_state) {}
// Retrieves the WebView that is being observed. Can be null.
WebView* GetWebView() const;
protected:
friend class WebViewImpl;
explicit WebViewObserver(WebView* web_view);
~WebViewObserver() override;
// Called when |web_view_| was destroyed.
void WebViewDestroyed();
// Sets |web_view_| to track.
// Removes itself of previous (if any) |web_view_| observer list and adds
// to the new |web_view|.
void Observe(WebView* web_view);
private:
WebViewImpl* web_view_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_VIEW_OBSERVER_H_