| 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 0634c6ef6687e915f7a688860400b3aca78550f3..9a6c0f7ba95c94b94caad9d410460037562642b3 100644
|
| --- a/third_party/WebKit/Source/core/dom/StyleEngine.cpp
|
| +++ b/third_party/WebKit/Source/core/dom/StyleEngine.cpp
|
| @@ -78,6 +78,8 @@ StyleEngine::StyleEngine(Document& document)
|
| }
|
| if (document.IsInMainFrame())
|
| viewport_resolver_ = ViewportStyleResolver::Create(document);
|
| + if (IsMaster())
|
| + global_rule_set_ = CSSGlobalRuleSet::Create();
|
| }
|
|
|
| StyleEngine::~StyleEngine() {}
|
| @@ -252,7 +254,9 @@ void StyleEngine::MediaQueriesChangedInScope(TreeScope& tree_scope) {
|
| }
|
|
|
| void StyleEngine::WatchedSelectorsChanged() {
|
| - global_rule_set_.InitWatchedSelectorsRuleSet(GetDocument());
|
| + DCHECK(IsMaster());
|
| + DCHECK(global_rule_set_);
|
| + global_rule_set_->InitWatchedSelectorsRuleSet(GetDocument());
|
| // TODO(rune@opera.com): Should be able to use RuleSetInvalidation here.
|
| GetDocument().SetNeedsStyleRecalc(
|
| kSubtreeStyleChange, StyleChangeReasonForTracing::Create(
|
| @@ -357,7 +361,8 @@ void StyleEngine::UpdateViewport() {
|
|
|
| bool StyleEngine::NeedsActiveStyleUpdate() const {
|
| return (viewport_resolver_ && viewport_resolver_->NeedsUpdate()) ||
|
| - NeedsActiveStyleSheetUpdate() || global_rule_set_.IsDirty();
|
| + NeedsActiveStyleSheetUpdate() ||
|
| + (global_rule_set_ && global_rule_set_->IsDirty());
|
| }
|
|
|
| void StyleEngine::UpdateActiveStyle() {
|
| @@ -409,7 +414,7 @@ void StyleEngine::ResetAuthorStyle(TreeScope& tree_scope) {
|
| if (!scoped_resolver)
|
| return;
|
|
|
| - global_rule_set_.MarkDirty();
|
| + global_rule_set_->MarkDirty();
|
| if (tree_scope.RootNode().IsDocumentNode()) {
|
| scoped_resolver->ResetAuthorStyle();
|
| return;
|
| @@ -459,7 +464,9 @@ void StyleEngine::ClearResolvers() {
|
|
|
| void StyleEngine::DidDetach() {
|
| ClearResolvers();
|
| - global_rule_set_.Dispose();
|
| + if (global_rule_set_)
|
| + global_rule_set_->Dispose();
|
| + global_rule_set_ = nullptr;
|
| tree_boundary_crossing_scopes_.Clear();
|
| dirty_tree_scopes_.clear();
|
| active_tree_scopes_.clear();
|
| @@ -950,23 +957,29 @@ void StyleEngine::SetHttpDefaultStyle(const String& content) {
|
| }
|
|
|
| void StyleEngine::EnsureUAStyleForFullscreen() {
|
| - if (global_rule_set_.HasFullscreenUAStyle())
|
| + DCHECK(IsMaster());
|
| + DCHECK(global_rule_set_);
|
| + if (global_rule_set_->HasFullscreenUAStyle())
|
| return;
|
| CSSDefaultStyleSheets::Instance().EnsureDefaultStyleSheetForFullscreen();
|
| - global_rule_set_.MarkDirty();
|
| + global_rule_set_->MarkDirty();
|
| UpdateActiveStyle();
|
| }
|
|
|
| void StyleEngine::EnsureUAStyleForElement(const Element& element) {
|
| + DCHECK(IsMaster());
|
| + DCHECK(global_rule_set_);
|
| if (CSSDefaultStyleSheets::Instance().EnsureDefaultStyleSheetsForElement(
|
| element)) {
|
| - global_rule_set_.MarkDirty();
|
| + global_rule_set_->MarkDirty();
|
| UpdateActiveStyle();
|
| }
|
| }
|
|
|
| bool StyleEngine::HasRulesForId(const AtomicString& id) const {
|
| - return global_rule_set_.GetRuleFeatureSet().HasSelectorForId(id);
|
| + DCHECK(IsMaster());
|
| + DCHECK(global_rule_set_);
|
| + return global_rule_set_->GetRuleFeatureSet().HasSelectorForId(id);
|
| }
|
|
|
| void StyleEngine::InitialViewportChanged() {
|
| @@ -1011,11 +1024,13 @@ void StyleEngine::HtmlImportAddedOrRemoved() {
|
|
|
| PassRefPtr<ComputedStyle> StyleEngine::FindSharedStyle(
|
| const ElementResolveContext& element_resolve_context) {
|
| + DCHECK(IsMaster());
|
| DCHECK(resolver_);
|
| + DCHECK(global_rule_set_);
|
| return SharedStyleFinder(
|
| - element_resolve_context, global_rule_set_.GetRuleFeatureSet(),
|
| - global_rule_set_.SiblingRuleSet(),
|
| - global_rule_set_.UncommonAttributeRuleSet(), *resolver_)
|
| + element_resolve_context, global_rule_set_->GetRuleFeatureSet(),
|
| + global_rule_set_->SiblingRuleSet(),
|
| + global_rule_set_->UncommonAttributeRuleSet(), *resolver_)
|
| .FindSharedStyle();
|
| }
|
| namespace {
|
| @@ -1046,6 +1061,8 @@ void StyleEngine::ApplyRuleSetChanges(
|
| TreeScope& tree_scope,
|
| const ActiveStyleSheetVector& old_style_sheets,
|
| const ActiveStyleSheetVector& new_style_sheets) {
|
| + DCHECK(IsMaster());
|
| + DCHECK(global_rule_set_);
|
| HeapHashSet<Member<RuleSet>> changed_rule_sets;
|
|
|
| ScopedStyleResolver* scoped_resolver = tree_scope.GetScopedStyleResolver();
|
| @@ -1058,7 +1075,7 @@ void StyleEngine::ApplyRuleSetChanges(
|
| return;
|
|
|
| // With rules added or removed, we need to re-aggregate rule meta data.
|
| - global_rule_set_.MarkDirty();
|
| + global_rule_set_->MarkDirty();
|
|
|
| unsigned changed_rule_flags = GetRuleSetFlags(changed_rule_sets);
|
| bool fonts_changed = tree_scope.RootNode().IsDocumentNode() &&
|
| @@ -1132,9 +1149,11 @@ const MediaQueryEvaluator& StyleEngine::EnsureMediaQueryEvaluator() {
|
| }
|
|
|
| bool StyleEngine::MediaQueryAffectedByViewportChange() {
|
| + DCHECK(IsMaster());
|
| + DCHECK(global_rule_set_);
|
| const MediaQueryEvaluator& evaluator = EnsureMediaQueryEvaluator();
|
| - const auto& results =
|
| - global_rule_set_.GetRuleFeatureSet().ViewportDependentMediaQueryResults();
|
| + const auto& results = global_rule_set_->GetRuleFeatureSet()
|
| + .ViewportDependentMediaQueryResults();
|
| for (unsigned i = 0; i < results.size(); ++i) {
|
| if (evaluator.Eval(results[i].Expression()) != results[i].Result())
|
| return true;
|
| @@ -1143,9 +1162,11 @@ bool StyleEngine::MediaQueryAffectedByViewportChange() {
|
| }
|
|
|
| bool StyleEngine::MediaQueryAffectedByDeviceChange() {
|
| + DCHECK(IsMaster());
|
| + DCHECK(global_rule_set_);
|
| const MediaQueryEvaluator& evaluator = EnsureMediaQueryEvaluator();
|
| const auto& results =
|
| - global_rule_set_.GetRuleFeatureSet().DeviceDependentMediaQueryResults();
|
| + global_rule_set_->GetRuleFeatureSet().DeviceDependentMediaQueryResults();
|
| for (unsigned i = 0; i < results.size(); ++i) {
|
| if (evaluator.Eval(results[i].Expression()) != results[i].Result())
|
| return true;
|
| @@ -1162,10 +1183,10 @@ DEFINE_TRACE(StyleEngine) {
|
| visitor->Trace(dirty_tree_scopes_);
|
| visitor->Trace(active_tree_scopes_);
|
| visitor->Trace(tree_boundary_crossing_scopes_);
|
| - visitor->Trace(global_rule_set_);
|
| visitor->Trace(resolver_);
|
| visitor->Trace(viewport_resolver_);
|
| visitor->Trace(media_query_evaluator_);
|
| + visitor->Trace(global_rule_set_);
|
| visitor->Trace(style_invalidator_);
|
| visitor->Trace(font_selector_);
|
| visitor->Trace(text_to_sheet_cache_);
|
|
|