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), |