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 #include "base/memory/scoped_vector.h"
      6 #include "chrome/browser/sessions/session_service.h"
      7 #include "chrome/browser/sync/test/integration/passwords_helper.h"
      8 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
      9 #include "chrome/browser/sync/test/integration/sessions_helper.h"
     10 #include "chrome/browser/sync/test/integration/sync_test.h"
     11 #include "sync/internal_api/public/sessions/sync_session_snapshot.h"
     12 
     13 using passwords_helper::SetDecryptionPassphrase;
     14 using passwords_helper::SetEncryptionPassphrase;
     15 using sessions_helper::CheckInitialState;
     16 using sessions_helper::DeleteForeignSession;
     17 using sessions_helper::GetLocalWindows;
     18 using sessions_helper::GetSessionData;
     19 using sessions_helper::OpenTabAndGetLocalWindows;
     20 using sessions_helper::ScopedWindowMap;
     21 using sessions_helper::SyncedSessionVector;
     22 using sessions_helper::WindowsMatch;
     23 
     24 class TwoClientSessionsSyncTest : public SyncTest {
     25  public:
     26   TwoClientSessionsSyncTest() : SyncTest(TWO_CLIENT) {}
     27   virtual ~TwoClientSessionsSyncTest() {}
     28 
     29  private:
     30   DISALLOW_COPY_AND_ASSIGN(TwoClientSessionsSyncTest);
     31 };
     32 
     33 static const char* kURL1 = "http://127.0.0.1/bubba1";
     34 static const char* kURL2 = "http://127.0.0.1/bubba2";
     35 
     36 // TODO(zea): Test each individual session command we care about separately.
     37 // (as well as multi-window). We're currently only checking basic single-window/
     38 // single-tab functionality.
     39 
     40 // Fails on Win, see http://crbug.com/232313
     41 #if defined(OS_WIN)
     42 #define MAYBE_SingleClientChanged DISABLED_SingleClientChanged
     43 #define MAYBE_SingleClientEnabledEncryptionAndChanged DISABLED_SingleClientEnabledEncryptionAndChanged
     44 #define MAYBE_BothChanged DISABLED_BothChanged
     45 #define MAYBE_DeleteIdleSession DISABLED_DeleteIdleSession
     46 #else
     47 #define MAYBE_SingleClientChanged SingleClientChanged
     48 #define MAYBE_SingleClientEnabledEncryptionAndChanged SingleClientEnabledEncryptionAndChanged
     49 #define MAYBE_BothChanged BothChanged
     50 #define MAYBE_DeleteIdleSession DeleteIdleSession
     51 #endif
     52 
     53 
     54 IN_PROC_BROWSER_TEST_F(TwoClientSessionsSyncTest,
     55                        MAYBE_SingleClientChanged) {
     56   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
     57 
     58   ASSERT_TRUE(CheckInitialState(0));
     59   ASSERT_TRUE(CheckInitialState(1));
     60 
     61   ScopedWindowMap client0_windows;
     62   ASSERT_TRUE(OpenTabAndGetLocalWindows(0, GURL(kURL1),
     63       client0_windows.GetMutable()));
     64 
     65   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
     66 
     67   // Get foreign session data from client 1.
     68   SyncedSessionVector sessions1;
     69   ASSERT_TRUE(GetSessionData(1, &sessions1));
     70 
     71   // Verify client 1's foreign session matches client 0 current window.
     72   ASSERT_EQ(1U, sessions1.size());
     73   ASSERT_TRUE(WindowsMatch(sessions1[0]->windows, *client0_windows.Get()));
     74 }
     75 
     76 IN_PROC_BROWSER_TEST_F(TwoClientSessionsSyncTest,
     77                        SingleClientEnabledEncryption) {
     78   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
     79 
     80   ASSERT_TRUE(CheckInitialState(0));
     81   ASSERT_TRUE(CheckInitialState(1));
     82 
     83   ASSERT_TRUE(EnableEncryption(0));
     84   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
     85   ASSERT_TRUE(IsEncryptionComplete(0));
     86   ASSERT_TRUE(IsEncryptionComplete(1));
     87 }
     88 
     89 IN_PROC_BROWSER_TEST_F(TwoClientSessionsSyncTest,
     90                        MAYBE_SingleClientEnabledEncryptionAndChanged) {
     91   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
     92 
     93   ASSERT_TRUE(CheckInitialState(0));
     94   ASSERT_TRUE(CheckInitialState(1));
     95 
     96   ScopedWindowMap client0_windows;
     97   ASSERT_TRUE(OpenTabAndGetLocalWindows(0, GURL(kURL1),
     98       client0_windows.GetMutable()));
     99   ASSERT_TRUE(EnableEncryption(0));
    100   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
    101 
    102   // Get foreign session data from client 1.
    103   ASSERT_TRUE(IsEncryptionComplete(1));
    104   SyncedSessionVector sessions1;
    105   ASSERT_TRUE(GetSessionData(1, &sessions1));
    106 
    107   // Verify client 1's foreign session matches client 0 current window.
    108   ASSERT_EQ(1U, sessions1.size());
    109   ASSERT_TRUE(WindowsMatch(sessions1[0]->windows, *client0_windows.Get()));
    110 }
    111 
    112 IN_PROC_BROWSER_TEST_F(TwoClientSessionsSyncTest,
    113                        BothClientsEnabledEncryption) {
    114   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
    115 
    116   ASSERT_TRUE(CheckInitialState(0));
    117   ASSERT_TRUE(CheckInitialState(1));
    118 
    119   ASSERT_TRUE(EnableEncryption(0));
    120   ASSERT_TRUE(EnableEncryption(1));
    121   ASSERT_TRUE(AwaitQuiescence());
    122   ASSERT_TRUE(IsEncryptionComplete(0));
    123   ASSERT_TRUE(IsEncryptionComplete(1));
    124 }
    125 
    126 IN_PROC_BROWSER_TEST_F(TwoClientSessionsSyncTest, MAYBE_BothChanged) {
    127   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
    128 
    129   ASSERT_TRUE(CheckInitialState(0));
    130   ASSERT_TRUE(CheckInitialState(1));
    131 
    132   // Open tabs on both clients and retain window information.
    133   ScopedWindowMap client0_windows;
    134   ASSERT_TRUE(OpenTabAndGetLocalWindows(0, GURL(kURL2),
    135       client0_windows.GetMutable()));
    136   ScopedWindowMap client1_windows;
    137   ASSERT_TRUE(OpenTabAndGetLocalWindows(1, GURL(kURL1),
    138       client1_windows.GetMutable()));
    139 
    140   // Wait for sync.
    141   ASSERT_TRUE(AwaitQuiescence());
    142 
    143   // Get foreign session data from client 0 and 1.
    144   SyncedSessionVector sessions0;
    145   SyncedSessionVector sessions1;
    146   ASSERT_TRUE(GetSessionData(0, &sessions0));
    147   ASSERT_TRUE(GetSessionData(1, &sessions1));
    148 
    149   // Verify client 1's foreign session matches client 0's current window and
    150   // vice versa.
    151   ASSERT_EQ(1U, sessions0.size());
    152   ASSERT_EQ(1U, sessions1.size());
    153   ASSERT_TRUE(WindowsMatch(sessions1[0]->windows, *client0_windows.Get()));
    154   ASSERT_TRUE(WindowsMatch(sessions0[0]->windows, *client1_windows.Get()));
    155 }
    156 
    157 IN_PROC_BROWSER_TEST_F(TwoClientSessionsSyncTest, MAYBE_DeleteIdleSession) {
    158   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
    159 
    160   ASSERT_TRUE(CheckInitialState(0));
    161   ASSERT_TRUE(CheckInitialState(1));
    162 
    163   // Client 0 opened some tabs then went idle.
    164   ScopedWindowMap client0_windows;
    165   ASSERT_TRUE(OpenTabAndGetLocalWindows(0, GURL(kURL1),
    166       client0_windows.GetMutable()));
    167 
    168   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
    169 
    170   // Get foreign session data from client 1.
    171   SyncedSessionVector sessions1;
    172   ASSERT_TRUE(GetSessionData(1, &sessions1));
    173 
    174   // Verify client 1's foreign session matches client 0 current window.
    175   ASSERT_EQ(1U, sessions1.size());
    176   ASSERT_TRUE(WindowsMatch(sessions1[0]->windows, *client0_windows.Get()));
    177 
    178   // Client 1 now deletes client 0's tabs. This frees the memory of sessions1.
    179   DeleteForeignSession(1, sessions1[0]->session_tag);
    180   ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0)));
    181   ASSERT_FALSE(GetSessionData(1, &sessions1));
    182 }
    183 
    184 // Fails all release trybots. crbug.com/263369.
    185 IN_PROC_BROWSER_TEST_F(TwoClientSessionsSyncTest,
    186                        DISABLED_DeleteActiveSession) {
    187   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
    188 
    189   ASSERT_TRUE(CheckInitialState(0));
    190   ASSERT_TRUE(CheckInitialState(1));
    191 
    192   // Client 0 opened some tabs then went idle.
    193   ScopedWindowMap client0_windows;
    194   ASSERT_TRUE(OpenTabAndGetLocalWindows(0, GURL(kURL1),
    195       client0_windows.GetMutable()));
    196 
    197   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
    198   SyncedSessionVector sessions1;
    199   ASSERT_TRUE(GetSessionData(1, &sessions1));
    200   ASSERT_EQ(1U, sessions1.size());
    201   ASSERT_TRUE(WindowsMatch(sessions1[0]->windows, *client0_windows.Get()));
    202 
    203   // Client 1 now deletes client 0's tabs. This frees the memory of sessions1.
    204   DeleteForeignSession(1, sessions1[0]->session_tag);
    205   ASSERT_TRUE(GetClient(1)->AwaitMutualSyncCycleCompletion(GetClient(0)));
    206   ASSERT_FALSE(GetSessionData(1, &sessions1));
    207 
    208   // Client 0 becomes active again with a new tab.
    209   ASSERT_TRUE(OpenTabAndGetLocalWindows(0, GURL(kURL2),
    210       client0_windows.GetMutable()));
    211   ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
    212   ASSERT_TRUE(GetSessionData(1, &sessions1));
    213   ASSERT_EQ(1U, sessions1.size());
    214   ASSERT_TRUE(WindowsMatch(sessions1[0]->windows, *client0_windows.Get()));
    215 }
    216