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