Home | History | Annotate | Download | only in gtk
      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