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

Side by Side Diff: chrome/browser/sessions/session_restore_observer_unittest.cc

Issue 2935183002: [TabMetrics] Add signals that mark the start and end of session restore. (Closed)
Patch Set: Address new comments. Created 3 years, 5 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
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/sessions/session_restore_observer.h"
6
7 #include "chrome/browser/sessions/session_restore.h"
8 #include "chrome/browser/sessions/tab_loader.h"
9 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
10 #include "content/public/browser/web_contents.h"
11 #include "content/public/test/web_contents_tester.h"
12
13 using content::WebContentsTester;
14
15 namespace {
16
17 const char kDefaultUrl[] = "https://www.google.com";
18
19 } // namespace
20
21 class MockSessionRestoreObserver : public SessionRestoreObserver {
22 public:
23 MockSessionRestoreObserver() { SessionRestore::AddObserver(this); }
24
25 ~MockSessionRestoreObserver() { SessionRestore::RemoveObserver(this); }
26
27 enum class SessionRestoreEvent {
28 STARTED_LOADING_TABS,
29 FINISHED_LOADING_TABS
30 };
31
32 const std::vector<SessionRestoreEvent>& session_restore_events() const {
33 return session_restore_events_;
34 }
35
36 // SessionRestoreObserver implementation:
37 void OnSessionRestoreStartedLoadingTabs() override {
38 session_restore_events_.emplace_back(
39 SessionRestoreEvent::STARTED_LOADING_TABS);
40 }
41
42 void OnSessionRestoreFinishedLoadingTabs() override {
43 session_restore_events_.emplace_back(
44 SessionRestoreEvent::FINISHED_LOADING_TABS);
45 }
46
47 private:
48 std::vector<SessionRestoreEvent> session_restore_events_;
49
50 DISALLOW_COPY_AND_ASSIGN(MockSessionRestoreObserver);
51 };
52
53 class SessionRestoreObserverTest : public ChromeRenderViewHostTestHarness {
54 public:
55 using RestoredTab = SessionRestoreDelegate::RestoredTab;
56
57 SessionRestoreObserverTest() {}
58
59 // testing::Test:
60 void SetUp() override {
61 ChromeRenderViewHostTestHarness::SetUp();
62 restored_tabs_.emplace_back(web_contents(), false, false, false);
63 }
64
65 void TearDown() override {
66 ChromeRenderViewHostTestHarness::TearDown();
67 restored_tabs_.clear();
68 }
69
70 protected:
71 void RestoreTabs() {
72 TabLoader::RestoreTabs(restored_tabs_, base::TimeTicks());
73 }
74
75 void LoadWebContents(content::WebContents* contents) {
76 WebContentsTester::For(contents)->NavigateAndCommit(GURL(kDefaultUrl));
77 WebContentsTester::For(contents)->TestSetIsLoading(false);
78 }
79
80 const std::vector<MockSessionRestoreObserver::SessionRestoreEvent>&
81 session_restore_events() const {
82 return mock_observer_.session_restore_events();
83 }
84
85 size_t number_of_session_restore_events() const {
86 return session_restore_events().size();
87 }
88
89 private:
90 MockSessionRestoreObserver mock_observer_;
91 std::vector<RestoredTab> restored_tabs_;
92
93 DISALLOW_COPY_AND_ASSIGN(SessionRestoreObserverTest);
94 };
95
96 TEST_F(SessionRestoreObserverTest, SingleSessionRestore) {
97 RestoreTabs();
98 EXPECT_EQ(1u, number_of_session_restore_events());
sky 2017/06/27 00:11:53 You need to ASSERT when checking sizes, otherwise
ducbui 2017/06/27 00:45:03 Done.
99 EXPECT_EQ(
100 MockSessionRestoreObserver::SessionRestoreEvent::STARTED_LOADING_TABS,
101 session_restore_events()[0]);
102
103 LoadWebContents(web_contents());
104 EXPECT_EQ(2u, number_of_session_restore_events());
105 EXPECT_EQ(
106 MockSessionRestoreObserver::SessionRestoreEvent::FINISHED_LOADING_TABS,
107 session_restore_events()[1]);
108 }
109
110 TEST_F(SessionRestoreObserverTest, SequentialSessionRestore) {
111 const int number_of_session_restores = 3;
112 size_t event_index = 0;
113 for (int i = 0; i < number_of_session_restores; ++i) {
114 RestoreTabs();
115 EXPECT_EQ(event_index + 1, number_of_session_restore_events());
116 EXPECT_EQ(
117 MockSessionRestoreObserver::SessionRestoreEvent::STARTED_LOADING_TABS,
118 session_restore_events()[event_index++]);
119
120 LoadWebContents(web_contents());
121 EXPECT_EQ(event_index + 1, number_of_session_restore_events());
122 EXPECT_EQ(
123 MockSessionRestoreObserver::SessionRestoreEvent::FINISHED_LOADING_TABS,
124 session_restore_events()[event_index++]);
125 }
126 }
127
128 TEST_F(SessionRestoreObserverTest, ConcurrentSessionRestore) {
129 std::vector<RestoredTab> another_restored_tabs;
130 std::unique_ptr<content::WebContents> test_contents(
131 WebContentsTester::CreateTestWebContents(browser_context(), nullptr));
132 another_restored_tabs.emplace_back(test_contents.get(), false, false, false);
133
134 RestoreTabs();
135 TabLoader::RestoreTabs(another_restored_tabs, base::TimeTicks());
136 EXPECT_EQ(1u, number_of_session_restore_events());
137 EXPECT_EQ(
138 MockSessionRestoreObserver::SessionRestoreEvent::STARTED_LOADING_TABS,
139 session_restore_events()[0]);
140
141 LoadWebContents(web_contents());
142 LoadWebContents(test_contents.get());
143
144 EXPECT_EQ(2u, number_of_session_restore_events());
145 EXPECT_EQ(
146 MockSessionRestoreObserver::SessionRestoreEvent::FINISHED_LOADING_TABS,
147 session_restore_events()[1]);
148 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698