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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_SYNC_TEST_INTEGRATION_SESSIONS_HELPER_H_ 6 #define CHROME_BROWSER_SYNC_TEST_INTEGRATION_SESSIONS_HELPER_H_ 7 8 #include <algorithm> 9 #include <vector> 10 11 #include "base/compiler_specific.h" 12 #include "chrome/browser/sessions/session_types.h" 13 #include "chrome/browser/sync/glue/synced_session.h" 14 #include "chrome/browser/sync/test/integration/sync_test.h" 15 #include "sync/syncable/nigori_util.h" 16 17 class GURL; 18 19 namespace sessions_helper { 20 21 typedef std::vector<const browser_sync::SyncedSession*> SyncedSessionVector; 22 typedef browser_sync::SyncedSession::SyncedWindowMap SessionWindowMap; 23 24 // Wrapper around a SyncedWindowMap that will automatically delete the 25 // SessionWindow pointers it holds. 26 class ScopedWindowMap { 27 public: 28 ScopedWindowMap(); 29 explicit ScopedWindowMap(SessionWindowMap* windows); 30 ~ScopedWindowMap(); 31 32 const SessionWindowMap* Get() const; 33 SessionWindowMap* GetMutable(); 34 void Reset(SessionWindowMap* windows); 35 private: 36 SessionWindowMap windows_; 37 }; 38 39 // Copies the local session windows of profile |index| to |local_windows|. 40 // Returns true if successful. 41 bool GetLocalWindows(int index, SessionWindowMap* local_windows); 42 43 // Creates and verifies the creation of a new window for profile |index| with 44 // one tab displaying |url|. Copies the SessionWindow associated with the new 45 // window to |local_windows|. Returns true if successful. 46 bool OpenTabAndGetLocalWindows(int index, 47 const GURL& url, 48 SessionWindowMap* local_windows); 49 50 // Checks that window count and foreign session count are 0. 51 bool CheckInitialState(int index); 52 53 // Returns number of open windows for a profile. 54 int GetNumWindows(int index); 55 56 // Returns number of foreign sessions for a profile. 57 int GetNumForeignSessions(int index); 58 59 // Fills the sessions vector with the model associator's foreign session data. 60 // Caller owns |sessions|, but not SyncedSessions objects within. 61 // Returns true if foreign sessions were found, false otherwise. 62 bool GetSessionData(int index, SyncedSessionVector* sessions); 63 64 // Compares a foreign session based on the first session window. 65 // Returns true based on the comparison of the session windows. 66 bool CompareSyncedSessions(const browser_sync::SyncedSession* lhs, 67 const browser_sync::SyncedSession* rhs); 68 69 // Sort a SyncedSession vector using our custom SyncedSession comparator. 70 void SortSyncedSessions(SyncedSessionVector* sessions); 71 72 // Compares two tab navigations base on the parameters we sync. 73 // (Namely, we don't sync state or type mask) 74 bool NavigationEquals(const sessions::SerializedNavigationEntry& expected, 75 const sessions::SerializedNavigationEntry& actual); 76 77 // Verifies that two SessionWindows match. 78 // Returns: 79 // - true if all the following match: 80 // 1. number of SessionWindows, 81 // 2. number of tabs per SessionWindow, 82 // 3. number of tab navigations per tab, 83 // 4. actual tab navigations contents 84 // - false otherwise. 85 bool WindowsMatch(const SessionWindowMap& win1, 86 const SessionWindowMap& win2); 87 88 // Retrieves the foreign sessions for a particular profile and compares them 89 // with a reference SessionWindow list. 90 // Returns true if the session windows of the foreign session matches the 91 // reference. 92 bool CheckForeignSessionsAgainst( 93 int index, 94 const std::vector<ScopedWindowMap>& windows); 95 96 // Retrieves the foreign sessions for a particular profile and compares them 97 // to the reference windows using CheckForeignSessionsAgains. Returns true if 98 // they match and doesn't time out. 99 bool AwaitCheckForeignSessionsAgainst( 100 int index, const std::vector<ScopedWindowMap>& windows); 101 102 // Open a single tab and block until the session model associator is aware 103 // of it. Returns true upon success, false otherwise. 104 bool OpenTab(int index, const GURL& url); 105 106 // Open multiple tabs and block until the session model associator is aware 107 // of all of them. Returns true on success, false on failure. 108 bool OpenMultipleTabs(int index, const std::vector<GURL>& urls); 109 110 // Wait for a session change to propagate to the model associator. Will not 111 // return until each url in |urls| has been found. 112 bool WaitForTabsToLoad(int index, const std::vector<GURL>& urls); 113 114 // Check if the session model associator's knows that the current open tab 115 // has this url. 116 bool ModelAssociatorHasTabWithUrl(int index, const GURL& url); 117 118 // Stores a pointer to the local session for a given profile in |session|. 119 // Returns true on success, false on failure. 120 bool GetLocalSession(int index, const browser_sync::SyncedSession** session); 121 122 // Deletes the foreign session with tag |session_tag| from the profile specified 123 // by |index|. This will affect all synced clients. 124 // Note: We pass the session_tag in by value to ensure it's not a reference 125 // to the session tag within the SyncedSession we plan to delete. 126 void DeleteForeignSession(int index, std::string session_tag); 127 128 } // namespace sessions_helper 129 130 #endif // CHROME_BROWSER_SYNC_TEST_INTEGRATION_SESSIONS_HELPER_H_ 131