Home | History | Annotate | Download | only in web
      1 /*
      2  * Copyright (C) 2013 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 #ifndef PageScaleConstraintsSet_h
     32 #define PageScaleConstraintsSet_h
     33 
     34 #include "core/dom/ViewportDescription.h"
     35 #include "core/page/PageScaleConstraints.h"
     36 #include "platform/geometry/IntSize.h"
     37 
     38 namespace blink {
     39 
     40 // This class harmonizes the viewport (particularly page scale) constraints from
     41 // the meta viewport tag and other sources.
     42 class PageScaleConstraintsSet {
     43 public:
     44     PageScaleConstraintsSet();
     45 
     46     WebCore::PageScaleConstraints defaultConstraints() const;
     47 
     48     // Settings defined in the website's viewport tag, if viewport tag support
     49     // is enabled.
     50     const WebCore::PageScaleConstraints& pageDefinedConstraints() const { return m_pageDefinedConstraints; }
     51     void updatePageDefinedConstraints(const WebCore::ViewportDescription&, WebCore::IntSize viewSize);
     52     void adjustForAndroidWebViewQuirks(const WebCore::ViewportDescription&, WebCore::IntSize viewSize, int layoutFallbackWidth, float deviceScaleFactor, bool supportTargetDensityDPI, bool wideViewportQuirkEnabled, bool useWideViewport, bool loadWithOverviewMode, bool nonUserScalableQuirkEnabled);
     53 
     54     // Constraints may also be set from Chromium -- this overrides any
     55     // page-defined values.
     56     const WebCore::PageScaleConstraints& userAgentConstraints() const { return m_userAgentConstraints; }
     57     void setUserAgentConstraints(const WebCore::PageScaleConstraints&);
     58 
     59     // Actual computed values, taking into account the above plus the current
     60     // viewport size and document width.
     61     const WebCore::PageScaleConstraints& finalConstraints() const { return m_finalConstraints; }
     62     void computeFinalConstraints();
     63     void adjustFinalConstraintsToContentsSize(WebCore::IntSize viewSize, WebCore::IntSize contentsSize, int nonOverlayScrollbarWidth);
     64 
     65     void didChangeContentsSize(WebCore::IntSize contentsSize, float pageScaleFactor);
     66 
     67     // This should be set to true on each page load to note that the page scale
     68     // factor needs to be reset to its initial value.
     69     void setNeedsReset(bool);
     70     bool needsReset() const { return m_needsReset; }
     71 
     72     // This is set when one of the inputs to finalConstraints changes.
     73     bool constraintsDirty() const { return m_constraintsDirty; }
     74 
     75 private:
     76     WebCore::PageScaleConstraints computeConstraintsStack() const;
     77 
     78     WebCore::PageScaleConstraints m_pageDefinedConstraints;
     79     WebCore::PageScaleConstraints m_userAgentConstraints;
     80     WebCore::PageScaleConstraints m_finalConstraints;
     81 
     82     int m_lastContentsWidth;
     83 
     84     bool m_needsReset;
     85     bool m_constraintsDirty;
     86 };
     87 
     88 } // namespace WebCore
     89 
     90 #endif // PageScaleConstraintsSet_h
     91