| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/bind_helpers.h" | 6 #include "base/bind_helpers.h" |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/memory/scoped_vector.h" | 9 #include "base/memory/scoped_vector.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 std::string b = base::Int64ToString(base::Time::Now().ToInternalValue()); | 41 std::string b = base::Int64ToString(base::Time::Now().ToInternalValue()); |
| 42 | 42 |
| 43 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 43 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 44 path_ = temp_dir_.path().Append(FILE_PATH_LITERAL("SessionTestDirs")); | 44 path_ = temp_dir_.path().Append(FILE_PATH_LITERAL("SessionTestDirs")); |
| 45 ASSERT_TRUE(file_util::CreateDirectory(path_)); | 45 ASSERT_TRUE(file_util::CreateDirectory(path_)); |
| 46 path_ = path_.AppendASCII(b); | 46 path_ = path_.AppendASCII(b); |
| 47 | 47 |
| 48 SessionService* session_service = new SessionService(path_); | 48 SessionService* session_service = new SessionService(path_); |
| 49 helper_.set_service(session_service); | 49 helper_.set_service(session_service); |
| 50 | 50 |
| 51 service()->SetWindowType(window_id, Browser::TYPE_TABBED); | 51 service()->SetWindowType( |
| 52 window_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); |
| 52 service()->SetWindowBounds(window_id, | 53 service()->SetWindowBounds(window_id, |
| 53 window_bounds, | 54 window_bounds, |
| 54 ui::SHOW_STATE_NORMAL); | 55 ui::SHOW_STATE_NORMAL); |
| 55 } | 56 } |
| 56 | 57 |
| 57 // Upon notification, increment the sync_save_count variable | 58 // Upon notification, increment the sync_save_count variable |
| 58 void Observe(int type, | 59 void Observe(int type, |
| 59 const content::NotificationSource& source, | 60 const content::NotificationSource& source, |
| 60 const content::NotificationDetails& details) { | 61 const content::NotificationDetails& details) { |
| 61 ASSERT_EQ(type, chrome::NOTIFICATION_SESSION_SERVICE_SAVED); | 62 ASSERT_EQ(type, chrome::NOTIFICATION_SESSION_SERVICE_SAVED); |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 ASCIIToUTF16("abc"), "def", | 269 ASCIIToUTF16("abc"), "def", |
| 269 content::PAGE_TRANSITION_QUALIFIER_MASK); | 270 content::PAGE_TRANSITION_QUALIFIER_MASK); |
| 270 TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), | 271 TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), |
| 271 ASCIIToUTF16("abcd"), "defg", | 272 ASCIIToUTF16("abcd"), "defg", |
| 272 content::PAGE_TRANSITION_AUTO_BOOKMARK); | 273 content::PAGE_TRANSITION_AUTO_BOOKMARK); |
| 273 | 274 |
| 274 helper_.PrepareTabInWindow(window_id, tab1_id, 0, true); | 275 helper_.PrepareTabInWindow(window_id, tab1_id, 0, true); |
| 275 UpdateNavigation(window_id, tab1_id, nav1, 0, true); | 276 UpdateNavigation(window_id, tab1_id, nav1, 0, true); |
| 276 | 277 |
| 277 const gfx::Rect window2_bounds(3, 4, 5, 6); | 278 const gfx::Rect window2_bounds(3, 4, 5, 6); |
| 278 service()->SetWindowType(window2_id, Browser::TYPE_TABBED); | 279 service()->SetWindowType( |
| 280 window2_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); |
| 279 service()->SetWindowBounds(window2_id, | 281 service()->SetWindowBounds(window2_id, |
| 280 window2_bounds, | 282 window2_bounds, |
| 281 ui::SHOW_STATE_MAXIMIZED); | 283 ui::SHOW_STATE_MAXIMIZED); |
| 282 helper_.PrepareTabInWindow(window2_id, tab2_id, 0, true); | 284 helper_.PrepareTabInWindow(window2_id, tab2_id, 0, true); |
| 283 UpdateNavigation(window2_id, tab2_id, nav2, 0, true); | 285 UpdateNavigation(window2_id, tab2_id, nav2, 0, true); |
| 284 | 286 |
| 285 ScopedVector<SessionWindow> windows; | 287 ScopedVector<SessionWindow> windows; |
| 286 ReadWindows(&(windows.get())); | 288 ReadWindows(&(windows.get())); |
| 287 | 289 |
| 288 ASSERT_EQ(2U, windows->size()); | 290 ASSERT_EQ(2U, windows->size()); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 SessionID tab2_id; | 324 SessionID tab2_id; |
| 323 | 325 |
| 324 TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), | 326 TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), |
| 325 ASCIIToUTF16("abc"), "def", | 327 ASCIIToUTF16("abc"), "def", |
| 326 content::PAGE_TRANSITION_QUALIFIER_MASK); | 328 content::PAGE_TRANSITION_QUALIFIER_MASK); |
| 327 | 329 |
| 328 helper_.PrepareTabInWindow(window_id, tab1_id, 0, true); | 330 helper_.PrepareTabInWindow(window_id, tab1_id, 0, true); |
| 329 UpdateNavigation(window_id, tab1_id, nav1, 0, true); | 331 UpdateNavigation(window_id, tab1_id, nav1, 0, true); |
| 330 | 332 |
| 331 const gfx::Rect window2_bounds(3, 4, 5, 6); | 333 const gfx::Rect window2_bounds(3, 4, 5, 6); |
| 332 service()->SetWindowType(window2_id, Browser::TYPE_TABBED); | 334 service()->SetWindowType( |
| 335 window2_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); |
| 333 service()->SetWindowBounds(window2_id, | 336 service()->SetWindowBounds(window2_id, |
| 334 window2_bounds, | 337 window2_bounds, |
| 335 ui::SHOW_STATE_NORMAL); | 338 ui::SHOW_STATE_NORMAL); |
| 336 helper_.PrepareTabInWindow(window2_id, tab2_id, 0, true); | 339 helper_.PrepareTabInWindow(window2_id, tab2_id, 0, true); |
| 337 | 340 |
| 338 ScopedVector<SessionWindow> windows; | 341 ScopedVector<SessionWindow> windows; |
| 339 ReadWindows(&(windows.get())); | 342 ReadWindows(&(windows.get())); |
| 340 | 343 |
| 341 ASSERT_EQ(1U, windows->size()); | 344 ASSERT_EQ(1U, windows->size()); |
| 342 ASSERT_EQ(0, windows[0]->selected_tab_index); | 345 ASSERT_EQ(0, windows[0]->selected_tab_index); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 helper_.AssertTabEquals(window_id, tab2_id, 1, 0, 1, *tab); | 387 helper_.AssertTabEquals(window_id, tab2_id, 1, 0, 1, *tab); |
| 385 helper_.AssertNavigationEquals(nav2, tab->navigations[0]); | 388 helper_.AssertNavigationEquals(nav2, tab->navigations[0]); |
| 386 } | 389 } |
| 387 | 390 |
| 388 TEST_F(SessionServiceTest, WindowCloseCommittedAfterNavigate) { | 391 TEST_F(SessionServiceTest, WindowCloseCommittedAfterNavigate) { |
| 389 SessionID window2_id; | 392 SessionID window2_id; |
| 390 SessionID tab_id; | 393 SessionID tab_id; |
| 391 SessionID tab2_id; | 394 SessionID tab2_id; |
| 392 ASSERT_NE(window2_id.id(), window_id.id()); | 395 ASSERT_NE(window2_id.id(), window_id.id()); |
| 393 | 396 |
| 394 service()->SetWindowType(window2_id, Browser::TYPE_TABBED); | 397 service()->SetWindowType( |
| 398 window2_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); |
| 395 service()->SetWindowBounds(window2_id, | 399 service()->SetWindowBounds(window2_id, |
| 396 window_bounds, | 400 window_bounds, |
| 397 ui::SHOW_STATE_NORMAL); | 401 ui::SHOW_STATE_NORMAL); |
| 398 | 402 |
| 399 TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), | 403 TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), |
| 400 ASCIIToUTF16("abc"), "def", | 404 ASCIIToUTF16("abc"), "def", |
| 401 content::PAGE_TRANSITION_QUALIFIER_MASK); | 405 content::PAGE_TRANSITION_QUALIFIER_MASK); |
| 402 TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), | 406 TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), |
| 403 ASCIIToUTF16("abcd"), "defg", | 407 ASCIIToUTF16("abcd"), "defg", |
| 404 content::PAGE_TRANSITION_AUTO_BOOKMARK); | 408 content::PAGE_TRANSITION_AUTO_BOOKMARK); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 429 // Makes sure we don't track popups. | 433 // Makes sure we don't track popups. |
| 430 TEST_F(SessionServiceTest, IgnorePopups) { | 434 TEST_F(SessionServiceTest, IgnorePopups) { |
| 431 if (browser_defaults::kRestorePopups) | 435 if (browser_defaults::kRestorePopups) |
| 432 return; // This test is only applicable if popups aren't restored. | 436 return; // This test is only applicable if popups aren't restored. |
| 433 | 437 |
| 434 SessionID window2_id; | 438 SessionID window2_id; |
| 435 SessionID tab_id; | 439 SessionID tab_id; |
| 436 SessionID tab2_id; | 440 SessionID tab2_id; |
| 437 ASSERT_NE(window2_id.id(), window_id.id()); | 441 ASSERT_NE(window2_id.id(), window_id.id()); |
| 438 | 442 |
| 439 service()->SetWindowType(window2_id, Browser::TYPE_POPUP); | 443 service()->SetWindowType( |
| 444 window2_id, Browser::TYPE_POPUP, SessionService::TYPE_NORMAL); |
| 440 service()->SetWindowBounds(window2_id, | 445 service()->SetWindowBounds(window2_id, |
| 441 window_bounds, | 446 window_bounds, |
| 442 ui::SHOW_STATE_NORMAL); | 447 ui::SHOW_STATE_NORMAL); |
| 443 | 448 |
| 444 TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), | 449 TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), |
| 445 ASCIIToUTF16("abc"), "def", | 450 ASCIIToUTF16("abc"), "def", |
| 446 content::PAGE_TRANSITION_QUALIFIER_MASK); | 451 content::PAGE_TRANSITION_QUALIFIER_MASK); |
| 447 TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), | 452 TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), |
| 448 ASCIIToUTF16("abcd"), "defg", | 453 ASCIIToUTF16("abcd"), "defg", |
| 449 content::PAGE_TRANSITION_AUTO_BOOKMARK); | 454 content::PAGE_TRANSITION_AUTO_BOOKMARK); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 470 // Makes sure we track popups. | 475 // Makes sure we track popups. |
| 471 TEST_F(SessionServiceTest, RestorePopup) { | 476 TEST_F(SessionServiceTest, RestorePopup) { |
| 472 if (!browser_defaults::kRestorePopups) | 477 if (!browser_defaults::kRestorePopups) |
| 473 return; // This test is only applicable if popups are restored. | 478 return; // This test is only applicable if popups are restored. |
| 474 | 479 |
| 475 SessionID window2_id; | 480 SessionID window2_id; |
| 476 SessionID tab_id; | 481 SessionID tab_id; |
| 477 SessionID tab2_id; | 482 SessionID tab2_id; |
| 478 ASSERT_NE(window2_id.id(), window_id.id()); | 483 ASSERT_NE(window2_id.id(), window_id.id()); |
| 479 | 484 |
| 480 service()->SetWindowType(window2_id, Browser::TYPE_POPUP); | 485 service()->SetWindowType( |
| 486 window2_id, Browser::TYPE_POPUP, SessionService::TYPE_NORMAL); |
| 481 service()->SetWindowBounds(window2_id, | 487 service()->SetWindowBounds(window2_id, |
| 482 window_bounds, | 488 window_bounds, |
| 483 ui::SHOW_STATE_NORMAL); | 489 ui::SHOW_STATE_NORMAL); |
| 484 | 490 |
| 485 TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), | 491 TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), |
| 486 ASCIIToUTF16("abc"), "def", | 492 ASCIIToUTF16("abc"), "def", |
| 487 content::PAGE_TRANSITION_QUALIFIER_MASK); | 493 content::PAGE_TRANSITION_QUALIFIER_MASK); |
| 488 TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), | 494 TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), |
| 489 ASCIIToUTF16("abcd"), "defg", | 495 ASCIIToUTF16("abcd"), "defg", |
| 490 content::PAGE_TRANSITION_AUTO_BOOKMARK); | 496 content::PAGE_TRANSITION_AUTO_BOOKMARK); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 512 | 518 |
| 513 ASSERT_EQ(0, windows[popup_index]->selected_tab_index); | 519 ASSERT_EQ(0, windows[popup_index]->selected_tab_index); |
| 514 ASSERT_EQ(window2_id.id(), windows[popup_index]->window_id.id()); | 520 ASSERT_EQ(window2_id.id(), windows[popup_index]->window_id.id()); |
| 515 ASSERT_EQ(1U, windows[popup_index]->tabs.size()); | 521 ASSERT_EQ(1U, windows[popup_index]->tabs.size()); |
| 516 | 522 |
| 517 tab = windows[popup_index]->tabs[0]; | 523 tab = windows[popup_index]->tabs[0]; |
| 518 helper_.AssertTabEquals(window2_id, tab2_id, 0, 0, 1, *tab); | 524 helper_.AssertTabEquals(window2_id, tab2_id, 0, 0, 1, *tab); |
| 519 helper_.AssertNavigationEquals(nav2, tab->navigations[0]); | 525 helper_.AssertNavigationEquals(nav2, tab->navigations[0]); |
| 520 } | 526 } |
| 521 | 527 |
| 528 #if defined (USE_AURA) |
| 529 // Makes sure we track apps. Only applicable on aura. |
| 530 TEST_F(SessionServiceTest, RestoreApp) { |
| 531 SessionID window2_id; |
| 532 SessionID tab_id; |
| 533 SessionID tab2_id; |
| 534 ASSERT_NE(window2_id.id(), window_id.id()); |
| 535 |
| 536 service()->SetWindowType( |
| 537 window2_id, Browser::TYPE_POPUP, SessionService::TYPE_APP); |
| 538 service()->SetWindowBounds(window2_id, |
| 539 window_bounds, |
| 540 ui::SHOW_STATE_NORMAL); |
| 541 service()->SetWindowAppName(window2_id, "TestApp"); |
| 542 |
| 543 TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), |
| 544 ASCIIToUTF16("abc"), "def", |
| 545 content::PAGE_TRANSITION_QUALIFIER_MASK); |
| 546 TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), |
| 547 ASCIIToUTF16("abcd"), "defg", |
| 548 content::PAGE_TRANSITION_AUTO_BOOKMARK); |
| 549 |
| 550 helper_.PrepareTabInWindow(window_id, tab_id, 0, true); |
| 551 UpdateNavigation(window_id, tab_id, nav1, 0, true); |
| 552 |
| 553 helper_.PrepareTabInWindow(window2_id, tab2_id, 0, false); |
| 554 UpdateNavigation(window2_id, tab2_id, nav2, 0, true); |
| 555 |
| 556 ScopedVector<SessionWindow> windows; |
| 557 ReadWindows(&(windows.get())); |
| 558 |
| 559 ASSERT_EQ(2U, windows->size()); |
| 560 int tabbed_index = windows[0]->type == Browser::TYPE_TABBED ? |
| 561 0 : 1; |
| 562 int app_index = tabbed_index == 0 ? 1 : 0; |
| 563 ASSERT_EQ(0, windows[tabbed_index]->selected_tab_index); |
| 564 ASSERT_EQ(window_id.id(), windows[tabbed_index]->window_id.id()); |
| 565 ASSERT_EQ(1U, windows[tabbed_index]->tabs.size()); |
| 566 |
| 567 SessionTab* tab = windows[tabbed_index]->tabs[0]; |
| 568 helper_.AssertTabEquals(window_id, tab_id, 0, 0, 1, *tab); |
| 569 helper_.AssertNavigationEquals(nav1, tab->navigations[0]); |
| 570 |
| 571 ASSERT_EQ(0, windows[app_index]->selected_tab_index); |
| 572 ASSERT_EQ(window2_id.id(), windows[app_index]->window_id.id()); |
| 573 ASSERT_EQ(1U, windows[app_index]->tabs.size()); |
| 574 ASSERT_EQ(1U, windows[app_index]->type == Browser::TYPE_POPUP); |
| 575 ASSERT_EQ("TestApp", windows[app_index]->app_name); |
| 576 |
| 577 tab = windows[app_index]->tabs[0]; |
| 578 helper_.AssertTabEquals(window2_id, tab2_id, 0, 0, 1, *tab); |
| 579 helper_.AssertNavigationEquals(nav2, tab->navigations[0]); |
| 580 } |
| 581 #endif |
| 582 |
| 522 // Tests pruning from the front. | 583 // Tests pruning from the front. |
| 523 TEST_F(SessionServiceTest, PruneFromFront) { | 584 TEST_F(SessionServiceTest, PruneFromFront) { |
| 524 const std::string base_url("http://google.com/"); | 585 const std::string base_url("http://google.com/"); |
| 525 SessionID tab_id; | 586 SessionID tab_id; |
| 526 | 587 |
| 527 helper_.PrepareTabInWindow(window_id, tab_id, 0, true); | 588 helper_.PrepareTabInWindow(window_id, tab_id, 0, true); |
| 528 | 589 |
| 529 // Add 5 navigations, with the 4th selected. | 590 // Add 5 navigations, with the 4th selected. |
| 530 for (int i = 0; i < 5; ++i) { | 591 for (int i = 0; i < 5; ++i) { |
| 531 TabNavigation nav(0, GURL(base_url + base::IntToString(i)), | 592 TabNavigation nav(0, GURL(base_url + base::IntToString(i)), |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 736 | 797 |
| 737 ScopedVector<SessionWindow> windows; | 798 ScopedVector<SessionWindow> windows; |
| 738 ReadWindows(&(windows.get())); | 799 ReadWindows(&(windows.get())); |
| 739 | 800 |
| 740 helper_.AssertSingleWindowWithSingleTab(windows.get(), 2); | 801 helper_.AssertSingleWindowWithSingleTab(windows.get(), 2); |
| 741 | 802 |
| 742 // Expected: the content state of both navigations was saved and restored. | 803 // Expected: the content state of both navigations was saved and restored. |
| 743 helper_.AssertNavigationEquals(nav1, windows[0]->tabs[0]->navigations[0]); | 804 helper_.AssertNavigationEquals(nav1, windows[0]->tabs[0]->navigations[0]); |
| 744 helper_.AssertNavigationEquals(nav2, windows[0]->tabs[0]->navigations[1]); | 805 helper_.AssertNavigationEquals(nav2, windows[0]->tabs[0]->navigations[1]); |
| 745 } | 806 } |
| OLD | NEW |