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/Length.h"
     37 #include "platform/geometry/IntSize.h"
     38 
     39 namespace blink {
     40 
     41 // This class harmonizes the viewport (particularly page scale) constraints from
     42 // the meta viewport tag and other sources.
     43 class PageScaleConstraintsSet {
     44 public:
     45     PageScaleConstraintsSet();
     46 
     47     WebCore::PageScaleConstraints defaultConstraints() const;
     48 
     49     // Settings defined in the website's viewport tag, if viewport tag support
     50     // is enabled.
     51     const WebCore::PageScaleConstraints& pageDefinedConstraints() const { return m_pageDefinedConstraints; }
     52     void updatePageDefinedConstraints(const WebCore::ViewportDescription&, WebCore::Length legacyFallbackWidth);
     53     void adjustForAndroidWebViewQuirks(const WebCore::ViewportDescription&, int layoutFallbackWidth, float deviceScaleFactor, bool supportTargetDensityDPI, bool wideViewportQuirkEnabled, bool useWideViewport, bool loadWithOverviewMode, bool nonUserScalableQuirkEnabled);
     54 
     55     // Constraints may also be set from Chromium -- this overrides any
     56     // page-defined values.
     57     const WebCore::PageScaleConstraints& userAgentConstraints() const { return m_userAgentConstraints; }
     58     void setUserAgentConstraints(const WebCore::PageScaleConstraints&);
     59 
     60     // Actual computed values, taking into account the above plus the current
     61     // viewport size and document width.
     62     const WebCore::PageScaleConstraints& finalConstraints() const { return m_finalConstraints; }
     63     void computeFinalConstraints();
     64     void adjustFinalConstraintsToContentsSize(WebCore::IntSize contentsSize, int nonOverlayScrollbarWidth);
     65 
     66     void didChangeContentsSize(WebCore::IntSize contentsSize, float pageScaleFactor);
     67 
     68     // This should be set to true on each page load to note that the page scale
     69     // factor needs to be reset to its initial value.
     70     void setNeedsReset(bool);
     71     bool needsReset() const { return m_needsReset; }
     72 
     73     // This is set when one of the inputs to finalConstraints changes.
     74     bool constraintsDirty() const { return m_constraintsDirty; }
     75 
     76     void didChangeViewSize(const WebCore::IntSize&);
     77 
     78     WebCore::IntSize mainFrameSize(const WebCore::IntSize& contentsSize) const;
     79 
     80 private:
     81     WebCore::PageScaleConstraints computeConstraintsStack() const;
     82 
     83     WebCore::PageScaleConstraints m_pageDefinedConstraints;
     84     WebCore::PageScaleConstraints m_userAgentConstraints;
     85     WebCore::PageScaleConstraints m_finalConstraints;
     86 
     87     int m_lastContentsWidth;
     88     WebCore::IntSize m_viewSize;
     89 
     90     bool m_needsReset;
     91     bool m_constraintsDirty;
     92 };
     93 
     94 } // namespace WebCore
     95 
     96 #endif // PageScaleConstraintsSet_h
     97