1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <map> 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/basictypes.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/automation/automation_tab_helper.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/automation/mock_tab_event_observer.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/tab_contents/test_tab_contents_wrapper.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/tab_contents/tab_contents.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/tab_contents/test_tab_contents.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "testing/gmock/include/gmock/gmock.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "testing/gtest/include/gtest/gtest.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing testing::_; 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass AutomationTabHelperTest : public TabContentsWrapperTestHarness { 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetUp() { 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContentsWrapperTestHarness::SetUp(); 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen mock_observer_.StartObserving(tab_helper()); 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected: 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // These are here so that we don't have to add each test as a 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // |AutomationTabHelper| friend. 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void StartLoading() { 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab_helper()->DidStartLoading(); 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void StopLoading() { 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab_helper()->DidStopLoading(); 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void TabContentsDestroyed() { 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab_helper()->TabContentsDestroyed(contents_wrapper()->tab_contents()); 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void WillPerformClientRedirect(int64 frame_id) { 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab_helper()->OnWillPerformClientRedirect(frame_id, 0); 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void CompleteOrCancelClientRedirect(int64 frame_id) { 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab_helper()->OnDidCompleteOrCancelClientRedirect(frame_id); 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationTabHelper* tab_helper() { 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return contents_wrapper()->automation_tab_helper(); 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MockTabEventObserver mock_observer_; 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenACTION_P2(CheckHasPendingLoads, tab_helper, has_pending_loads) { 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(has_pending_loads, tab_helper->has_pending_loads()); 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(AutomationTabHelperTest, AddAndRemoveObserver) { 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::MockFunction<void()> check; 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen { 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::InSequence expect_in_sequence; 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnFirstPendingLoad(_)); 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(check, Call()); 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StartLoading(); 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen check.Call(); 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab_helper()->RemoveObserver(&mock_observer_); 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StartLoading(); 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(AutomationTabHelperTest, StartStopLoading) { 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::MockFunction<void()> check; 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::InSequence expect_in_sequence; 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnFirstPendingLoad(contents())) 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(CheckHasPendingLoads(tab_helper(), true)); 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(check, Call()); 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnNoMorePendingLoads(contents())) 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(CheckHasPendingLoads(tab_helper(), false)); 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(tab_helper()->has_pending_loads()); 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StartLoading(); 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(tab_helper()->has_pending_loads()); 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen check.Call(); 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StopLoading(); 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(tab_helper()->has_pending_loads()); 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(AutomationTabHelperTest, DuplicateLoads) { 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::InSequence expect_in_sequence; 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnFirstPendingLoad(contents())); 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnNoMorePendingLoads(contents())); 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StartLoading(); 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StartLoading(); 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StopLoading(); 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StopLoading(); 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(AutomationTabHelperTest, ClientRedirect) { 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::MockFunction<void()> check; 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::InSequence expect_in_sequence; 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnFirstPendingLoad(contents())) 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(CheckHasPendingLoads(tab_helper(), true)); 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(check, Call()); 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnNoMorePendingLoads(contents())) 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .WillOnce(CheckHasPendingLoads(tab_helper(), false)); 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WillPerformClientRedirect(1); 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(tab_helper()->has_pending_loads()); 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen check.Call(); 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompleteOrCancelClientRedirect(1); 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(tab_helper()->has_pending_loads()); 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(AutomationTabHelperTest, DiscardExtraClientRedirects) { 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnFirstPendingLoad(contents())); 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnNoMorePendingLoads(contents())); 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WillPerformClientRedirect(1); 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WillPerformClientRedirect(1); 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompleteOrCancelClientRedirect(1); 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(tab_helper()->has_pending_loads()); 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompleteOrCancelClientRedirect(1); 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompleteOrCancelClientRedirect(2); 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(AutomationTabHelperTest, StartStopLoadingWithClientRedirect) { 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::MockFunction<void()> check; 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::InSequence expect_in_sequence; 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnFirstPendingLoad(contents())); 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnNoMorePendingLoads(contents())); 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StartLoading(); 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WillPerformClientRedirect(1); 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompleteOrCancelClientRedirect(1); 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StopLoading(); 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(AutomationTabHelperTest, ClientRedirectBeforeLoad) { 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::MockFunction<void()> check; 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::InSequence expect_in_sequence; 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnFirstPendingLoad(contents())); 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(check, Call()); 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnNoMorePendingLoads(contents())); 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StartLoading(); 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WillPerformClientRedirect(1); 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompleteOrCancelClientRedirect(1); 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(tab_helper()->has_pending_loads()); 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen check.Call(); 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StopLoading(); 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(AutomationTabHelperTest, ClientRedirectAfterLoad) { 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::MockFunction<void()> check; 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::InSequence expect_in_sequence; 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnFirstPendingLoad(contents())); 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(check, Call()); 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnNoMorePendingLoads(contents())); 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StartLoading(); 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WillPerformClientRedirect(1); 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StopLoading(); 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(tab_helper()->has_pending_loads()); 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen check.Call(); 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompleteOrCancelClientRedirect(1); 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(tab_helper()->has_pending_loads()); 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(AutomationTabHelperTest, AllFramesMustFinishRedirects) { 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::MockFunction<void()> check; 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::InSequence expect_in_sequence; 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnFirstPendingLoad(contents())); 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(check, Call()); 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnNoMorePendingLoads(contents())); 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WillPerformClientRedirect(1); 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WillPerformClientRedirect(2); 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompleteOrCancelClientRedirect(1); 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen check.Call(); 191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(tab_helper()->has_pending_loads()); 192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CompleteOrCancelClientRedirect(2); 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(tab_helper()->has_pending_loads()); 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(AutomationTabHelperTest, DestroyedTabStopsLoading) { 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::MockFunction<void()> check; 198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen testing::InSequence expect_in_sequence; 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnFirstPendingLoad(contents())); 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(mock_observer_, OnNoMorePendingLoads(contents())); 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StartLoading(); 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WillPerformClientRedirect(1); 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContentsDestroyed(); 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(tab_helper()->has_pending_loads()); 207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 208