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 "chrome/browser/ui/gtk/one_click_signin_bubble_gtk.h" 6 7 #include <gtk/gtk.h> 8 9 #include "base/bind.h" 10 #include "base/compiler_specific.h" 11 #include "base/memory/weak_ptr.h" 12 #include "chrome/browser/ui/browser.h" 13 #include "chrome/browser/ui/gtk/browser_window_gtk.h" 14 #include "chrome/browser/ui/sync/one_click_signin_sync_starter.h" 15 #include "chrome/test/base/in_process_browser_test.h" 16 #include "testing/gmock/include/gmock/gmock.h" 17 18 class OneClickSigninBubbleGtkTest : public InProcessBrowserTest { 19 public: 20 OneClickSigninBubbleGtkTest() 21 : weak_ptr_factory_(this), 22 start_sync_callback_( 23 base::Bind(&OneClickSigninBubbleGtkTest::OnStartSync, 24 weak_ptr_factory_.GetWeakPtr())), 25 bubble_(NULL) {} 26 27 virtual OneClickSigninBubbleGtk* MakeBubble( 28 BrowserWindow::OneClickSigninBubbleType bubbleType) { 29 return new OneClickSigninBubbleGtk( 30 static_cast<BrowserWindowGtk*>(browser()->window()), 31 bubbleType, 32 string16(), 33 string16(), 34 start_sync_callback_); 35 } 36 37 MOCK_METHOD1(OnStartSync, void(OneClickSigninSyncStarter::StartSyncMode)); 38 39 protected: 40 base::WeakPtrFactory<OneClickSigninBubbleGtkTest> weak_ptr_factory_; 41 BrowserWindow::StartSyncCallback start_sync_callback_; 42 43 // Owns itself. 44 OneClickSigninBubbleGtk* bubble_; 45 }; 46 47 // Test that the dialog calls the callback if the OK button is clicked. 48 // Callback should be called to setup sync with default settings. 49 IN_PROC_BROWSER_TEST_F(OneClickSigninBubbleGtkTest, DialogShowAndOK) { 50 EXPECT_CALL(*this, OnStartSync( 51 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS)).Times(1); 52 53 MakeBubble( 54 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_MODAL_DIALOG)->OnClickOK(NULL); 55 } 56 57 // Test that the dialog calls the callback if the Undo button is 58 // clicked. Callback should be called to abort the sync process. 59 IN_PROC_BROWSER_TEST_F(OneClickSigninBubbleGtkTest, DialogShowAndUndo) { 60 EXPECT_CALL(*this, OnStartSync( 61 OneClickSigninSyncStarter::UNDO_SYNC)).Times(1); 62 63 MakeBubble(BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_MODAL_DIALOG) 64 ->OnClickUndo(NULL); 65 } 66 67 // Test that the dialog calls the callback if the advanced link is clicked. 68 // Callback should be called to configure sync before starting. 69 IN_PROC_BROWSER_TEST_F(OneClickSigninBubbleGtkTest, DialogShowAndClickAdvanced){ 70 EXPECT_CALL(*this, 71 OnStartSync(OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST)). 72 Times(1); 73 74 MakeBubble(BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_MODAL_DIALOG) 75 ->OnClickAdvancedLink(NULL); 76 } 77 78 // Test that the dialog calls the callback if the bubble is closed. 79 // Callback should be called to setup sync with default settings. 80 IN_PROC_BROWSER_TEST_F(OneClickSigninBubbleGtkTest, DialogShowAndClose) { 81 EXPECT_CALL(*this, OnStartSync( 82 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS)).Times(1); 83 84 MakeBubble( 85 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_MODAL_DIALOG)->bubble_->Close(); 86 } 87 88 // Test that the bubble does not call the callback if the OK button is clicked. 89 IN_PROC_BROWSER_TEST_F(OneClickSigninBubbleGtkTest, BubbleShowAndOK) { 90 EXPECT_CALL(*this, OnStartSync( 91 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS)).Times(0); 92 93 MakeBubble( 94 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE)->OnClickOK(NULL); 95 } 96 97 // Test that the bubble does not call the callback 98 // if the advanced link is clicked. 99 IN_PROC_BROWSER_TEST_F(OneClickSigninBubbleGtkTest, BubbleShowAndClickAdvanced){ 100 EXPECT_CALL(*this, OnStartSync( 101 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST)).Times(0); 102 103 MakeBubble(BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE) 104 ->OnClickAdvancedLink(NULL); 105 } 106 107 // Test that the bubble does not call the callback if the bubble is closed. 108 IN_PROC_BROWSER_TEST_F(OneClickSigninBubbleGtkTest, BubbleShowAndClose) { 109 EXPECT_CALL(*this, OnStartSync( 110 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS)).Times(0); 111 112 MakeBubble( 113 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE)->bubble_->Close(); 114 } 115 116 117