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 17class GURL; 18 19namespace sessions_helper { 20 21typedef std::vector<const browser_sync::SyncedSession*> SyncedSessionVector; 22typedef browser_sync::SyncedSession::SyncedWindowMap SessionWindowMap; 23 24// Wrapper around a SyncedWindowMap that will automatically delete the 25// SessionWindow pointers it holds. 26class 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. 41bool 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. 46bool OpenTabAndGetLocalWindows(int index, 47 const GURL& url, 48 SessionWindowMap* local_windows); 49 50// Checks that window count and foreign session count are 0. 51bool CheckInitialState(int index); 52 53// Returns number of open windows for a profile. 54int GetNumWindows(int index); 55 56// Returns number of foreign sessions for a profile. 57int 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. 62bool 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. 66bool CompareSyncedSessions(const browser_sync::SyncedSession* lhs, 67 const browser_sync::SyncedSession* rhs); 68 69// Sort a SyncedSession vector using our custom SyncedSession comparator. 70void 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) 74bool 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. 85bool 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. 92bool 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. 99bool 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. 104bool 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. 108bool 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. 112bool 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. 116bool 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. 120bool 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. 126void DeleteForeignSession(int index, std::string session_tag); 127 128} // namespace sessions_helper 129 130#endif // CHROME_BROWSER_SYNC_TEST_INTEGRATION_SESSIONS_HELPER_H_ 131