Home | History | Annotate | Download | only in integration
      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 // Open a single tab and block until the session model associator is aware
     97 // of it. Returns true upon success, false otherwise.
     98 bool OpenTab(int index, const GURL& url);
     99 
    100 // Open multiple tabs and block until the session model associator is aware
    101 // of all of them.  Returns true on success, false on failure.
    102 bool OpenMultipleTabs(int index, const std::vector<GURL>& urls);
    103 
    104 // Wait for a session change to propagate to the model associator.  Will not
    105 // return until each url in |urls| has been found.
    106 bool WaitForTabsToLoad(int index, const std::vector<GURL>& urls);
    107 
    108 // Check if the session model associator's knows that the current open tab
    109 // has this url.
    110 bool ModelAssociatorHasTabWithUrl(int index, const GURL& url);
    111 
    112 // Stores a pointer to the local session for a given profile in |session|.
    113 // Returns true on success, false on failure.
    114 bool GetLocalSession(int index, const browser_sync::SyncedSession** session);
    115 
    116 // Deletes the foreign session with tag |session_tag| from the profile specified
    117 // by |index|. This will affect all synced clients.
    118 // Note: We pass the session_tag in by value to ensure it's not a reference
    119 // to the session tag within the SyncedSession we plan to delete.
    120 void DeleteForeignSession(int index, std::string session_tag);
    121 
    122 }  // namespace sessions_helper
    123 
    124 #endif  // CHROME_BROWSER_SYNC_TEST_INTEGRATION_SESSIONS_HELPER_H_
    125