1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/views/translate/translate_bubble_view.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/command_line.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/scoped_ptr.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chrome_notification_types.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/translate/cld_data_harness.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/translate/core/common/language_detection_details.h" 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/notification_details.h" 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class TranslateBubbleViewBrowserTest : public InProcessBrowserTest { 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TranslateBubbleViewBrowserTest() 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : cld_data_harness(test::CreateCldDataHarness()) {} 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~TranslateBubbleViewBrowserTest() {} 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // We can't Init() until PathService has been initialized. This happens 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // very late in the test fixture setup process. 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cld_data_harness->Init(); 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) InProcessBrowserTest::SetUpOnMainThread(); 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<test::CldDataHarness> cld_data_harness; 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TranslateBubbleViewBrowserTest); 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Flaky: crbug.com/394066 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TranslateBubbleViewBrowserTest, 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISABLED_CloseBrowserWithoutTranslating) { 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(TranslateBubbleView::IsShowing()); 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Show a French page and wait until the bubble is shown. 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::WebContents* current_web_contents = 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::Source<content::WebContents> source(current_web_contents); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui_test_utils::WindowedNotificationObserverWithDetails< 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::LanguageDetectionDetails> 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fr_language_detected_signal(chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) source); 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL french_url = ui_test_utils::GetTestUrl( 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html"))); 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), french_url); 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fr_language_detected_signal.Wait(); 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(TranslateBubbleView::IsShowing()); 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Close the window without translating. 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::CloseWindow(browser()); 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(TranslateBubbleView::IsShowing()); 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// http://crbug.com/378061 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TranslateBubbleViewBrowserTest, 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISABLED_CloseLastTabWithoutTranslating) { 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(TranslateBubbleView::IsShowing()); 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Show a French page and wait until the bubble is shown. 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::WebContents* current_web_contents = 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::Source<content::WebContents> source(current_web_contents); 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui_test_utils::WindowedNotificationObserverWithDetails< 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::LanguageDetectionDetails> 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fr_language_detected_signal(chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) source); 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL french_url = ui_test_utils::GetTestUrl( 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html"))); 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), french_url); 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fr_language_detected_signal.Wait(); 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(TranslateBubbleView::IsShowing()); 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Close the tab without translating. 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::CloseWebContents(browser(), current_web_contents, false); 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(TranslateBubbleView::IsShowing()); 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TranslateBubbleViewBrowserTest, 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CloseAnotherTabWithoutTranslating) { 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(TranslateBubbleView::IsShowing()); 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int active_index = browser()->tab_strip_model()->active_index(); 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Open another tab to load a French page on background. 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int french_index = active_index + 1; 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL french_url = ui_test_utils::GetTestUrl( 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html"))); 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::AddTabAt(browser(), french_url, french_index, false); 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(active_index, browser()->tab_strip_model()->active_index()); 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(2, browser()->tab_strip_model()->count()); 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Wait until the language is detected. 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::WebContents* web_contents = 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->tab_strip_model()->GetWebContentsAt(french_index); 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::Source<content::WebContents> source(web_contents); 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui_test_utils::WindowedNotificationObserverWithDetails< 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) translate::LanguageDetectionDetails> 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fr_language_detected_signal(chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) source); 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fr_language_detected_signal.Wait(); 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The bubble is not shown because the tab is not activated. 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(TranslateBubbleView::IsShowing()); 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Close the French page tab immediately. 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::CloseWebContents(browser(), web_contents, false); 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(active_index, browser()->tab_strip_model()->active_index()); 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->count()); 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(TranslateBubbleView::IsShowing()); 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Close the last tab. 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::CloseWebContents(browser(), 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false); 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 125