| Index: chrome/browser/memory/tab_manager_web_contents_data.cc
|
| diff --git a/chrome/browser/memory/tab_manager_web_contents_data.cc b/chrome/browser/memory/tab_manager_web_contents_data.cc
|
| index d4efa76a7b5a02259ee598c286515081be369c49..42e31f7e9f002b41ff5983d888e8d1040a5c2a0f 100644
|
| --- a/chrome/browser/memory/tab_manager_web_contents_data.cc
|
| +++ b/chrome/browser/memory/tab_manager_web_contents_data.cc
|
| @@ -11,116 +11,82 @@
|
| using base::TimeTicks;
|
| using content::WebContents;
|
|
|
| -namespace {
|
| -
|
| -const char kDiscardStateKey[] = "WebContentsData";
|
| -
|
| -} // namespace
|
| +DEFINE_WEB_CONTENTS_USER_DATA_KEY(memory::TabManager::WebContentsData);
|
|
|
| namespace memory {
|
|
|
| -// static
|
| -TabManager::WebContentsData* TabManager::WebContentsData::Get(
|
| - WebContents* web_contents) {
|
| - DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| - TabManager::WebContentsData* discard_state = static_cast<WebContentsData*>(
|
| - web_contents->GetUserData(&kDiscardStateKey));
|
| -
|
| - // If this function is called, we probably need to query/change the discard
|
| - // state. Let's go ahead a add one.
|
| - if (!discard_state) {
|
| - discard_state = new WebContentsData;
|
| - web_contents->SetUserData(&kDiscardStateKey, discard_state);
|
| - }
|
| +TabManager::WebContentsData::WebContentsData(content::WebContents* web_contents)
|
| + : WebContentsObserver(web_contents) {}
|
|
|
| - return discard_state;
|
| -}
|
| +TabManager::WebContentsData::~WebContentsData() {}
|
|
|
| -// static
|
| -void TabManager::WebContentsData::Set(WebContents* web_contents,
|
| - WebContentsData* state) {
|
| - DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| - web_contents->SetUserData(&kDiscardStateKey, state);
|
| +void TabManager::WebContentsData::DidStartLoading() {
|
| + // Marks the tab as no longer discarded if it has been reloaded from another
|
| + // source (ie: context menu).
|
| + SetDiscardState(false);
|
| }
|
|
|
| -// static
|
| -void TabManager::WebContentsData::CopyState(
|
| - content::WebContents* old_contents,
|
| - content::WebContents* new_contents) {
|
| - WebContentsData* old_state = Get(old_contents);
|
| - WebContentsData* new_State = Get(new_contents);
|
| - *new_State = *old_state;
|
| -}
|
| -
|
| -// static
|
| -bool TabManager::WebContentsData::IsDiscarded(WebContents* web_contents) {
|
| - return TabManager::WebContentsData::Get(web_contents)->is_discarded_;
|
| +bool TabManager::WebContentsData::IsDiscarded() {
|
| + return tab_data_.is_discarded_;
|
| }
|
|
|
| -// static
|
| -void TabManager::WebContentsData::SetDiscardState(WebContents* web_contents,
|
| - bool state) {
|
| - WebContentsData* discard_state =
|
| - TabManager::WebContentsData::Get(web_contents);
|
| - if (discard_state->is_discarded_ && !state) {
|
| +void TabManager::WebContentsData::SetDiscardState(bool state) {
|
| + if (tab_data_.is_discarded_ && !state) {
|
| static int reload_count = 0;
|
| UMA_HISTOGRAM_CUSTOM_COUNTS("TabManager.Discarding.ReloadCount",
|
| ++reload_count, 1, 1000, 50);
|
| - auto delta = base::TimeTicks::Now() - discard_state->last_discard_time_;
|
| + auto delta = base::TimeTicks::Now() - tab_data_.last_discard_time_;
|
| // Capped to one day for now, will adjust if necessary.
|
| UMA_HISTOGRAM_CUSTOM_TIMES("TabManager.Discarding.DiscardToReloadTime",
|
| delta, base::TimeDelta::FromSeconds(1),
|
| base::TimeDelta::FromDays(1), 100);
|
| - } else if (!discard_state->is_discarded_ && state) {
|
| + } else if (!tab_data_.is_discarded_ && state) {
|
| static int discard_count = 0;
|
| UMA_HISTOGRAM_CUSTOM_COUNTS("TabManager.Discarding.DiscardCount",
|
| ++discard_count, 1, 1000, 50);
|
| - discard_state->last_discard_time_ = base::TimeTicks::Now();
|
| + tab_data_.last_discard_time_ = base::TimeTicks::Now();
|
| }
|
|
|
| - discard_state->is_discarded_ = state;
|
| + tab_data_.is_discarded_ = state;
|
| }
|
|
|
| -// static
|
| -int TabManager::WebContentsData::DiscardCount(WebContents* web_contents) {
|
| - return TabManager::WebContentsData::Get(web_contents)->discard_count_;
|
| +int TabManager::WebContentsData::DiscardCount() {
|
| + return tab_data_.discard_count_;
|
| }
|
|
|
| -// static
|
| -void TabManager::WebContentsData::IncrementDiscardCount(
|
| - WebContents* web_contents) {
|
| - TabManager::WebContentsData::Get(web_contents)->discard_count_++;
|
| +void TabManager::WebContentsData::IncrementDiscardCount() {
|
| + tab_data_.discard_count_++;
|
| }
|
|
|
| -// static
|
| -bool TabManager::WebContentsData::IsRecentlyAudible(
|
| - content::WebContents* web_contents) {
|
| - return TabManager::WebContentsData::Get(web_contents)->is_recently_audible_;
|
| +bool TabManager::WebContentsData::IsRecentlyAudible() {
|
| + return tab_data_.is_recently_audible_;
|
| }
|
|
|
| -// static
|
| -void TabManager::WebContentsData::SetRecentlyAudible(
|
| - content::WebContents* web_contents,
|
| - bool state) {
|
| - TabManager::WebContentsData::Get(web_contents)->is_recently_audible_ = state;
|
| +void TabManager::WebContentsData::SetRecentlyAudible(bool state) {
|
| + tab_data_.is_recently_audible_ = state;
|
| }
|
|
|
| -// static
|
| -TimeTicks TabManager::WebContentsData::LastAudioChangeTime(
|
| - content::WebContents* web_contents) {
|
| - return TabManager::WebContentsData::Get(web_contents)
|
| - ->last_audio_change_time_;
|
| +TimeTicks TabManager::WebContentsData::LastAudioChangeTime() {
|
| + return tab_data_.last_audio_change_time_;
|
| +}
|
| +
|
| +void TabManager::WebContentsData::SetLastAudioChangeTime(TimeTicks timestamp) {
|
| + tab_data_.last_audio_change_time_ = timestamp;
|
| }
|
|
|
| // static
|
| -void TabManager::WebContentsData::SetLastAudioChangeTime(
|
| - content::WebContents* web_contents,
|
| - TimeTicks timestamp) {
|
| - TabManager::WebContentsData::Get(web_contents)->last_audio_change_time_ =
|
| - timestamp;
|
| +void TabManager::WebContentsData::CopyState(
|
| + content::WebContents* old_contents,
|
| + content::WebContents* new_contents) {
|
| + // Only copy if an existing state is found.
|
| + if (FromWebContents(old_contents)) {
|
| + CreateForWebContents(new_contents);
|
| + FromWebContents(new_contents)->tab_data_ =
|
| + FromWebContents(old_contents)->tab_data_;
|
| + }
|
| }
|
|
|
| -TabManager::WebContentsData::WebContentsData()
|
| +TabManager::WebContentsData::Data::Data()
|
| : is_discarded_(false),
|
| discard_count_(0),
|
| is_recently_audible_(false),
|
|
|