summaryrefslogtreecommitdiffstats
path: root/android_webview
diff options
context:
space:
mode:
authormkosiba@chromium.org <mkosiba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-15 16:32:00 +0000
committermkosiba@chromium.org <mkosiba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-15 16:32:00 +0000
commitec2322e54319668369e5ae705db37e15391446a6 (patch)
tree19511d4375690ab6a2ae73e96ab0362316ed0ab9 /android_webview
parent575761f0a78a59a61ddff5d4d2d0688facbf1492 (diff)
downloadchromium_src-ec2322e54319668369e5ae705db37e15391446a6.zip
chromium_src-ec2322e54319668369e5ae705db37e15391446a6.tar.gz
chromium_src-ec2322e54319668369e5ae705db37e15391446a6.tar.bz2
Make LayerScrollOffsetDelegate updates consistent.
Looks like the inner+outer viewport changes had made the scroll size/range depend on the pageScale. BUG=340646 Review URL: https://codereview.chromium.org/256303006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@270686 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview')
-rw-r--r--android_webview/browser/browser_view_renderer.cc125
-rw-r--r--android_webview/browser/browser_view_renderer.h20
-rw-r--r--android_webview/browser/browser_view_renderer_client.h19
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java57
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/AndroidScrollIntegrationTest.java87
-rw-r--r--android_webview/native/aw_contents.cc43
-rw-r--r--android_webview/native/aw_contents.h12
7 files changed, 231 insertions, 132 deletions
diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc
index cad7c5b..b131ad9 100644
--- a/android_webview/browser/browser_view_renderer.cc
+++ b/android_webview/browser/browser_view_renderer.cc
@@ -11,6 +11,7 @@
#include "base/auto_reset.h"
#include "base/command_line.h"
#include "base/debug/trace_event.h"
+#include "base/json/json_writer.h"
#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
@@ -73,6 +74,27 @@ class AutoResetWithLock {
DISALLOW_COPY_AND_ASSIGN(AutoResetWithLock);
};
+class TracedValue : public base::debug::ConvertableToTraceFormat {
+ public:
+ explicit TracedValue(base::Value* value) : value_(value) {}
+ static scoped_refptr<base::debug::ConvertableToTraceFormat> FromValue(
+ base::Value* value) {
+ return scoped_refptr<base::debug::ConvertableToTraceFormat>(
+ new TracedValue(value));
+ }
+ virtual void AppendAsTraceFormat(std::string* out) const OVERRIDE {
+ std::string tmp;
+ base::JSONWriter::Write(value_.get(), &tmp);
+ *out += tmp;
+ }
+
+ private:
+ virtual ~TracedValue() {}
+ scoped_ptr<base::Value> value_;
+
+ DISALLOW_COPY_AND_ASSIGN(TracedValue);
+};
+
} // namespace
// static
@@ -485,6 +507,14 @@ void BrowserViewRenderer::ScrollTo(gfx::Vector2d scroll_offset) {
scroll_offset_dip_ = scroll_offset_dip;
}
+ TRACE_EVENT_INSTANT2("android_webview",
+ "BrowserViewRenderer::ScrollTo",
+ TRACE_EVENT_SCOPE_THREAD,
+ "x",
+ scroll_offset_dip.x(),
+ "y",
+ scroll_offset_dip.y());
+
if (has_compositor_)
shared_renderer_state_->GetCompositor()->
DidChangeRootLayerScrollOffset();
@@ -505,35 +535,8 @@ void BrowserViewRenderer::DidUpdateContent() {
client_->OnNewPicture();
}
-void BrowserViewRenderer::SetMaxRootLayerScrollOffset(
- gfx::Vector2dF new_value_dip) {
- if (!ui_task_runner_->BelongsToCurrentThread()) {
- ui_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&BrowserViewRenderer::SetMaxRootLayerScrollOffset,
- ui_thread_weak_ptr_,
- new_value_dip));
- return;
- }
- DCHECK_GT(dip_scale_, 0);
-
- max_scroll_offset_dip_ = new_value_dip;
- DCHECK_LE(0, max_scroll_offset_dip_.x());
- DCHECK_LE(0, max_scroll_offset_dip_.y());
-
- client_->SetMaxContainerViewScrollOffset(max_scroll_offset());
-}
-
void BrowserViewRenderer::SetTotalRootLayerScrollOffset(
gfx::Vector2dF scroll_offset_dip) {
- if (!ui_task_runner_->BelongsToCurrentThread()) {
- ui_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&BrowserViewRenderer::SetTotalRootLayerScrollOffset,
- ui_thread_weak_ptr_,
- scroll_offset_dip));
- return;
- }
{
base::AutoLock lock(render_thread_lock_);
@@ -561,10 +564,8 @@ void BrowserViewRenderer::SetTotalRootLayerScrollOffset(
DCHECK(0 <= scroll_offset.x());
DCHECK(0 <= scroll_offset.y());
- // Disabled because the conditions are being violated while running
- // AwZoomTest.testMagnification, see http://crbug.com/340648
- // DCHECK(scroll_offset.x() <= max_offset.x());
- // DCHECK(scroll_offset.y() <= max_offset.y());
+ DCHECK(scroll_offset.x() <= max_offset.x());
+ DCHECK(scroll_offset.y() <= max_offset.y());
client_->ScrollContainerViewTo(scroll_offset);
}
@@ -583,38 +584,68 @@ bool BrowserViewRenderer::IsExternalFlingActive() const {
return client_->IsFlingActive();
}
-void BrowserViewRenderer::SetRootLayerPageScaleFactorAndLimits(
+void BrowserViewRenderer::UpdateRootLayerState(
+ const gfx::Vector2dF& total_scroll_offset_dip,
+ const gfx::Vector2dF& max_scroll_offset_dip,
+ const gfx::SizeF& scrollable_size_dip,
float page_scale_factor,
float min_page_scale_factor,
float max_page_scale_factor) {
if (!ui_task_runner_->BelongsToCurrentThread()) {
ui_task_runner_->PostTask(
FROM_HERE,
- base::Bind(&BrowserViewRenderer::SetRootLayerPageScaleFactorAndLimits,
+ base::Bind(&BrowserViewRenderer::UpdateRootLayerState,
ui_thread_weak_ptr_,
+ total_scroll_offset_dip,
+ max_scroll_offset_dip,
+ scrollable_size_dip,
page_scale_factor,
min_page_scale_factor,
max_page_scale_factor));
return;
}
+ TRACE_EVENT_INSTANT1(
+ "android_webview",
+ "BrowserViewRenderer::UpdateRootLayerState",
+ TRACE_EVENT_SCOPE_THREAD,
+ "state",
+ TracedValue::FromValue(
+ RootLayerStateAsValue(total_scroll_offset_dip, scrollable_size_dip)
+ .release()));
+
+ DCHECK_GT(dip_scale_, 0);
+
+ max_scroll_offset_dip_ = max_scroll_offset_dip;
+ DCHECK_LE(0, max_scroll_offset_dip_.x());
+ DCHECK_LE(0, max_scroll_offset_dip_.y());
+
page_scale_factor_ = page_scale_factor;
DCHECK_GT(page_scale_factor_, 0);
- client_->SetPageScaleFactorAndLimits(
- page_scale_factor, min_page_scale_factor, max_page_scale_factor);
- client_->SetMaxContainerViewScrollOffset(max_scroll_offset());
+
+ client_->UpdateScrollState(max_scroll_offset(),
+ scrollable_size_dip,
+ page_scale_factor,
+ min_page_scale_factor,
+ max_page_scale_factor);
+ SetTotalRootLayerScrollOffset(total_scroll_offset_dip);
}
-void BrowserViewRenderer::SetRootLayerScrollableSize(
- gfx::SizeF scrollable_size) {
- if (!ui_task_runner_->BelongsToCurrentThread()) {
- ui_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&BrowserViewRenderer::SetRootLayerScrollableSize,
- ui_thread_weak_ptr_,
- scrollable_size));
- return;
- }
- client_->SetContentsSize(scrollable_size);
+scoped_ptr<base::Value> BrowserViewRenderer::RootLayerStateAsValue(
+ const gfx::Vector2dF& total_scroll_offset_dip,
+ const gfx::SizeF& scrollable_size_dip) {
+ scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
+
+ state->SetDouble("total_scroll_offset_dip.x", total_scroll_offset_dip.x());
+ state->SetDouble("total_scroll_offset_dip.y", total_scroll_offset_dip.y());
+
+ state->SetDouble("max_scroll_offset_dip.x", max_scroll_offset_dip_.x());
+ state->SetDouble("max_scroll_offset_dip.y", max_scroll_offset_dip_.y());
+
+ state->SetDouble("scrollable_size_dip.width", scrollable_size_dip.width());
+ state->SetDouble("scrollable_size_dip.height", scrollable_size_dip.height());
+
+ state->SetDouble("page_scale_factor", page_scale_factor_);
+ return state.PassAs<base::Value>();
}
void BrowserViewRenderer::DidOverscroll(gfx::Vector2dF accumulated_overscroll,
diff --git a/android_webview/browser/browser_view_renderer.h b/android_webview/browser/browser_view_renderer.h
index 991075f..9487a3e 100644
--- a/android_webview/browser/browser_view_renderer.h
+++ b/android_webview/browser/browser_view_renderer.h
@@ -11,6 +11,7 @@
#include "base/android/scoped_java_ref.h"
#include "base/callback.h"
#include "base/cancelable_callback.h"
+#include "base/values.h"
#include "content/public/browser/android/synchronous_compositor_client.h"
#include "skia/ext/refptr.h"
#include "ui/gfx/rect.h"
@@ -120,17 +121,16 @@ class BrowserViewRenderer : public content::SynchronousCompositorClient,
virtual void DidDestroyCompositor(content::SynchronousCompositor* compositor)
OVERRIDE;
virtual void SetContinuousInvalidate(bool invalidate) OVERRIDE;
- virtual void SetMaxRootLayerScrollOffset(gfx::Vector2dF new_value) OVERRIDE;
- virtual void SetTotalRootLayerScrollOffset(gfx::Vector2dF new_value_css)
- OVERRIDE;
virtual void DidUpdateContent() OVERRIDE;
virtual gfx::Vector2dF GetTotalRootLayerScrollOffset() OVERRIDE;
+ virtual void UpdateRootLayerState(
+ const gfx::Vector2dF& total_scroll_offset_dip,
+ const gfx::Vector2dF& max_scroll_offset_dip,
+ const gfx::SizeF& scrollable_size_dip,
+ float page_scale_factor,
+ float min_page_scale_factor,
+ float max_page_scale_factor) OVERRIDE;
virtual bool IsExternalFlingActive() const OVERRIDE;
- virtual void SetRootLayerPageScaleFactorAndLimits(float page_scale_factor,
- float min_page_scale_factor,
- float max_page_scale_factor)
- OVERRIDE;
- virtual void SetRootLayerScrollableSize(gfx::SizeF scrollable_size) OVERRIDE;
virtual void DidOverscroll(gfx::Vector2dF accumulated_overscroll,
gfx::Vector2dF latest_overscroll_delta,
gfx::Vector2dF current_fling_velocity) OVERRIDE;
@@ -141,6 +141,7 @@ class BrowserViewRenderer : public content::SynchronousCompositorClient,
bool effective_immediately) OVERRIDE;
private:
+ void SetTotalRootLayerScrollOffset(gfx::Vector2dF new_value_dip);
// Checks the continuous invalidate and block invalidate state, and schedule
// invalidates appropriately. If |force_invalidate| is true, then send a view
// invalidate regardless of compositor expectation.
@@ -148,6 +149,9 @@ class BrowserViewRenderer : public content::SynchronousCompositorClient,
bool DrawSWInternal(jobject java_canvas, const gfx::Rect& clip_bounds);
bool CompositeSW(SkCanvas* canvas);
void DidComposite(bool force_invalidate);
+ scoped_ptr<base::Value> RootLayerStateAsValue(
+ const gfx::Vector2dF& total_scroll_offset_dip,
+ const gfx::SizeF& scrollable_size_dip);
// If we call up view invalidate and OnDraw is not called before a deadline,
// then we keep ticking the SynchronousCompositor so it can make progress.
diff --git a/android_webview/browser/browser_view_renderer_client.h b/android_webview/browser/browser_view_renderer_client.h
index fce1c80..41fbf5a 100644
--- a/android_webview/browser/browser_view_renderer_client.h
+++ b/android_webview/browser/browser_view_renderer_client.h
@@ -34,20 +34,19 @@ class BrowserViewRendererClient {
// Try to set the view's scroll offset to |new_value|.
virtual void ScrollContainerViewTo(gfx::Vector2d new_value) = 0;
- // Set the view's scroll offset cap to |new_value|.
- virtual void SetMaxContainerViewScrollOffset(gfx::Vector2d new_value) = 0;
-
// Is a Android view system managed fling in progress?
virtual bool IsFlingActive() const = 0;
- // Set the current page scale to |page_scale_factor| and page scale limits
+ // Sets the following:
+ // view's scroll offset cap to |max_scroll_offset|,
+ // current contents_size to |contents_size_dip|,
+ // the current page scale to |page_scale_factor| and page scale limits
// to |min_page_scale_factor|..|max_page_scale_factor|.
- virtual void SetPageScaleFactorAndLimits(float page_scale_factor,
- float min_page_scale_factor,
- float max_page_scale_factor) = 0;
-
- // Set the current contents_size to |contents_size_dip|.
- virtual void SetContentsSize(gfx::SizeF contents_size_dip) = 0;
+ virtual void UpdateScrollState(gfx::Vector2d max_scroll_offset,
+ gfx::SizeF contents_size_dip,
+ float page_scale_factor,
+ float min_page_scale_factor,
+ float max_page_scale_factor) = 0;
// Handle overscroll.
virtual void DidOverscroll(gfx::Vector2d overscroll_delta) = 0;
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index 4f14219..86e6fa9 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -1949,11 +1949,6 @@ public class AwContents {
}
@CalledByNative
- private void setMaxContainerViewScrollOffset(int maxX, int maxY) {
- mScrollOffsetManager.setMaxScrollOffset(maxX, maxY);
- }
-
- @CalledByNative
private void scrollContainerViewTo(int x, int y) {
mScrollOffsetManager.scrollContainerViewTo(x, y);
}
@@ -1964,31 +1959,14 @@ public class AwContents {
}
@CalledByNative
- private void setContentsSize(int widthDip, int heightDip) {
- mContentWidthDip = widthDip;
- mContentHeightDip = heightDip;
- }
-
- @CalledByNative
- private void setPageScaleFactorAndLimits(
+ private void updateScrollState(int maxContainerViewScrollOffsetX,
+ int maxContainerViewScrollOffsetY, int contentWidthDip, int contentHeightDip,
float pageScaleFactor, float minPageScaleFactor, float maxPageScaleFactor) {
- if (mPageScaleFactor == pageScaleFactor &&
- mMinPageScaleFactor == minPageScaleFactor &&
- mMaxPageScaleFactor == maxPageScaleFactor) {
- return;
- }
- mMinPageScaleFactor = minPageScaleFactor;
- mMaxPageScaleFactor = maxPageScaleFactor;
- if (mPageScaleFactor != pageScaleFactor) {
- float oldPageScaleFactor = mPageScaleFactor;
- mPageScaleFactor = pageScaleFactor;
- // NOTE: if this ever needs to become synchronous then we need to make sure the scroll
- // bounds are correctly updated before calling the method, otherwise embedder code that
- // attempts to scroll on scale change might cause weird results.
- mContentsClient.getCallbackHelper().postOnScaleChangedScaled(
- (float)(oldPageScaleFactor * mDIPScale),
- (float)(mPageScaleFactor * mDIPScale));
- }
+ mContentWidthDip = contentWidthDip;
+ mContentHeightDip = contentHeightDip;
+ mScrollOffsetManager.setMaxScrollOffset(maxContainerViewScrollOffsetX,
+ maxContainerViewScrollOffsetY);
+ setPageScaleFactorAndLimits(pageScaleFactor, minPageScaleFactor, maxPageScaleFactor);
}
@CalledByNative
@@ -2014,6 +1992,27 @@ public class AwContents {
// Helper methods
// -------------------------------------------------------------------------------------------
+ private void setPageScaleFactorAndLimits(
+ float pageScaleFactor, float minPageScaleFactor, float maxPageScaleFactor) {
+ if (mPageScaleFactor == pageScaleFactor &&
+ mMinPageScaleFactor == minPageScaleFactor &&
+ mMaxPageScaleFactor == maxPageScaleFactor) {
+ return;
+ }
+ mMinPageScaleFactor = minPageScaleFactor;
+ mMaxPageScaleFactor = maxPageScaleFactor;
+ if (mPageScaleFactor != pageScaleFactor) {
+ float oldPageScaleFactor = mPageScaleFactor;
+ mPageScaleFactor = pageScaleFactor;
+ // NOTE: if this ever needs to become synchronous then we need to make sure the scroll
+ // bounds are correctly updated before calling the method, otherwise embedder code that
+ // attempts to scroll on scale change might cause weird results.
+ mContentsClient.getCallbackHelper().postOnScaleChangedScaled(
+ (float)(oldPageScaleFactor * mDIPScale),
+ (float)(mPageScaleFactor * mDIPScale));
+ }
+ }
+
private void saveWebArchiveInternal(String path, final ValueCallback<String> callback) {
if (path == null || mNativeAwContents == 0) {
ThreadUtils.runOnUiThread(new Runnable() {
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AndroidScrollIntegrationTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AndroidScrollIntegrationTest.java
index a222023..9c522a5 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AndroidScrollIntegrationTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AndroidScrollIntegrationTest.java
@@ -30,6 +30,7 @@ public class AndroidScrollIntegrationTest extends AwTestBase {
private static class OverScrollByCallbackHelper extends CallbackHelper {
int mDeltaX;
int mDeltaY;
+ int mScrollRangeY;
public int getDeltaX() {
assert getCallCount() > 0;
@@ -41,9 +42,15 @@ public class AndroidScrollIntegrationTest extends AwTestBase {
return mDeltaY;
}
- public void notifyCalled(int deltaX, int deltaY) {
+ public int getScrollRangeY() {
+ assert getCallCount() > 0;
+ return mScrollRangeY;
+ }
+
+ public void notifyCalled(int deltaX, int deltaY, int scrollRangeY) {
mDeltaX = deltaX;
mDeltaY = deltaY;
+ mScrollRangeY = scrollRangeY;
notifyCalled();
}
}
@@ -80,7 +87,7 @@ public class AndroidScrollIntegrationTest extends AwTestBase {
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY,
int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY,
boolean isTouchEvent) {
- mOverScrollByCallbackHelper.notifyCalled(deltaX, deltaY);
+ mOverScrollByCallbackHelper.notifyCalled(deltaX, deltaY, scrollRangeY);
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY,
scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
}
@@ -122,6 +129,9 @@ public class AndroidScrollIntegrationTest extends AwTestBase {
private static final String TEST_PAGE_COMMON_HEADERS =
"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> " +
"<style type=\"text/css\"> " +
+ " body { " +
+ " margin: 0px; " +
+ " } " +
" div { " +
" width:1000px; " +
" height:10000px; " +
@@ -322,6 +332,36 @@ public class AndroidScrollIntegrationTest extends AwTestBase {
@SmallTest
@Feature({"AndroidWebView"})
+ public void testJsScrollFromBody() throws Throwable {
+ final TestAwContentsClient contentsClient = new TestAwContentsClient();
+ final ScrollTestContainerView testContainerView =
+ (ScrollTestContainerView) createAwTestContainerViewOnMainSync(contentsClient);
+ enableJavaScriptOnUiThread(testContainerView.getAwContents());
+
+ final double deviceDIPScale =
+ DeviceDisplayInfo.create(testContainerView.getContext()).getDIPScale();
+ final int targetScrollXCss = 132;
+ final int targetScrollYCss = 243;
+ final int targetScrollXPix = (int) Math.floor(targetScrollXCss * deviceDIPScale);
+ final int targetScrollYPix = (int) Math.floor(targetScrollYCss * deviceDIPScale);
+
+ final String scrollFromBodyScript =
+ "<script> " +
+ " window.scrollTo(" + targetScrollXCss + ", " + targetScrollYCss + "); " +
+ "</script> ";
+
+ final CallbackHelper onScrollToCallbackHelper =
+ testContainerView.getOnScrollToCallbackHelper();
+ final int scrollToCallCount = onScrollToCallbackHelper.getCallCount();
+ loadDataAsync(testContainerView.getAwContents(),
+ makeTestPage(null, null, scrollFromBodyScript), "text/html", false);
+ onScrollToCallbackHelper.waitForCallback(scrollToCallCount);
+
+ assertScrollOnMainSync(testContainerView, targetScrollXPix, targetScrollYPix);
+ }
+
+ @SmallTest
+ @Feature({"AndroidWebView"})
public void testJsScrollCanBeAlteredByUi() throws Throwable {
final TestAwContentsClient contentsClient = new TestAwContentsClient();
final ScrollTestContainerView testContainerView =
@@ -757,4 +797,47 @@ public class AndroidScrollIntegrationTest extends AwTestBase {
null /* completionLatch */);
onScrollUpdateGestureConsumedHelper.waitForCallback(callCount);
}
+
+ @SmallTest
+ @Feature({"AndroidWebView"})
+ public void testPinchZoomUpdatesScrollRangeSynchronously() throws Throwable {
+ final TestAwContentsClient contentsClient = new TestAwContentsClient();
+ final ScrollTestContainerView testContainerView =
+ (ScrollTestContainerView) createAwTestContainerViewOnMainSync(contentsClient);
+ final OverScrollByCallbackHelper overScrollByCallbackHelper =
+ testContainerView.getOverScrollByCallbackHelper();
+ final AwContents awContents = testContainerView.getAwContents();
+ enableJavaScriptOnUiThread(awContents);
+
+ loadTestPageAndWaitForFirstFrame(testContainerView, contentsClient, null, "");
+
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ assertTrue(awContents.canZoomIn());
+
+ int oldScrollRange =
+ awContents.computeVerticalScrollRange() - testContainerView.getHeight();
+ float oldScale = awContents.getScale();
+ int oldContentHeightApproximation =
+ (int) Math.ceil(awContents.computeVerticalScrollRange() / oldScale);
+
+ awContents.zoomIn();
+
+ int newScrollRange =
+ awContents.computeVerticalScrollRange() - testContainerView.getHeight();
+ float newScale = awContents.getScale();
+ int newContentHeightApproximation =
+ (int) Math.ceil(awContents.computeVerticalScrollRange() / newScale);
+
+ assertTrue(String.format("Scale range should increase after zoom (%f) > (%f)",
+ newScale, oldScale), newScale > oldScale);
+ assertTrue(String.format("Scroll range should increase after zoom (%d) > (%d)",
+ newScrollRange, oldScrollRange), newScrollRange > oldScrollRange);
+ assertEquals(awContents.getContentHeightCss(), oldContentHeightApproximation);
+ assertEquals(awContents.getContentHeightCss(), newContentHeightApproximation);
+ }
+ });
+
+ }
}
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index 6e9c1fe..91f6f9d 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -939,16 +939,6 @@ gfx::Point AwContents::GetLocationOnScreen() {
return gfx::Point(location[0], location[1]);
}
-void AwContents::SetMaxContainerViewScrollOffset(gfx::Vector2d new_value) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
- if (obj.is_null())
- return;
- Java_AwContents_setMaxContainerViewScrollOffset(
- env, obj.obj(), new_value.x(), new_value.y());
-}
-
void AwContents::ScrollContainerViewTo(gfx::Vector2d new_value) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
JNIEnv* env = AttachCurrentThread();
@@ -968,30 +958,25 @@ bool AwContents::IsFlingActive() const {
return Java_AwContents_isFlingActive(env, obj.obj());
}
-void AwContents::SetPageScaleFactorAndLimits(
- float page_scale_factor,
- float min_page_scale_factor,
- float max_page_scale_factor) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- JNIEnv* env = AttachCurrentThread();
- ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
- if (obj.is_null())
- return;
- Java_AwContents_setPageScaleFactorAndLimits(env,
- obj.obj(),
- page_scale_factor,
- min_page_scale_factor,
- max_page_scale_factor);
-}
-
-void AwContents::SetContentsSize(gfx::SizeF contents_size_dip) {
+void AwContents::UpdateScrollState(gfx::Vector2d max_scroll_offset,
+ gfx::SizeF contents_size_dip,
+ float page_scale_factor,
+ float min_page_scale_factor,
+ float max_page_scale_factor) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
if (obj.is_null())
return;
- Java_AwContents_setContentsSize(
- env, obj.obj(), contents_size_dip.width(), contents_size_dip.height());
+ Java_AwContents_updateScrollState(env,
+ obj.obj(),
+ max_scroll_offset.x(),
+ max_scroll_offset.y(),
+ contents_size_dip.width(),
+ contents_size_dip.height(),
+ page_scale_factor,
+ min_page_scale_factor,
+ max_page_scale_factor);
}
void AwContents::DidOverscroll(gfx::Vector2d overscroll_delta) {
diff --git a/android_webview/native/aw_contents.h b/android_webview/native/aw_contents.h
index 73c1036..a74d928 100644
--- a/android_webview/native/aw_contents.h
+++ b/android_webview/native/aw_contents.h
@@ -182,15 +182,13 @@ class AwContents : public FindHelper::Listener,
virtual void PostInvalidate() OVERRIDE;
virtual void OnNewPicture() OVERRIDE;
virtual gfx::Point GetLocationOnScreen() OVERRIDE;
- virtual void SetMaxContainerViewScrollOffset(
- gfx::Vector2d new_value) OVERRIDE;
virtual void ScrollContainerViewTo(gfx::Vector2d new_value) OVERRIDE;
virtual bool IsFlingActive() const OVERRIDE;
- virtual void SetPageScaleFactorAndLimits(
- float page_scale_factor,
- float min_page_scale_factor,
- float max_page_scale_factor) OVERRIDE;
- virtual void SetContentsSize(gfx::SizeF contents_size_dip) OVERRIDE;
+ virtual void UpdateScrollState(gfx::Vector2d max_scroll_offset,
+ gfx::SizeF contents_size_dip,
+ float page_scale_factor,
+ float min_page_scale_factor,
+ float max_page_scale_factor) OVERRIDE;
virtual void DidOverscroll(gfx::Vector2d overscroll_delta) OVERRIDE;
const BrowserViewRenderer* GetBrowserViewRenderer() const;