Surface synchronization: Implement auto-resize for OOPIF/BrowserPlugin
https://chromium-review.googlesource.com/c/chromium/src/+/753801
This commit is contained in:
parent
ea7e273a06
commit
3ad0639b2e
4 changed files with 28 additions and 17 deletions
|
@ -785,6 +785,14 @@ content::JavaScriptDialogManager* WebContents::GetJavaScriptDialogManager(
|
||||||
return dialog_manager_.get();
|
return dialog_manager_.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebContents::ResizeDueToAutoResize(
|
||||||
|
content::WebContents* web_contents,
|
||||||
|
const gfx::Size& new_size) {
|
||||||
|
if (IsGuest()) {
|
||||||
|
guest_delegate_->ResizeDueToAutoResize(new_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void WebContents::BeforeUnloadFired(const base::TimeTicks& proceed_time) {
|
void WebContents::BeforeUnloadFired(const base::TimeTicks& proceed_time) {
|
||||||
// Do nothing, we override this method just to avoid compilation error since
|
// Do nothing, we override this method just to avoid compilation error since
|
||||||
// there are two virtual functions named BeforeUnloadFired.
|
// there are two virtual functions named BeforeUnloadFired.
|
||||||
|
|
|
@ -337,6 +337,8 @@ class WebContents : public mate::TrackableObject<WebContents>,
|
||||||
const content::BluetoothChooser::EventHandler& handler) override;
|
const content::BluetoothChooser::EventHandler& handler) override;
|
||||||
content::JavaScriptDialogManager* GetJavaScriptDialogManager(
|
content::JavaScriptDialogManager* GetJavaScriptDialogManager(
|
||||||
content::WebContents* source) override;
|
content::WebContents* source) override;
|
||||||
|
void ResizeDueToAutoResize(content::WebContents* web_contents,
|
||||||
|
const gfx::Size& new_size) override;
|
||||||
|
|
||||||
// content::WebContentsObserver:
|
// content::WebContentsObserver:
|
||||||
void BeforeUnloadFired(const base::TimeTicks& proceed_time) override;
|
void BeforeUnloadFired(const base::TimeTicks& proceed_time) override;
|
||||||
|
|
|
@ -80,21 +80,26 @@ void WebViewGuestDelegate::SetSize(const SetSizeParams& params) {
|
||||||
new_size = GetDefaultSize();
|
new_size = GetDefaultSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool changed_due_to_auto_resize = false;
|
||||||
if (auto_size_enabled_) {
|
if (auto_size_enabled_) {
|
||||||
// Autosize was previously enabled.
|
// Autosize was previously enabled.
|
||||||
rvh->DisableAutoResize(new_size);
|
rvh->DisableAutoResize(new_size);
|
||||||
GuestSizeChangedDueToAutoSize(guest_size_, new_size);
|
changed_due_to_auto_resize = true;
|
||||||
} else {
|
} else {
|
||||||
// Autosize was already disabled.
|
// Autosize was already disabled.
|
||||||
guest_host_->SizeContents(new_size);
|
guest_host_->SizeContents(new_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
guest_size_ = new_size;
|
UpdateGuestSize(new_size, changed_due_to_auto_resize);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto_size_enabled_ = enable_auto_size;
|
auto_size_enabled_ = enable_auto_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebViewGuestDelegate::ResizeDueToAutoResize(const gfx::Size& new_size) {
|
||||||
|
UpdateGuestSize(new_size, auto_size_enabled_);
|
||||||
|
}
|
||||||
|
|
||||||
void WebViewGuestDelegate::DidFinishNavigation(
|
void WebViewGuestDelegate::DidFinishNavigation(
|
||||||
content::NavigationHandle* navigation_handle) {
|
content::NavigationHandle* navigation_handle) {
|
||||||
if (navigation_handle->HasCommitted() && !navigation_handle->IsErrorPage()) {
|
if (navigation_handle->HasCommitted() && !navigation_handle->IsErrorPage()) {
|
||||||
|
@ -126,13 +131,6 @@ content::WebContents* WebViewGuestDelegate::GetOwnerWebContents() const {
|
||||||
return embedder_web_contents_;
|
return embedder_web_contents_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebViewGuestDelegate::GuestSizeChanged(const gfx::Size& new_size) {
|
|
||||||
if (!auto_size_enabled_)
|
|
||||||
return;
|
|
||||||
GuestSizeChangedDueToAutoSize(guest_size_, new_size);
|
|
||||||
guest_size_ = new_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WebViewGuestDelegate::SetGuestHost(content::GuestHost* guest_host) {
|
void WebViewGuestDelegate::SetGuestHost(content::GuestHost* guest_host) {
|
||||||
guest_host_ = guest_host;
|
guest_host_ = guest_host;
|
||||||
}
|
}
|
||||||
|
@ -163,11 +161,13 @@ void WebViewGuestDelegate::OnZoomLevelChanged(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebViewGuestDelegate::GuestSizeChangedDueToAutoSize(
|
void WebViewGuestDelegate::UpdateGuestSize(const gfx::Size& new_size,
|
||||||
const gfx::Size& old_size,
|
bool due_to_auto_resize) {
|
||||||
const gfx::Size& new_size) {
|
if (due_to_auto_resize)
|
||||||
api_web_contents_->Emit("size-changed", old_size.width(), old_size.height(),
|
api_web_contents_->Emit("size-changed", guest_size_.width(),
|
||||||
new_size.width(), new_size.height());
|
guest_size_.height(), new_size.width(),
|
||||||
|
new_size.height());
|
||||||
|
guest_size_ = new_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
gfx::Size WebViewGuestDelegate::GetDefaultSize() const {
|
gfx::Size WebViewGuestDelegate::GetDefaultSize() const {
|
||||||
|
|
|
@ -47,6 +47,9 @@ class WebViewGuestDelegate : public content::BrowserPluginGuestDelegate,
|
||||||
// and normal sizes.
|
// and normal sizes.
|
||||||
void SetSize(const SetSizeParams& params);
|
void SetSize(const SetSizeParams& params);
|
||||||
|
|
||||||
|
// Invoked when the contents auto-resized and the container should match it.
|
||||||
|
void ResizeDueToAutoResize(const gfx::Size& new_size);
|
||||||
|
|
||||||
// Return true if attached.
|
// Return true if attached.
|
||||||
bool IsAttached() const { return attached_; }
|
bool IsAttached() const { return attached_; }
|
||||||
|
|
||||||
|
@ -59,7 +62,6 @@ class WebViewGuestDelegate : public content::BrowserPluginGuestDelegate,
|
||||||
void DidAttach(int guest_proxy_routing_id) final;
|
void DidAttach(int guest_proxy_routing_id) final;
|
||||||
void DidDetach() final;
|
void DidDetach() final;
|
||||||
content::WebContents* GetOwnerWebContents() const final;
|
content::WebContents* GetOwnerWebContents() const final;
|
||||||
void GuestSizeChanged(const gfx::Size& new_size) final;
|
|
||||||
void SetGuestHost(content::GuestHost* guest_host) final;
|
void SetGuestHost(content::GuestHost* guest_host) final;
|
||||||
void WillAttach(content::WebContents* embedder_web_contents,
|
void WillAttach(content::WebContents* embedder_web_contents,
|
||||||
int element_instance_id,
|
int element_instance_id,
|
||||||
|
@ -82,8 +84,7 @@ class WebViewGuestDelegate : public content::BrowserPluginGuestDelegate,
|
||||||
//
|
//
|
||||||
// This gives the derived class an opportunity to inform its container element
|
// This gives the derived class an opportunity to inform its container element
|
||||||
// or perform other actions.
|
// or perform other actions.
|
||||||
void GuestSizeChangedDueToAutoSize(const gfx::Size& old_size,
|
void UpdateGuestSize(const gfx::Size& new_size, bool due_to_auto_resize);
|
||||||
const gfx::Size& new_size);
|
|
||||||
|
|
||||||
// Returns the default size of the guestview.
|
// Returns the default size of the guestview.
|
||||||
gfx::Size GetDefaultSize() const;
|
gfx::Size GetDefaultSize() const;
|
||||||
|
|
Loading…
Reference in a new issue