Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5709)

Unified Diff: chrome/browser/sync/glue/session_model_associator.cc

Issue 7706024: [Sync] Don't attempt to sync windowless tabs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/glue/session_model_associator.cc
diff --git a/chrome/browser/sync/glue/session_model_associator.cc b/chrome/browser/sync/glue/session_model_associator.cc
index 4b7496d62add66c8175f0c45697334a58938ea29..ea4eee306bb0bbd0728373c23140fc6cdd5311fd 100644
--- a/chrome/browser/sync/glue/session_model_associator.cc
+++ b/chrome/browser/sync/glue/session_model_associator.cc
@@ -216,9 +216,6 @@ void SessionModelAssociator::ReassociateTabs(
void SessionModelAssociator::ReassociateTab(const SyncedTabDelegate& tab) {
DCHECK(CalledOnValidThread());
- if (!IsValidTab(tab))
- return;
-
int64 sync_id;
SessionID::id_type id = tab.GetSessionId();
if (tab.IsBeingDestroyed()) {
@@ -233,10 +230,15 @@ void SessionModelAssociator::ReassociateTab(const SyncedTabDelegate& tab) {
return;
}
+ if (!IsValidTab(tab))
+ return;
+
TabLinksMap::const_iterator tablink = tab_map_.find(id);
if (tablink == tab_map_.end()) {
// This is a new tab, get a sync node for it.
sync_id = tab_pool_.GetFreeTabNode();
+ if (sync_id == sync_api::kInvalidId)
+ return;
} else {
// This tab is already associated with a sync node, reuse it.
sync_id = tablink->second.sync_id();
@@ -251,10 +253,7 @@ void SessionModelAssociator::Associate(const SyncedTabDelegate* tab,
const SyncedWindowDelegate* window =
SyncedWindowDelegate::FindSyncedWindowDelegateWithId(
tab->GetWindowId());
- if (!window) { // Can happen for weird things like developer console.
- tab_pool_.FreeTabNode(sync_id);
- return;
- }
+ DCHECK(window);
TabLinks t(sync_id, tab);
tab_map_[session_id] = t;
@@ -431,7 +430,12 @@ bool SessionModelAssociator::AssociateModels(SyncError* error) {
if (current_machine_tag_.empty())
InitializeCurrentMachineTag(&trans);
synced_session_tracker_.SetLocalSessionTag(current_machine_tag_);
- UpdateAssociationsFromSyncModel(root, &trans);
+ if (!UpdateAssociationsFromSyncModel(root, &trans)) {
+ error->Reset(FROM_HERE,
+ "Failed to update associations from sync",
+ model_type());
+ return false;
+ }
if (local_session_syncid_ == sync_api::kInvalidId) {
// The sync db didn't have a header node for us, we need to create one.
@@ -513,12 +517,14 @@ bool SessionModelAssociator::UpdateAssociationsFromSyncModel(
} else if (id != local_session_syncid_) {
// This is previously stored local session information.
if (specifics.has_header()) {
- DCHECK_EQ(sync_api::kInvalidId, local_session_syncid_);
+ if (sync_api::kInvalidId != local_session_syncid_)
+ return false;
// This is our previous header node, reuse it.
local_session_syncid_ = id;
} else {
- DCHECK(specifics.has_tab());
+ if (!specifics.has_tab())
+ return false;
// This is a tab node. We want to track these to reuse them in our free
// tab node pool. They will be overwritten eventually, so need to do
@@ -531,7 +537,8 @@ bool SessionModelAssociator::UpdateAssociationsFromSyncModel(
}
// After updating from sync model all tabid's should be free.
- DCHECK(tab_pool_.full());
+ if (!tab_pool_.full())
+ return false;
return true;
}
@@ -541,7 +548,8 @@ bool SessionModelAssociator::AssociateForeignSpecifics(
const int64 modification_time) {
DCHECK(CalledOnValidThread());
std::string foreign_session_tag = specifics.session_tag();
- DCHECK(foreign_session_tag != GetCurrentMachineTag() || setup_for_test_);
+ if (foreign_session_tag == GetCurrentMachineTag() && !setup_for_test_)
+ return false;
if (specifics.has_header()) {
// Read in the header data for this foreign session.
@@ -768,15 +776,16 @@ int64 SessionModelAssociator::TabNodePool::GetFreeTabNode() {
sync_api::ReadNode root(&trans);
if (!root.InitByTagLookup(kSessionsTag)) {
LOG(ERROR) << kNoSessionsFolderError;
- return 0;
+ return sync_api::kInvalidId;
}
size_t tab_node_id = tab_syncid_pool_.size();
std::string tab_node_tag = TabIdToTag(machine_tag_, tab_node_id);
sync_api::WriteNode tab_node(&trans);
if (!tab_node.InitUniqueByCreation(syncable::SESSIONS, root,
tab_node_tag)) {
- LOG(ERROR) << "Could not create new node!";
- return -1;
+ LOG(ERROR) << "Could not create new node with tag "
+ << tab_node_tag << "!";
+ return sync_api::kInvalidId;
}
tab_node.SetTitle(UTF8ToWide(tab_node_tag));
@@ -848,7 +857,12 @@ bool SessionModelAssociator::SessionWindowHasNoTabsToSync(
bool SessionModelAssociator::IsValidTab(const SyncedTabDelegate& tab) {
DCHECK(CalledOnValidThread());
if ((tab.profile() == sync_service_->profile() ||
- sync_service_->profile() == NULL)) {
+ sync_service_->profile() == NULL)) { // For tests.
+ const SyncedWindowDelegate* window =
+ SyncedWindowDelegate::FindSyncedWindowDelegateWithId(
+ tab.GetWindowId());
+ if (!window)
+ return false;
const NavigationEntry* entry = tab.GetActiveEntry();
if (!entry)
return false;
@@ -997,7 +1011,7 @@ bool SessionModelAssociator::SyncLocalWindowToSyncModel(
for (size_t i = 0; i < window.tabs.size(); ++i) {
SessionTab* tab = window.tabs[i];
int64 id = tab_pool_.GetFreeTabNode();
- if (id == -1) {
+ if (id == sync_api::kInvalidId) {
LOG(ERROR) << "Failed to find/generate free sync node for tab.";
return false;
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698