Chromium Code Reviews| Index: third_party/WebKit/Source/core/frame/ScrollAndScaleEmulator.h | 
| diff --git a/third_party/WebKit/Source/core/frame/ScrollAndScaleEmulator.h b/third_party/WebKit/Source/core/frame/ScrollAndScaleEmulator.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..acbd3af842511811e2eb05090c4d4ed2a2f6b64b | 
| --- /dev/null | 
| +++ b/third_party/WebKit/Source/core/frame/ScrollAndScaleEmulator.h | 
| @@ -0,0 +1,113 @@ | 
| +/* | 
| + * Copyright (C) 2016 Google Inc. All rights reserved. | 
| 
 
bokan
2016/07/04 22:44:09
Use shortened license block both here and in the c
 
Eric Seckler
2016/07/05 16:46:51
Done.
 
 | 
| + * | 
| + * Redistribution and use in source and binary forms, with or without | 
| + * modification, are permitted provided that the following conditions are | 
| + * met: | 
| + * | 
| + * * Redistributions of source code must retain the above copyright | 
| + * notice, this list of conditions and the following disclaimer. | 
| + * * Redistributions in binary form must reproduce the above | 
| + * copyright notice, this list of conditions and the following disclaimer | 
| + * in the documentation and/or other materials provided with the | 
| + * distribution. | 
| + * * Neither the name of Google Inc. nor the names of its | 
| + * contributors may be used to endorse or promote products derived from | 
| + * this software without specific prior written permission. | 
| + * | 
| + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
| + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
| + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
| + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
| + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
| + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
| + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
| + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
| + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
| + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
| + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
| + */ | 
| + | 
| +#ifndef ScrollAndScaleEmulator_h | 
| +#define ScrollAndScaleEmulator_h | 
| + | 
| +#include "core/CoreExport.h" | 
| +#include "core/frame/PageScaleConstraints.h" | 
| +#include "platform/geometry/DoublePoint.h" | 
| +#include "platform/geometry/IntPoint.h" | 
| +#include "wtf/Noncopyable.h" | 
| +#include "wtf/PassRefPtr.h" | 
| +#include "wtf/RefCounted.h" | 
| + | 
| +namespace blink { | 
| + | 
| +class IntSize; | 
| +class Page; | 
| + | 
| +// Overrides the scroll positions of frame and visual viewport and the page | 
| +// scale with fixed values. | 
| +// | 
| +// Scroll position overrides are enforced within VisualViewport and FrameView | 
| +// by manipulating their minimum/maximum scroll positions. The override is then | 
| +// applied when the scroll position is clamped to these min/max values. | 
| +// | 
| +// Similarly, the scale override is enforced through setting custom user-agent | 
| +// PageScaleConstraints in WebViewImpl. | 
| +class CORE_EXPORT ScrollAndScaleEmulator final : public RefCounted<ScrollAndScaleEmulator> { | 
| 
 
bokan
2016/07/04 22:44:09
RefCounted is deprecated. Instead, inherit from Ga
 
Eric Seckler
2016/07/05 16:46:51
Done.
 
 | 
| + WTF_MAKE_NONCOPYABLE(ScrollAndScaleEmulator); | 
| +public: | 
| + // Create a new emulator instance. Also disables threaded scrolling for the | 
| + // page while the override is in effect. | 
| + static PassRefPtr<ScrollAndScaleEmulator> create(Page*); | 
| + | 
| + virtual ~ScrollAndScaleEmulator() {} | 
| + | 
| + // Enforce new override values, notify viewports about changes. | 
| + void update(Page*, const IntPoint& framePosition, const DoublePoint& visualViewportPosition, float pageScale); | 
| + | 
| + // Clear overrides, notify viewports about changes. Also restores threaded | 
| + // scrolling settings and original user-agent PageScaleConstraints. | 
| + void clear(Page*); | 
| + | 
| + // Return main frame scroll position with active overrides for individual | 
| + // coordinates applied. | 
| + IntPoint applyFramePositionOverride(const IntPoint&); | 
| + | 
| + // Return visual viewport scroll position with active overrides for | 
| + // individual coordinates applied. | 
| + DoublePoint applyVisualViewportPositionOverride(const DoublePoint&); | 
| + | 
| + // Calculate and return main frame size for original PageScaleConstraints. | 
| + IntSize mainFrameSize(Page*, const IntSize& webViewSize); | 
| + | 
| +private: | 
| + ScrollAndScaleEmulator(); | 
| + | 
| + void disableThreadedScrolling(Page*); | 
| + void restoreThreadedScrolling(Page*); | 
| + | 
| + // Return PageScaleConstraints that enforce any active page scale override. | 
| + // Defaults to original constraints if no override is active. | 
| + PageScaleConstraints pageScaleConstraints(); | 
| + | 
| + void setOriginalPageScaleConstraints(const PageScaleConstraints&); | 
| + | 
| + template <typename Point> | 
| + Point applyPositionOverride(const Point& position, const Point& override); | 
| + | 
| + // Scroll position of frame. |x < 0| or |y < 0| disables the override for the respective coordinate. | 
| + IntPoint m_framePosition; | 
| + | 
| + // Scroll position of visual viewport. |x < 0| or |y < 0| disables the override for the respective coordinate. | 
| + DoublePoint m_visualViewportPosition; | 
| + | 
| + // Simulates visual viewport pinch zoom. |pageScale == 0| disables the override. | 
| + double m_pageScale; | 
| + | 
| + bool m_originalThreadedScrollingEnabled; | 
| + PageScaleConstraints m_originalPageScaleConstraints; | 
| +}; | 
| + | 
| +} // namespace blink | 
| + | 
| +#endif // ScrollAndScaleEmulator_h |