Commit 412b57a9 authored by Aleks Totic's avatar Aleks Totic Committed by Commit Bot

Scale contentRect by zoom

Reported size should be in CSS pixels, not physical, zoomed pixels.
Added a test case.

Also fixed existing iframe test. The existing test was incorrect.

Bug: 724971
Change-Id: I2f36429f08c6ab68b99d8754e9ddba9599c08348
Reviewed-on: https://chromium-review.googlesource.com/614108Reviewed-by: default avatarAnton Vayvod <avayvod@chromium.org>
Reviewed-by: default avatarIan Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: default avatarEmil A Eklund <eae@chromium.org>
Commit-Queue: Aleks Totic <atotic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#496072}
parent 03648256
...@@ -143,10 +143,8 @@ function test6() { ...@@ -143,10 +143,8 @@ function test6() {
switch(event.data) { switch(event.data) {
case 'readyToTest': case 'readyToTest':
if (!testRequested) { if (!testRequested) {
//iframe.contentWindow.postMessage('startTest', '*'); iframe.contentWindow.postMessage('startTest', '*');
testRequested = true; testRequested = true;
test.step(()=>{test.done()});
resolvePromise();
} }
break; break;
case 'success': case 'success':
......
...@@ -27,7 +27,7 @@ window.addEventListener('message', function(ev) { ...@@ -27,7 +27,7 @@ window.addEventListener('message', function(ev) {
} }
}); });
// How does parent know we've loaded problem is solved by // How does parent know we've loaded problem is solved by
// broadcasting readyToTest message. // broadcasting readyToTest message repeatedly until test starts.
function broadcastReady() { function broadcastReady() {
if (!testStarted) { if (!testStarted) {
window.parent.postMessage('readyToTest', '*'); window.parent.postMessage('readyToTest', '*');
......
<!doctype html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<p>ResizeObserver page zoom test</p>
<div id="target1" style="width:100px;height:100px;">t1
</div>
<script>
'use strict';
let target = document.querySelector("#target1");
test( _ => {
assert_false(window.internals == null,
"test requires windows.internals.setZoomFactor");
window.internals.setZoomFactor(1.5);
},
"windows.internals.setZoomFactor");
function test1() {
let test = async_test("ResizeObserver zoomFactor");
let width = 33;
let ro = new ResizeObserver(entries => {
test.step( _ => {
assert_equals(entries[0].contentRect.width, width, "width is not zoomed");
test.done();
ro.disconnect();
});
});
ro.observe(target);
target.style.width = width + "px";
}
test1();
</script>
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "bindings/core/v8/ResizeObserverCallback.h" #include "bindings/core/v8/ResizeObserverCallback.h"
#include "core/dom/Element.h" #include "core/dom/Element.h"
#include "core/frame/LocalFrameView.h" #include "core/frame/LocalFrameView.h"
#include "core/layout/LayoutObject.h"
#include "core/resize_observer/ResizeObservation.h" #include "core/resize_observer/ResizeObservation.h"
#include "core/resize_observer/ResizeObserverController.h" #include "core/resize_observer/ResizeObserverController.h"
#include "core/resize_observer/ResizeObserverEntry.h" #include "core/resize_observer/ResizeObserverEntry.h"
...@@ -110,8 +111,22 @@ void ResizeObserver::DeliverObservations() { ...@@ -110,8 +111,22 @@ void ResizeObserver::DeliverObservations() {
LayoutPoint location = observation->ComputeTargetLocation(); LayoutPoint location = observation->ComputeTargetLocation();
LayoutSize size = observation->ComputeTargetSize(); LayoutSize size = observation->ComputeTargetSize();
observation->SetObservationSize(size); observation->SetObservationSize(size);
auto entry = new ResizeObserverEntry(observation->Target(),
LayoutRect(location, size)); LayoutRect content_rect(location, size);
if (observation->Target()->GetLayoutObject()) {
// Must adjust for zoom in order to report non-zoomed size.
const ComputedStyle& style =
observation->Target()->GetLayoutObject()->StyleRef();
content_rect.SetX(
AdjustLayoutUnitForAbsoluteZoom(content_rect.X(), style));
content_rect.SetY(
AdjustLayoutUnitForAbsoluteZoom(content_rect.Y(), style));
content_rect.SetWidth(
AdjustLayoutUnitForAbsoluteZoom(content_rect.Width(), style));
content_rect.SetHeight(
AdjustLayoutUnitForAbsoluteZoom(content_rect.Height(), style));
}
auto entry = new ResizeObserverEntry(observation->Target(), content_rect);
entries.push_back(entry); entries.push_back(entry);
} }
DCHECK(callback_ || delegate_); DCHECK(callback_ || delegate_);
......
...@@ -1030,14 +1030,6 @@ void MediaControlsImpl::NotifyElementSizeChanged(DOMRectReadOnly* new_size) { ...@@ -1030,14 +1030,6 @@ void MediaControlsImpl::NotifyElementSizeChanged(DOMRectReadOnly* new_size) {
size_.SetWidth(new_size->width()); size_.SetWidth(new_size->width());
size_.SetHeight(new_size->height()); size_.SetHeight(new_size->height());
// Adjust for effective zoom.
if (panel_->GetLayoutObject() && panel_->GetLayoutObject()->Style()) {
size_.SetWidth(ceil(size_.Width() /
panel_->GetLayoutObject()->Style()->EffectiveZoom()));
size_.SetHeight(ceil(size_.Height() /
panel_->GetLayoutObject()->Style()->EffectiveZoom()));
}
// Don't bother to do any work if this matches the most recent size. // Don't bother to do any work if this matches the most recent size.
if (old_size != size_) if (old_size != size_)
element_size_changed_timer_.StartOneShot(0, BLINK_FROM_HERE); element_size_changed_timer_.StartOneShot(0, BLINK_FROM_HERE);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment