| 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 1aafe09b6864acea84da637e6cd980af5d470a3c..ee53599fb880218ad9399b4dfc7afdb9c927476b 100644 | 
| --- a/third_party/WebKit/Source/core/dom/StyleEngine.cpp | 
| +++ b/third_party/WebKit/Source/core/dom/StyleEngine.cpp | 
| @@ -447,6 +447,16 @@ void StyleEngine::setRuleUsageTracker(StyleRuleUsageTracker* tracker) { | 
| m_resolver->setRuleUsageTracker(m_tracker); | 
| } | 
|  | 
| +RuleSet* StyleEngine::ruleSetForSheet(CSSStyleSheet& sheet) { | 
| +  if (!sheet.matchesMediaQueries(ensureMediaQueryEvaluator())) | 
| +    return nullptr; | 
| + | 
| +  AddRuleFlags addRuleFlags = RuleHasNoSpecialState; | 
| +  if (m_document->getSecurityOrigin()->canRequest(sheet.baseURL())) | 
| +    addRuleFlags = RuleHasDocumentSecurityOrigin; | 
| +  return &sheet.contents()->ensureRuleSet(*m_mediaQueryEvaluator, addRuleFlags); | 
| +} | 
| + | 
| void StyleEngine::createResolver() { | 
| m_resolver = StyleResolver::create(*m_document); | 
|  | 
| @@ -1149,6 +1159,28 @@ const MediaQueryEvaluator& StyleEngine::ensureMediaQueryEvaluator() { | 
| return *m_mediaQueryEvaluator; | 
| } | 
|  | 
| +bool StyleEngine::mediaQueryAffectedByViewportChange() { | 
| +  const MediaQueryEvaluator& evaluator = ensureMediaQueryEvaluator(); | 
| +  const auto& results = | 
| +      m_globalRuleSet.ruleFeatureSet().viewportDependentMediaQueryResults(); | 
| +  for (unsigned i = 0; i < results.size(); ++i) { | 
| +    if (evaluator.eval(results[i]->expression()) != results[i]->result()) | 
| +      return true; | 
| +  } | 
| +  return false; | 
| +} | 
| + | 
| +bool StyleEngine::mediaQueryAffectedByDeviceChange() { | 
| +  const MediaQueryEvaluator& evaluator = ensureMediaQueryEvaluator(); | 
| +  const auto& results = | 
| +      m_globalRuleSet.ruleFeatureSet().deviceDependentMediaQueryResults(); | 
| +  for (unsigned i = 0; i < results.size(); ++i) { | 
| +    if (evaluator.eval(results[i]->expression()) != results[i]->result()) | 
| +      return true; | 
| +  } | 
| +  return false; | 
| +} | 
| + | 
| DEFINE_TRACE(StyleEngine) { | 
| visitor->trace(m_document); | 
| visitor->trace(m_injectedAuthorStyleSheets); | 
|  |