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

Side by Side Diff: chrome/browser/sync/profile_sync_service_session_unittest.cc

Issue 3825005: Fix syncing of sessions. Numerous changes have been made. Currently, the mode... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Rebased again Created 10 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <map> 5 #include <map>
6 #include <string> 6 #include <string>
7 7
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/scoped_ptr.h" 9 #include "base/scoped_ptr.h"
10 #include "base/scoped_temp_dir.h" 10 #include "base/scoped_temp_dir.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 using browser_sync::TestIdFactory; 49 using browser_sync::TestIdFactory;
50 50
51 namespace browser_sync { 51 namespace browser_sync {
52 52
53 class ProfileSyncServiceSessionTest 53 class ProfileSyncServiceSessionTest
54 : public BrowserWithTestWindowTest, 54 : public BrowserWithTestWindowTest,
55 public NotificationObserver { 55 public NotificationObserver {
56 public: 56 public:
57 ProfileSyncServiceSessionTest() 57 ProfileSyncServiceSessionTest()
58 : window_bounds_(0, 1, 2, 3), 58 : window_bounds_(0, 1, 2, 3),
59 notified_of_update_(false), 59 notified_of_update_(false) {}
60 notification_sync_id_(0) {}
61 60
62 ProfileSyncService* sync_service() { return sync_service_.get(); } 61 ProfileSyncService* sync_service() { return sync_service_.get(); }
63 62
64 TestIdFactory* ids() { return &ids_; } 63 TestIdFactory* ids() { return &ids_; }
65 64
66 protected: 65 protected:
67 SessionService* service() { return helper_.service(); } 66 SessionService* service() { return helper_.service(); }
68 67
69 virtual void SetUp() { 68 virtual void SetUp() {
70 BrowserWithTestWindowTest::SetUp(); 69 BrowserWithTestWindowTest::SetUp();
71 profile()->set_has_history_service(true); 70 profile()->set_has_history_service(true);
72 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 71 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
73 SessionService* session_service = new SessionService(temp_dir_.path()); 72 SessionService* session_service = new SessionService(temp_dir_.path());
74 helper_.set_service(session_service); 73 helper_.set_service(session_service);
75 service()->SetWindowType(window_id_, Browser::TYPE_NORMAL); 74 service()->SetWindowType(window_id_, Browser::TYPE_NORMAL);
76 service()->SetWindowBounds(window_id_, window_bounds_, false); 75 service()->SetWindowBounds(window_id_, window_bounds_, false);
77 registrar_.Add(this, NotificationType::FOREIGN_SESSION_UPDATED, 76 registrar_.Add(this, NotificationType::FOREIGN_SESSION_UPDATED,
78 NotificationService::AllSources()); 77 NotificationService::AllSources());
79 registrar_.Add(this, NotificationType::FOREIGN_SESSION_DELETED,
80 NotificationService::AllSources());
81 } 78 }
82 79
83 void Observe(NotificationType type, 80 void Observe(NotificationType type,
84 const NotificationSource& source, 81 const NotificationSource& source,
85 const NotificationDetails& details) { 82 const NotificationDetails& details) {
86 switch (type.value) { 83 switch (type.value) {
87 case NotificationType::FOREIGN_SESSION_UPDATED: { 84 case NotificationType::FOREIGN_SESSION_UPDATED:
88 notified_of_update_ = true; 85 notified_of_update_ = true;
89 notification_sync_id_ = *Details<int64>(details).ptr();
90 break; 86 break;
91 }
92 case NotificationType::FOREIGN_SESSION_DELETED: {
93 notified_of_update_ = true;
94 notification_sync_id_ = -1;
95 break;
96 }
97 default: 87 default:
98 NOTREACHED(); 88 NOTREACHED();
99 break; 89 break;
100 } 90 }
101 } 91 }
102 92
103 virtual void TearDown() { 93 virtual void TearDown() {
104 helper_.set_service(NULL); 94 helper_.set_service(NULL);
105 profile()->set_session_service(NULL); 95 profile()->set_session_service(NULL);
106 sync_service_.reset(); 96 sync_service_.reset();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 ScopedTempDir temp_dir_; 130 ScopedTempDir temp_dir_;
141 SessionServiceTestHelper helper_; 131 SessionServiceTestHelper helper_;
142 SessionModelAssociator* model_associator_; 132 SessionModelAssociator* model_associator_;
143 SessionChangeProcessor* change_processor_; 133 SessionChangeProcessor* change_processor_;
144 SessionID window_id_; 134 SessionID window_id_;
145 ProfileSyncFactoryMock factory_; 135 ProfileSyncFactoryMock factory_;
146 scoped_ptr<TestProfileSyncService> sync_service_; 136 scoped_ptr<TestProfileSyncService> sync_service_;
147 TestIdFactory ids_; 137 TestIdFactory ids_;
148 const gfx::Rect window_bounds_; 138 const gfx::Rect window_bounds_;
149 bool notified_of_update_; 139 bool notified_of_update_;
150 int64 notification_sync_id_;
151 NotificationRegistrar registrar_; 140 NotificationRegistrar registrar_;
152 }; 141 };
153 142
154 class CreateRootTask : public Task { 143 class CreateRootTask : public Task {
155 public: 144 public:
156 explicit CreateRootTask(ProfileSyncServiceSessionTest* test) 145 explicit CreateRootTask(ProfileSyncServiceSessionTest* test)
157 : test_(test), success_(false) { 146 : test_(test), success_(false) {
158 } 147 }
159 148
160 virtual ~CreateRootTask() {} 149 virtual ~CreateRootTask() {}
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 int64 sync_id; 218 int64 sync_id;
230 ASSERT_TRUE(model_associator_->GetSyncIdForTaggedNode(&machine_tag, 219 ASSERT_TRUE(model_associator_->GetSyncIdForTaggedNode(&machine_tag,
231 &sync_id)); 220 &sync_id));
232 ASSERT_EQ(model_associator_->GetSyncIdFromChromeId(machine_tag), sync_id); 221 ASSERT_EQ(model_associator_->GetSyncIdFromChromeId(machine_tag), sync_id);
233 scoped_ptr<const sync_pb::SessionSpecifics> sync_specifics( 222 scoped_ptr<const sync_pb::SessionSpecifics> sync_specifics(
234 model_associator_->GetChromeNodeFromSyncId(sync_id)); 223 model_associator_->GetChromeNodeFromSyncId(sync_id));
235 ASSERT_TRUE(sync_specifics != NULL); 224 ASSERT_TRUE(sync_specifics != NULL);
236 225
237 // Check that this machine's data is not included in the foreign windows. 226 // Check that this machine's data is not included in the foreign windows.
238 ScopedVector<ForeignSession> foreign_sessions; 227 ScopedVector<ForeignSession> foreign_sessions;
239 model_associator_->GetSessionDataFromSyncModel(&foreign_sessions.get()); 228 model_associator_->GetSessionData(&foreign_sessions.get());
240 ASSERT_EQ(foreign_sessions.size(), 0U); 229 ASSERT_EQ(foreign_sessions.size(), 0U);
241 230
242 // Get the windows for this machine from the node and check that they were 231 // Get the windows for this machine from the node and check that they were
243 // filled. 232 // filled.
244 sync_api::ReadTransaction trans(sync_service_-> 233 sync_api::ReadTransaction trans(sync_service_->
245 backend()->GetUserShareHandle()); 234 backend()->GetUserShareHandle());
246 sync_api::ReadNode node(&trans); 235 sync_api::ReadNode node(&trans);
247 ASSERT_TRUE(node.InitByClientTagLookup(syncable::SESSIONS, 236 ASSERT_TRUE(node.InitByClientTagLookup(syncable::SESSIONS,
248 machine_tag)); 237 machine_tag));
249 model_associator_->AppendForeignSessionWithID(sync_id, 238 model_associator_->AppendForeignSessionWithID(sync_id,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 navigation->set_title("title"); 291 navigation->set_title("title");
303 navigation->set_page_transition(sync_pb::TabNavigation_PageTransition_TYPED); 292 navigation->set_page_transition(sync_pb::TabNavigation_PageTransition_TYPED);
304 293
305 // Update the server with the session specifics. 294 // Update the server with the session specifics.
306 { 295 {
307 sync_api::WriteTransaction trans(sync_service_-> 296 sync_api::WriteTransaction trans(sync_service_->
308 backend()->GetUserShareHandle()); 297 backend()->GetUserShareHandle());
309 sync_api::ReadNode root(&trans); 298 sync_api::ReadNode root(&trans);
310 ASSERT_TRUE(root.InitByTagLookup(kSessionsTag)); 299 ASSERT_TRUE(root.InitByTagLookup(kSessionsTag));
311 model_associator_->UpdateSyncModel(&specifics, &trans, &root); 300 model_associator_->UpdateSyncModel(&specifics, &trans, &root);
301 model_associator_->UpdateFromSyncModel(&trans);
312 } 302 }
313 303
314 // Check that the foreign session was written to a node and retrieve the data. 304 // Check that the foreign session was written to a node and retrieve the data.
315 int64 sync_id; 305 int64 sync_id;
316 ASSERT_TRUE(model_associator_->GetSyncIdForTaggedNode(&machine_tag, 306 ASSERT_TRUE(model_associator_->GetSyncIdForTaggedNode(&machine_tag,
317 &sync_id)); 307 &sync_id));
318 ASSERT_EQ(model_associator_->GetSyncIdFromChromeId(machine_tag), sync_id); 308 ASSERT_EQ(model_associator_->GetSyncIdFromChromeId(machine_tag), sync_id);
319 scoped_ptr<const sync_pb::SessionSpecifics> sync_specifics( 309 scoped_ptr<const sync_pb::SessionSpecifics> sync_specifics(
320 model_associator_->GetChromeNodeFromSyncId(sync_id)); 310 model_associator_->GetChromeNodeFromSyncId(sync_id));
321 ASSERT_TRUE(sync_specifics != NULL); 311 ASSERT_TRUE(sync_specifics != NULL);
322 ScopedVector<ForeignSession> foreign_sessions; 312 ScopedVector<ForeignSession> foreign_sessions;
323 model_associator_->GetSessionDataFromSyncModel(&foreign_sessions.get()); 313 model_associator_->GetSessionData(&foreign_sessions.get());
324 ASSERT_EQ(foreign_sessions.size(), 1U); 314 ASSERT_EQ(1U, foreign_sessions.size());
325 ASSERT_EQ(1U, foreign_sessions[0]->windows.size()); 315 ASSERT_EQ(1U, foreign_sessions[0]->windows.size());
326 ASSERT_EQ(1U, foreign_sessions[0]->windows[0]->tabs.size()); 316 ASSERT_EQ(1U, foreign_sessions[0]->windows[0]->tabs.size());
327 ASSERT_EQ(1U, foreign_sessions[0]->windows[0]->tabs[0]->navigations.size()); 317 ASSERT_EQ(1U, foreign_sessions[0]->windows[0]->tabs[0]->navigations.size());
328 ASSERT_EQ(foreign_sessions[0]->foreign_tession_tag, machine_tag); 318 ASSERT_EQ(foreign_sessions[0]->foreign_tession_tag, machine_tag);
329 ASSERT_EQ(1, foreign_sessions[0]->windows[0]->selected_tab_index); 319 ASSERT_EQ(1, foreign_sessions[0]->windows[0]->selected_tab_index);
330 ASSERT_EQ(1, foreign_sessions[0]->windows[0]->type); 320 ASSERT_EQ(1, foreign_sessions[0]->windows[0]->type);
331 ASSERT_EQ(13, foreign_sessions[0]->windows[0]->tabs[0]->tab_visual_index); 321 ASSERT_EQ(13, foreign_sessions[0]->windows[0]->tabs[0]->tab_visual_index);
332 ASSERT_EQ(3, 322 ASSERT_EQ(3,
333 foreign_sessions[0]->windows[0]->tabs[0]->current_navigation_index); 323 foreign_sessions[0]->windows[0]->tabs[0]->current_navigation_index);
334 ASSERT_TRUE(foreign_sessions[0]->windows[0]->tabs[0]->pinned); 324 ASSERT_TRUE(foreign_sessions[0]->windows[0]->tabs[0]->pinned);
(...skipping 22 matching lines...) Expand all
357 // Test the DataTypeController on update. 347 // Test the DataTypeController on update.
358 TEST_F(ProfileSyncServiceSessionTest, UpdatedSyncNodeActionUpdate) { 348 TEST_F(ProfileSyncServiceSessionTest, UpdatedSyncNodeActionUpdate) {
359 CreateRootTask task(this); 349 CreateRootTask task(this);
360 ASSERT_TRUE(StartSyncService(&task, false)); 350 ASSERT_TRUE(StartSyncService(&task, false));
361 ASSERT_TRUE(task.success()); 351 ASSERT_TRUE(task.success());
362 int64 node_id = model_associator_->GetSyncIdFromChromeId( 352 int64 node_id = model_associator_->GetSyncIdFromChromeId(
363 model_associator_->GetCurrentMachineTag()); 353 model_associator_->GetCurrentMachineTag());
364 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord); 354 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord);
365 record->action = SyncManager::ChangeRecord::ACTION_UPDATE; 355 record->action = SyncManager::ChangeRecord::ACTION_UPDATE;
366 record->id = node_id; 356 record->id = node_id;
367 ASSERT_EQ(notification_sync_id_, 0);
368 ASSERT_FALSE(notified_of_update_); 357 ASSERT_FALSE(notified_of_update_);
369 { 358 {
370 sync_api::WriteTransaction trans(backend()->GetUserShareHandle()); 359 sync_api::WriteTransaction trans(backend()->GetUserShareHandle());
371 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1); 360 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1);
372 } 361 }
373 ASSERT_EQ(notification_sync_id_, node_id);
374 ASSERT_TRUE(notified_of_update_); 362 ASSERT_TRUE(notified_of_update_);
375 } 363 }
376 364
377 // Test the DataTypeController on add. 365 // Test the DataTypeController on add.
378 TEST_F(ProfileSyncServiceSessionTest, UpdatedSyncNodeActionAdd) { 366 TEST_F(ProfileSyncServiceSessionTest, UpdatedSyncNodeActionAdd) {
379 CreateRootTask task(this); 367 CreateRootTask task(this);
380 ASSERT_TRUE(StartSyncService(&task, false)); 368 ASSERT_TRUE(StartSyncService(&task, false));
381 ASSERT_TRUE(task.success()); 369 ASSERT_TRUE(task.success());
382 370
383 int64 node_id = model_associator_->GetSyncIdFromChromeId( 371 int64 node_id = model_associator_->GetSyncIdFromChromeId(
384 model_associator_->GetCurrentMachineTag()); 372 model_associator_->GetCurrentMachineTag());
385 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord); 373 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord);
386 record->action = SyncManager::ChangeRecord::ACTION_ADD; 374 record->action = SyncManager::ChangeRecord::ACTION_ADD;
387 record->id = node_id; 375 record->id = node_id;
388 ASSERT_EQ(notification_sync_id_, 0);
389 ASSERT_FALSE(notified_of_update_); 376 ASSERT_FALSE(notified_of_update_);
390 { 377 {
391 sync_api::WriteTransaction trans(backend()->GetUserShareHandle()); 378 sync_api::WriteTransaction trans(backend()->GetUserShareHandle());
392 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1); 379 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1);
393 } 380 }
394 ASSERT_EQ(notification_sync_id_, node_id);
395 ASSERT_TRUE(notified_of_update_); 381 ASSERT_TRUE(notified_of_update_);
396 } 382 }
397 383
398 // Test the DataTypeController on delete. 384 // Test the DataTypeController on delete.
399 TEST_F(ProfileSyncServiceSessionTest, UpdatedSyncNodeActionDelete) { 385 TEST_F(ProfileSyncServiceSessionTest, UpdatedSyncNodeActionDelete) {
400 CreateRootTask task(this); 386 CreateRootTask task(this);
401 ASSERT_TRUE(StartSyncService(&task, false)); 387 ASSERT_TRUE(StartSyncService(&task, false));
402 ASSERT_TRUE(task.success()); 388 ASSERT_TRUE(task.success());
403 389
404 int64 node_id = model_associator_->GetSyncIdFromChromeId( 390 int64 node_id = model_associator_->GetSyncIdFromChromeId(
405 model_associator_->GetCurrentMachineTag()); 391 model_associator_->GetCurrentMachineTag());
406 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord); 392 scoped_ptr<SyncManager::ChangeRecord> record(new SyncManager::ChangeRecord);
407 record->action = SyncManager::ChangeRecord::ACTION_DELETE; 393 record->action = SyncManager::ChangeRecord::ACTION_DELETE;
408 record->id = node_id; 394 record->id = node_id;
409 ASSERT_EQ(notification_sync_id_, 0);
410 ASSERT_FALSE(notified_of_update_); 395 ASSERT_FALSE(notified_of_update_);
411 { 396 {
412 sync_api::WriteTransaction trans(backend()->GetUserShareHandle()); 397 sync_api::WriteTransaction trans(backend()->GetUserShareHandle());
413 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1); 398 change_processor_->ApplyChangesFromSyncModel(&trans, record.get(), 1);
414 } 399 }
415 ASSERT_EQ(notification_sync_id_, -1);
416 ASSERT_TRUE(notified_of_update_); 400 ASSERT_TRUE(notified_of_update_);
417 } 401 }
418 402
419 } // namespace browser_sync 403 } // namespace browser_sync
420 404
OLDNEW
« no previous file with comments | « chrome/browser/sync/glue/session_model_associator.cc ('k') | chrome/browser/sync/sync_setup_flow.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698