| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/resource_coordinator/local_site_characteristics_data_writer.h" |
| |
| namespace resource_coordinator { |
| |
| LocalSiteCharacteristicsDataWriter::~LocalSiteCharacteristicsDataWriter() { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| if (is_loaded_) |
| NotifySiteUnloaded(); |
| } |
| |
| void LocalSiteCharacteristicsDataWriter::NotifySiteLoaded() { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| |
| DCHECK(!is_loaded_); |
| is_loaded_ = true; |
| impl_->NotifySiteLoaded(); |
| |
| if (tab_visibility_ == TabVisibility::kBackground) |
| impl_->NotifyLoadedSiteBackgrounded(); |
| } |
| |
| void LocalSiteCharacteristicsDataWriter::NotifySiteUnloaded() { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| DCHECK(is_loaded_); |
| |
| is_loaded_ = false; |
| |
| impl_->NotifySiteUnloaded(tab_visibility_); |
| } |
| |
| void LocalSiteCharacteristicsDataWriter::NotifySiteVisibilityChanged( |
| TabVisibility visibility) { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| |
| // Ignore this if we receive the same event multiple times. |
| if (tab_visibility_ == visibility) |
| return; |
| |
| tab_visibility_ = visibility; |
| |
| if (is_loaded_) { |
| if (visibility == TabVisibility::kBackground) { |
| impl_->NotifyLoadedSiteBackgrounded(); |
| } else { |
| impl_->NotifyLoadedSiteForegrounded(); |
| } |
| } |
| } |
| |
| void LocalSiteCharacteristicsDataWriter::NotifyUpdatesFaviconInBackground() { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| DCHECK_EQ(TabVisibility::kBackground, tab_visibility_); |
| impl_->NotifyUpdatesFaviconInBackground(); |
| } |
| |
| void LocalSiteCharacteristicsDataWriter::NotifyUpdatesTitleInBackground() { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| DCHECK_EQ(TabVisibility::kBackground, tab_visibility_); |
| impl_->NotifyUpdatesTitleInBackground(); |
| } |
| |
| void LocalSiteCharacteristicsDataWriter::NotifyUsesAudioInBackground() { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| DCHECK_EQ(TabVisibility::kBackground, tab_visibility_); |
| // TODO(sebmarchand): Do not advance the background audio observation time |
| // when the WebContents has never played audio. |
| impl_->NotifyUsesAudioInBackground(); |
| } |
| |
| void LocalSiteCharacteristicsDataWriter::NotifyUsesNotificationsInBackground() { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| DCHECK_EQ(TabVisibility::kBackground, tab_visibility_); |
| impl_->NotifyUsesNotificationsInBackground(); |
| } |
| |
| void LocalSiteCharacteristicsDataWriter::NotifyLoadTimePerformanceMeasurement( |
| base::TimeDelta load_duration, |
| base::TimeDelta cpu_usage_estimate, |
| uint64_t private_footprint_kb_estimate) { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| impl_->NotifyLoadTimePerformanceMeasurement(load_duration, cpu_usage_estimate, |
| private_footprint_kb_estimate); |
| } |
| |
| LocalSiteCharacteristicsDataWriter::LocalSiteCharacteristicsDataWriter( |
| scoped_refptr<internal::LocalSiteCharacteristicsDataImpl> impl, |
| TabVisibility tab_visibility) |
| : impl_(std::move(impl)), |
| tab_visibility_(tab_visibility), |
| is_loaded_(false) { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| } |
| |
| } // namespace resource_coordinator |