| Index: third_party/WebKit/Source/core/dom/StyleEngine.cpp
 | 
| diff --git a/third_party/WebKit/Source/core/dom/StyleEngine.cpp b/third_party/WebKit/Source/core/dom/StyleEngine.cpp
 | 
| index c056371b2c233b06f2db93f8bc9f27580b36a9b4..531253c4f769e31e74050b4c17570d5048b6a7b0 100644
 | 
| --- a/third_party/WebKit/Source/core/dom/StyleEngine.cpp
 | 
| +++ b/third_party/WebKit/Source/core/dom/StyleEngine.cpp
 | 
| @@ -37,6 +37,7 @@
 | 
|  #include "core/css/StyleSheetContents.h"
 | 
|  #include "core/css/invalidation/InvalidationSet.h"
 | 
|  #include "core/css/resolver/ScopedStyleResolver.h"
 | 
| +#include "core/css/resolver/ViewportStyleResolver.h"
 | 
|  #include "core/dom/DocumentStyleSheetCollector.h"
 | 
|  #include "core/dom/Element.h"
 | 
|  #include "core/dom/ElementTraversal.h"
 | 
| @@ -64,13 +65,15 @@ StyleEngine::StyleEngine(Document& document)
 | 
|        m_isMaster(!document.importsController() ||
 | 
|                   document.importsController()->master() == &document),
 | 
|        m_documentStyleSheetCollection(
 | 
| -          DocumentStyleSheetCollection::create(document)),
 | 
| -      // We don't need to create CSSFontSelector for imported document or
 | 
| -      // HTMLTemplateElement's document, because those documents have no frame.
 | 
| -      m_fontSelector(document.frame() ? CSSFontSelector::create(&document)
 | 
| -                                      : nullptr) {
 | 
| -  if (m_fontSelector)
 | 
| +          DocumentStyleSheetCollection::create(document)) {
 | 
| +  if (document.frame()) {
 | 
| +    // We don't need to create CSSFontSelector for imported document or
 | 
| +    // HTMLTemplateElement's document, because those documents have no frame.
 | 
| +    m_fontSelector = CSSFontSelector::create(&document);
 | 
|      m_fontSelector->registerForInvalidationCallbacks(this);
 | 
| +  }
 | 
| +  if (document.isInMainFrame())
 | 
| +    m_viewportResolver = ViewportStyleResolver::create(document);
 | 
|  }
 | 
|  
 | 
|  StyleEngine::~StyleEngine() {}
 | 
| @@ -393,6 +396,8 @@ void StyleEngine::shadowRootRemovedFromDocument(ShadowRoot* shadowRoot) {
 | 
|  void StyleEngine::appendActiveAuthorStyleSheets() {
 | 
|    DCHECK(isMaster());
 | 
|  
 | 
| +  viewportRulesChanged();
 | 
| +
 | 
|    m_resolver->appendAuthorStyleSheets(
 | 
|        documentStyleSheetCollection().activeAuthorStyleSheets());
 | 
|    for (TreeScope* treeScope : m_activeTreeScopes) {
 | 
| @@ -442,6 +447,7 @@ void StyleEngine::clearMasterResolver() {
 | 
|  
 | 
|  void StyleEngine::didDetach() {
 | 
|    clearResolver();
 | 
| +  m_viewportResolver.clear();
 | 
|  }
 | 
|  
 | 
|  bool StyleEngine::shouldClearResolver() const {
 | 
| @@ -947,6 +953,29 @@ void StyleEngine::ensureFullscreenUAStyle() {
 | 
|      m_resolver->resetRuleFeatures();
 | 
|  }
 | 
|  
 | 
| +void StyleEngine::initialViewportChanged() {
 | 
| +  if (!m_viewportResolver)
 | 
| +    return;
 | 
| +
 | 
| +  m_viewportResolver->initialViewportChanged();
 | 
| +
 | 
| +  // TODO(rune@opera.com): for async stylesheet update, updateViewport() should
 | 
| +  // be called as part of the lifecycle update for active style. Synchronous for
 | 
| +  // now.
 | 
| +  m_viewportResolver->updateViewport(documentStyleSheetCollection());
 | 
| +}
 | 
| +
 | 
| +void StyleEngine::viewportRulesChanged() {
 | 
| +  if (!m_viewportResolver)
 | 
| +    return;
 | 
| +  m_viewportResolver->setNeedsCollectRules();
 | 
| +
 | 
| +  // TODO(rune@opera.com): for async stylesheet update, updateViewport() should
 | 
| +  // be called as part of the lifecycle update for active style. Synchronous for
 | 
| +  // now.
 | 
| +  m_viewportResolver->updateViewport(documentStyleSheetCollection());
 | 
| +}
 | 
| +
 | 
|  DEFINE_TRACE(StyleEngine) {
 | 
|    visitor->trace(m_document);
 | 
|    visitor->trace(m_injectedAuthorStyleSheets);
 | 
| @@ -954,6 +983,7 @@ DEFINE_TRACE(StyleEngine) {
 | 
|    visitor->trace(m_documentStyleSheetCollection);
 | 
|    visitor->trace(m_styleSheetCollectionMap);
 | 
|    visitor->trace(m_resolver);
 | 
| +  visitor->trace(m_viewportResolver);
 | 
|    visitor->trace(m_styleInvalidator);
 | 
|    visitor->trace(m_dirtyTreeScopes);
 | 
|    visitor->trace(m_activeTreeScopes);
 | 
| 
 |